SDK寫程序時,main()的地位被WinMain()取代了.
類CWinApp表示應(yīng)用程序本身.
類關(guān)系結(jié)構(gòu)圖
CObject |--- CCmdTarget |--- CWinThread |--- CWinApp CObject |--- CCmdTarget |--- CWnd |--- CFrameWnd
一,、virtual BOOL CWinApp::initlnstance(); 聲明Initstance(),就是自己寫一段InitInstance()來重載CWinApp提供的那段程序.
二,、主窗口通常是CFrameWnd或者其派生類,先設(shè)置從CFrameWnd派生的新類MyFrameWindow. 生成主窗口對象后,必須將它賦給CWinApp的成員變量:m_pMainWnd再調(diào)用CFrameWnd::Create()創(chuàng)建主窗口. 在程序中創(chuàng)建一個MFC對象并不等于要求Windows系統(tǒng)創(chuàng)建一個接口對象,必須等到調(diào)用Create()后, MFC才要求Windows系統(tǒng)創(chuàng)建相對的接口對象. 所以Create()的第一個參數(shù)是NULL,第二個參數(shù)是將該窗口的標題文字設(shè)置為"Hello".
三、調(diào)用CWnd::ShowWindow()要求Windows將這個顯示在屏幕上.
四、類MyFrameWindow重載了CFranmeWnd的成員函數(shù)OnPaint(),
當被遮蓋的部分再次顯示在屏幕上時,系統(tǒng)會給該窗口發(fā)出WM_PAINT消息, 告訴此窗口:工作區(qū)哪些部分需要重繪. 處理消息:寫一個消息映射表將消息交付給指定函數(shù)處理. 創(chuàng)建映射表的類中加上這條語句 DECLARE_MESSAGE_MAP()
在程序的其它部分聲明一個符合下列格式的表格: BEGIN_MESSAGE_MAP(類名稱,父類的名稱) ...... END_MESSAGE_MAP()
要處理WM_PAINT在BEGIN與END之間加ON_WM_PAINT() 還要替換MyFrameWindow加上OnPaint()成員函數(shù)才行.
五、設(shè)置窗口的圖標.
設(shè)置圖標的程序代碼集中于 ?App::InitInstance()中
★ HICON CWinApp::Loadicon(LPCTSTR lpszResourceName)const; ★ HICON CWinApp::Loadicon(UINT nIDResource)const; 圖標的名稱(字符串)后者以id為參數(shù),要把這個圖標賦給哪個窗口, 調(diào)用CWnd::SetIcon() 就可以了 。
★ HICON CWnd::Setlcon(HICON hIcon,BOOL bBigIcon) 第一個參數(shù)是要賦給該窗口的圖標的句柄,第二參數(shù)圖標是否為大圖標16*16 FALSE,32*32設(shè)為TRUE.
載入光標資源 ★ HCURSOR CWinApp::LoadCursor(LPCTSTR lpszResourceName)const; ★ HCURSOQR CWinApp::LoadCursor(UINT nIDResource)const;
載入標準光標資源 ★ HCURSOR CWinApp::LoadStandardCursor(LPCTSTR lpszCursorName)const;
載入標準圖標資源 ★ HICON CWinApp::LoadStandardIcon(LPCTSTR lpszIconName)const;
六,、設(shè)置窗口主菜單:
在創(chuàng)建窗口對象之前,MFC核心會先跳到虛函數(shù) CWnd::PreCreateWindow()執(zhí)行, 參數(shù)寫在結(jié)構(gòu)CREATESTRUCT因此只要在CWnd::PreCreateWindows()中修改CREATESTRUCT的參數(shù), LoadMenu()以便載入菜單資源. HMENU LoadMenu(HINSTANCE hInstance,LPCTSTR lpMenuName); 第一個參數(shù)標示應(yīng)用程序?qū)嵗浔?通常用NULL表示當前這個應(yīng)用程序, 第二個圖標資源的名字,不過是數(shù)字.常量表示資源, 因此要用MAKEINTRESOURCE()將常量轉(zhuǎn)換成它可接收的格式. LPTSTR MAKEINTRESOURCE(WORD winteger);
七,、關(guān)閉窗口及結(jié)束程序的執(zhí)行
成員函數(shù)MyFrameWindow::OnFileExit()必須負責結(jié)束應(yīng)用程序的執(zhí)行, 只要向它發(fā)送一個消息WM_CLOSE就可以了. 除了Windows操作系統(tǒng)可以發(fā)出消息外,還可以給窗口發(fā)送消息. PostMessage()發(fā)送一個WM_CLOSE消息給窗口對象自己,它收到命令后,就會關(guān)閉.
(#)
|