Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Как создавать новые документы без CWinApp::OnFileNew

Иногда необходимо создать окно, основанное на CMultiDocTemplate (другими словами, комбинацию CFrame/CDocument/CView) без использования CWinApp::OnFileNew.

Например, если программа имеет несколько шаблонов документов, CWinApp::OnFileNew будет спрашивать пользователя (в диалоговом окне) какого типа документ открывать. Программист может уже заранее знать, какого типа CMultiDocTemplate должен быть использован и, поэтому необходимость спрашивать пользователя отпадает.

Предположим, что приложение изначально создано при помощи AppWizard. Тогда для создания окна, основанного на CMultiDocTemplate, можно использовать недокументированную функцию CMultiDocTemplate::OpenDocumentFile. Для этого рассмотрим несколько шагов:

  1. Добавьте указатель CMultiDocTemplate в Ваш класс, наследованный от CWinApp:
          class CMyApp : public CWinApp
           {
             ...
     
            public:
             CMultiDocTemplate* m_pDocTemplate;
     
             ...
     
           } 

    ЗАМЕЧАНИЕ: Если Вы планируете использовать несколько типов документов, то должны создать переменную-указатель CMultiDocTemplate для каждого типа документа.

  2. В функции CWinApp::InitInstance, уберите создание CMultiDocTemplate от начала и до AddDocTemplate. Установите указатель на новый CMultiDocTemplate. Используйте указатель для вызова AddDocTemplate:
          BOOL CMyApp::InitInstance()
           {
             ...
     
             m_pDocTemplate = new CMultiDocTemplate(IDR_TEXTTYPE,
                                           RUNTIME_CLASS(CMyDoc),
                                           RUNTIME_CLASS(CMDIChildWnd),
                                           RUNTIME_CLASS(CMyView));
     
             AddDocTemplate(m_pDocTemplate);
     
             ...
     
           } 



  3. Для создания нового окна используйте метод указателя CMultiDocTemplate::OpenDocumentFile с параметром NULL. Для данного примера подразумевается, что в окне CView присутствует кнопка. В обработчике кнопки BN_CLICKED мы хотим создать окно, основанное на m_pDocTemplate:
          void CMyView::OnNewWindowButtonClicked()
           {
               CMyApp* pApp = (CMyApp*)AfxGetApp();
               pApp->m_pDocTemplate->OpenDocumentFile(NULL);
           } 

    Эта же самая технология может быть использована и для окна, основанного на CSingleDocTemplate в однодокументном приложении (Single Document Interface (SDI)). Однако, в этом нет необходимости, так как такое приложение имеет всего один шаблон документа и, при вызове OnFileNew() создастся новое окно, не предлагая пользователю выбирать тип документа.

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS