導航:首頁 > 文件教程 > mfcmap頭文件

mfcmap頭文件

發布時間:2024-01-26 00:18:11

Ⅰ 基於對話框的MFC應用程序怎麼建立

使用VC6.0構建最簡單的MFC程序

通過這個例子可以加深對MFC的CWinApp和CFrameWnd的了解。

1. 使用應用程序向導產生一個空的「Win32 Application」Project;
2. 添加頭文件「StdAfx.h」,內容是 #include <afxwin.h>
3. 添加源文件「StdAfx.cpp」,內容是 #include "StdAfx.h"
4. 執行Build,會看到LinkError,打開Project|Setting,在General里,選擇「Use MFC in Shared DLL」,再次執行Build,一切OK。WinMain內嵌在MFC的鏈接庫里。
5. 按F5調試執行,會出現一個「Unhandled exception …」,通過CallStack可以找到原因:AfxGetThread()和AfxGetApp()返回的都是NULL。需要實現一個全局的CWinApp對象。
6. 添加一個新Class:「class CMyWinApp : public CWinApp」,頭文件和源文件分別是Hello.cpp Hello.h,並在Hello.cpp里實例一個全局對象:CMyWinApp theApp。CWinApp只能實例一個對象,在其構造函數里加了ASSERT,防止多次實例。
7. Build之後,再按F5調試執行,程序一閃就結束了,也沒有錯誤。在Output窗口裡可以找到一句「Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.」,是因為沒有主窗口,所以程序直接退出了。
8. 重載CWinApp::InitInstance,在裡面直接m_pMainWnd = new CFrameWnd;是不行的,因為CFrameWnd的構造函數里沒有調用Create,窗口不會被創建。
9. 在CMyWinApp::InitInstance()里寫入Code:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL);

m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();

return TRUE;
}
編譯後運行,可以看到一個窗口:

即,可以直接使用MFC的CFrameWnd類實現一個窗口,但是CWinApp不能直接使用,必須派生一個用戶類,因為Windows程序的啟動順序是:實例全局對象,WinMain,…,如果不實例CWinApp,找不到機會創建窗口,而派生之後,就可以重載CWinApp::InitInstance函數,AfxWinMain里會調用這個函數。
10. 使用File|New,選擇Resource Script,添加一個資源文件,在資源文件里添加一個Menu,在Menu的Property的ID里填上MenuName字串"MainMenu",然後修改InitInstance:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL, "MainMenu");

m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();

return TRUE;
}
編譯運行後就可以看到菜單了。如果Menu使用的整數ID,使用MAKEINTRESOURCE轉換為字元串。

11. 到現在為止,因為直接使用的CFrameWnd,這個程序什麼也不能幹,要實現用戶功能,我們要從CFrameWnd派生一個自己的類CMainFram,我打算在窗口裡實現一個字元串從天而降的功能,即重載CFrameWnd::OnPaint函數。
12. 首先給CMainFram加上消息映射表,在類聲明裡加上DECLARE_MESSAGE_MAP(),在類實現文件里添加
BEGIN_MESSAGE_MAP(CMainFram, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
對於標準的Windows消息,其消息名稱和消息函數都是固定的,而且CFrameWnd(或其基類)已經都實現了這些消息響應的虛函數,只要在BEGIN… END… 里寫入消息映射描述,就會添加到消息映射表裡。
注意,對於CView類來說,ON_WM_PAINT()在文件:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\ VIEWCORE.CPP的MESSAGE_MAP已經寫好了,用戶不用寫,但對於CFrameWnd來說,必須寫出來才能加到消息映射表裡。
13. 實現函數OnPaint,就可以沿著Client區域畫一個紅色的矩形框。
void CMainFram::OnPaint()
{
CPaintDC dc(this);
RECT rect;

CPen *poOldPen;
CPen oNewPen(PS_SOLID, 1, RGB(255,0,0));

poOldPen = dc.SelectObject(&oNewPen);

GetClientRect(&rect);
dc.Rectangle(&rect);
dc.SelectObject(poOldPen);
}

14. 在Resource添加一個簡單的對話框,添加一個OnAbout消息響應函數:
void CMainFram::OnAbout()
{
CDialog dlg(IDD_DIALOG_ABOUT, this);
dlg.DoModal();
}
點擊Help|About時,就會彈出資源里的對話框,可見對於沒有復雜控制項的簡單對話框,可以直接使用CDialog類,不需要派生。

閱讀全文

與mfcmap頭文件相關的資料

熱點內容
適合微信閱讀的手機報 瀏覽:114
win10設置應用許可權管理 瀏覽:47
wordpress製作單頁網站導航頁面 瀏覽:277
什麼海外網站可以看限製片 瀏覽:596
指尖見app在哪裡下載 瀏覽:367
java聊天室課程設計 瀏覽:670
responsejavascript 瀏覽:71
如何從殺毒軟體裡面恢復出文件 瀏覽:972
越獄iphone如何備份 瀏覽:124
蘋果四S萬能鑰匙怎麼破不開 瀏覽:603
網路列印機共享怎麼連接 瀏覽:313
fme系統找不到指定文件 瀏覽:301
iphoneid和密碼忘了怎麼辦 瀏覽:238
蘋果電腦優盤里的文件如何加密 瀏覽:284
word標題名和文件名一致 瀏覽:957
excel修改後的文件保持了怎麼恢復 瀏覽:340
社保網路認證怎麼弄 瀏覽:92
蘋果手機怎麼傳數據到新手機相冊 瀏覽:50
5s升級ios92無服務 瀏覽:354
ubuntu翻譯工具 瀏覽:665

友情鏈接