資源描述:
《vc++窗口類的誕生》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、本資料由-校園大學(xué)生創(chuàng)業(yè)網(wǎng)-提供http://www.chuangyw.com/窗口類的誕生(注冊(cè)自己的窗口類)一.什么是窗口類在Windows中運(yùn)行的程序,大多數(shù)都有一個(gè)或幾個(gè)可以看得見(jiàn)的窗口,而在這些窗口被創(chuàng)建起來(lái)之前,操作系統(tǒng)怎么知道該怎樣創(chuàng)建該窗口,以及用戶操作該窗口的各種消息交給誰(shuí)處理呢?所以VC在調(diào)用Windows的API(CreateWindow或者CreateWindowEx)創(chuàng)建窗口之前,要求程序員必須定義一個(gè)窗口類(不是傳統(tǒng)C++意義上的類)來(lái)規(guī)定所創(chuàng)建該窗口所需要的各種信息,主要包括:窗口的消息處理函數(shù)、窗口的風(fēng)格、圖標(biāo)、鼠標(biāo)、菜單
2、等。其定義如下:typedefstructtagWNDCLASSA(注:該結(jié)構(gòu)為ANSII版本){UINTstyle;WNDPROClpfnWndProc;intcbClsExtra;intcbWndExtra;HINSTANCEhInstance;HICONhIcon;HCURSORhCursor;HBRUSHhbrBackground;LPCSTRlpszMenuName;LPCSTRlpszClassName;}WNDCLASSA,*PWNDCLASSA,NEAR*NPWNDCLASSA,FAR*LPWNDCLASSA;style表示該類窗口的風(fēng)格
3、,如style=CS_VREDRAW
4、CS_HREDRAW表示窗口在運(yùn)動(dòng)或者調(diào)整大小時(shí)需要重畫(huà),關(guān)于其它風(fēng)格可在MSDN中查到。lpfnWndProc為一指針,指向用戶定義的該窗口的消息處理函數(shù)。cbClsExtra用于在窗口類結(jié)構(gòu)中保留一定空間,用于存在自己需要的某些信息。cbWndExtra用于在Windows內(nèi)部保存的窗口結(jié)構(gòu)中保留一定空間。hInstance表示創(chuàng)建該窗口的程序的運(yùn)行實(shí)體代號(hào)(WinMain的參數(shù)之一)。hIcon、hCursor、hbrBackground、lpszMenuName分別表示該窗口的圖標(biāo)、鼠標(biāo)形狀、背景色以及菜單。
5、lpszClassName表示該窗口類別的名稱,即標(biāo)識(shí)該窗口類的標(biāo)志。從上面可以看出一個(gè)窗口類就對(duì)應(yīng)一個(gè)WNDCLASSA結(jié)構(gòu)(這里以ANSII為例),當(dāng)程序員將該結(jié)構(gòu)按自己要求填寫(xiě)完成后,就可以調(diào)用RegisterClass(或RegisterClassEx)函數(shù)將該類注冊(cè),這樣以后凡是要?jiǎng)?chuàng)建該窗口,只需要以該類名(lpszClassName中指定)為參數(shù)調(diào)用CreateWindow,你看多方便呀,真是一舉多得啊!二.傳統(tǒng)SDK中的窗口類在線代理http://www.dailiav.com/提供部分資料本資料由-校園大學(xué)生創(chuàng)業(yè)網(wǎng)-提供http://ww
6、w.chuangyw.com/既然我們知道了什么是窗口類,那我們就將它放到一個(gè)傳統(tǒng)的SDK程序中,看看是怎樣運(yùn)行的。#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){staticTCHARszAppName[]=TEXT("HelloWin");WNDCLASwndclass;wndclass.style=CS_HREDRA
7、W
8、CS_VREDRAW;wndclass.lpfnWndProc=WndProc;......wndclass.lpszClassName=szAppName;RegisterClass(&wndclass);hwnd=CreateWindow(szAppName,...,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}returnmsg.wP
9、aram;在線代理http://www.dailiav.com/提供部分資料本資料由-校園大學(xué)生創(chuàng)業(yè)網(wǎng)-提供http://www.chuangyw.com/}這是一個(gè)標(biāo)準(zhǔn)的Windows程序代碼,程序被啟動(dòng)后,填寫(xiě)一個(gè)窗口類,然后調(diào)用RegisterClass將該類注冊(cè),接著創(chuàng)建該窗口,最后顯示窗口和進(jìn)入消息循環(huán)。三.MFC中的窗口類當(dāng)你看到這里,也許你可能會(huì)感到奇怪:我在用MFC向?qū)ё龀绦驎r(shí),并沒(méi)有進(jìn)行什么窗口類的填寫(xiě)和注冊(cè)嗎?是的,你沒(méi)有,但是向?qū)湍阕隽?。在展示向?qū)窃趺醋龅闹?,?qǐng)讓我先介紹一下預(yù)先知識(shí)。在MFC系統(tǒng)中定義了五個(gè)默認(rèn)的窗口類(這里
10、不包括AFX_WNDCOMMCTLS_REG),分別定義在AFXIMPL.h中: