|
Программирование >> Процедурные приложения
public: CMainWnd() ( Create(NULL, Hello MFC World , WSJDVERLAPPEDWINDOW, rectDefault, NULL, NULL), ) BOOL CTheApp: : Initlnstance 0 m pMainWnd = new CMainWnd (); m pMainWnd->ShowWindow (m nCmdShow) ; m pMainWnd->UpdateWindow() ; return TRUE; } CTheApp TheApp; В следующих параграфах мы детально рассмотрим назначение каждого блока программы. Файл AFXWIN.H Файл AFXWIN.Hвыполняет роль шлюза в библиотеку MFC . Через него подключаются все остальные файлы заголовков, включая WINDOWS. H. Использование файла AFXWIN.H упрощает создание предварительно скомпилированных файлов заголовков. Предварительная компиляция частей программы позволяет сократить время, затрачиваемое на повторное построение приложения. Создание класса, производного от CWinApp Приложение начинается с определения класса CTheApp, являющегося производным от CWinApp: class CTheApp : public CWinApp public: virtual BOOL Initlnstance () ; }; Виртуальный метод Initlnstance() наследуется от CWinApp. Переопределяя этот метод, программист получает возможность управлять инициализацией приложения. В классе CWinAppимеются также открытые виртуальные функции Exitlnstance(),Run()и другие, но в большинстве приложений нет необходимости переопределять их. Ниже приведено описание класса CWinApp, взятое из файла AFXWIN.H. / CWinApp- базов1й класс для всех приложений Windows class CWinApp : public CWinThread { DECLARE DYNAMIC (CWinApp) public: Конструктор CWinApp(LPCTSTR IpszAppName = NULL); имя приложения задается по умолчанию Атрибуты параметры запуска ( не изменять) HINSTANCE m hlnstance; HINSTANCE m hPrev!nstance; LPTSTR m lpCmdLine; int m nCmdShow; параметры выполнения ( могут меняться в Initlnstance) LPCTSTR m pszAppName; читаемое имя приложения LPCTSTR m pszRegistryKey; используется для регистрации CDocManager* m pDocManager; public: устанавливаются в конструкторе LPCTSTRm pszExeName; имя исполняемого файла (без пробелов) LPCTSTRm pszHelpFilePath; определяется на основании пути к модулю LPCTSTRm pszProfileName; определяется на основании имени приложения Операции инициализации - должны выполняться в Initlnstanceprotected: void LoadStdProfileSettings(UINT nMaxMRU = AFX MRU COUNT); void EnableShellOpen (); void SetDialogBkColor(COLORREF clrCtlBk = RGB(192,192,192), COLORREFclrCtlText= RGB(0, 0, 0)); установка фонового цвета диалогового окна и окна сообщений void SetRegistryKey(LPCTSTR IpszRegistryKey); void SetRegistryKey(UINT nIDRegistryKey); позволяет хранить данные о приложении в реестре, а не в INI-файле ( в качестве ключа обычно используется название компании) BOOLEnable3dControls(); для 3-мерных элементов управления используется файл CTL3D32.DLLtifndef AFXDLL BOOLEnableSdControlsStatic(); для тех же целей статически компонуется файлCTL3D.LIB fendif void RegisterShellFileTypes(BOOL bCompat=FALSE); вызывается после того, как будут зарегистрированы все шаблоны документа . void RegisterShellFileTypesCompat(); требуется для совместимости с предыдущими версиями void UnregisterShellFileTypes(); Вспомогательные операции - обычно выполняются в Initlnstance public: Указатели м1ши HCURSOR LoadCursor(LPCTSTR IpszResourceName) const; HCURSOR LoadCursor(UINT nIDResource) const; HCDRSOR LoadStandardCursor(LPCTSTR IpszCursorName) const; HCURSOR LoadOEMCursor(UINT nIDCursor) const; Значки HICON Loadlcon(LPCTSTR IpszResourceName) const; HICON Loadlcon(UINT nIDResource) const; HICON LoadStandardlcon(LPCTSTR IpszIconName) const; HICON LoadOEMIcon(UINT nIDIcon) const; могут переопределяться virtual BOOL Initlnstance(); virtualintExitlnstanceO; возвращает код завершения приложения virtual int Run(); virtual BOOL OnIdle(LONG ICount); virtual LRESULT ProcessWndProcException(CException* e,const MSG* pMsg); public: virtual CWinApp(); protected: { {AFX MSG (CWinApp) afx msg void OnAppExitO; afx msg void OnUpdateRecentFileMenu (CCmdUI* pCmdUI) ; af x msg BOOL OnOpenRecentFile (UINT nID) ; }}afx msg declare message map ( ) }; Класс CWinApp отвечает за создание и работу цикла сообщений, который рассматривался в главе 5. Его использование позволяет избежать написания повторяющегося кода и тем самым сократить размер программы. Класс CFrameWnd Окно приложения, выводимое на экран и управляемое классом CMainWnd, создается на базе класса CFrameWnd: class CMainWnd : public CFrameWnd public: CMainWnd () ( Create (NULL, Hello MFC World , WS OVERLAPPEDWINDOW, rectDefault, NULL, NULL); } Конструктор класса CMainWnd вызывает метод Create(), предназначенный для установления начальных параметров окна. В данном примере задается стиль окна и строка заголовка. В главе 7 будет показано, что с помощью этой же функции можно задать строку меню и таблицу горячих клавиш. Ниже представлено описание класса CFrameWnd, взятое из файла AFXWIN.H.
CFrameWnd- базов1й класс для масштабируем1х окон class CFrameWnd : public CWnd DECLARE DYNCREATE(CFrameWnd) Конструкторы public: static AFX DATA const CRect rectDefault; CFrameWnd(); BOOL LoadAccelTable(LPCTSTR IpszResourceName); BOOL Create(LPCTSTR IpszClassName, LPCTSTR IpszWindowName, DWORD dwStyle = WS OVERLAPPEDWINDOW, const RECT& rect = rectDefault, CWnd* pParentWnd = NULL, != NULL для всплывающих окон LPCTSTR IpszMenuName = NULL, DWORD dwExStyle =0, CCreateContext* pContext = NULL); динамическое создание - загружает рамку и связанные с окном ресурсы virtualBOOLLoadFrame(HINTnIDResource, DWORD dwDefaultStyle = WS OVERLAPPEDWINDOW I FWS ADDTOTITLE, CWnd* pParentWnd = NULL, CCreateContext* pContext = NULL); специальная функция для создания области просмотра CWnd*. CreateView(CCreateContext* pContext, UINT nID = AFX IDW PANE FIRST); прикрепление панелей инструментов void EnableDocking(DWORD dwDockStyle); void DockControlBar(CControlBar* pBar, UINT nDockBarlD = 0, LPCRECT IpRect = NULL); void FloatcontrolBar(CControlBar* pBar, CPoint point, DWORD dwStyle = CBRS ALIGN TOP); CControlBar* GetControlBar(UINT nID); Реализация public: virtual -CFrameWnd (); intm nWindow; номер окна - отображается как :n
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |