新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MFC和Win32技術(shù)應(yīng)用分析

MFC和Win32技術(shù)應(yīng)用分析

作者: 時(shí)間:2018-09-05 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201809/388505.htm

“窗口類”的數(shù)據(jù)結(jié)構(gòu)

“窗口類”是Windows系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),可以把它理解為Windows系統(tǒng)的類型定義,而Windows窗口則是相應(yīng)“窗口類”的實(shí)例。Windows使用一個(gè)結(jié)構(gòu)來描述“窗口類”,其定義如下:

typedef struct _WNDCLASSEX {

UINT cbSize; //該結(jié)構(gòu)的字節(jié)數(shù)

UINT style; //窗口類的風(fēng)格

WNDPROC lpfnWndProc; //窗口過程

int cbClsExtra;

int cbWndExtra;

HANDLE hInstance; //該窗口類的窗口過程所屬的應(yīng)用實(shí)例

HICON hIcon; //該窗口類所用的像標(biāo)

HCURSOR hCursor; //該窗口類所用的光標(biāo)

HBRUSH hbrBackground; //該窗口類所用的背景刷

LPCTSTR lpszMenuName; //該窗口類所用的菜單資源

LPCTSTR lpszClassName; //該窗口類的名稱

HICON hIconSm; //該窗口類所用的小像標(biāo)

} WNDCLASSEX;

從“窗口類”的定義可以看出,它包含了一個(gè)窗口的重要信息,如窗口風(fēng)格、窗口過程、顯示和繪制窗口所需要的信息,等等。關(guān)于窗口過程,將在后面消息映射等有關(guān)章節(jié)作詳細(xì)論述。

Windows系統(tǒng)在初始化時(shí),會(huì)注冊(cè)(Register)一些全局的“窗口類”,例如通用控制窗口類。應(yīng)用程序在創(chuàng)建自己的窗口時(shí),首先必須注冊(cè)自己的窗口類。在MFC環(huán)境下,有幾種方法可以用來注冊(cè)“窗口類”,下面分別予以討論。

調(diào)用AfxRegisterClass注冊(cè)

AfxRegisterClass函數(shù)是MFC全局函數(shù)。AfxRegisterClass的函數(shù)原型:

BOOL AFXAPI AfxRegisterClass(WNDCLASS *lpWndClass);

參數(shù)lpWndClass是指向WNDCLASS結(jié)構(gòu)的指針,表示一個(gè)“窗口類”。

首先,AfxRegisterClass檢查希望注冊(cè)的“窗口類”是否已經(jīng)注冊(cè),如果是則表示已注冊(cè),返回TRUE,否則,繼續(xù)處理。

接著,調(diào)用::RegisterClass(lpWndClass)注冊(cè)窗口類;

然后,如果當(dāng)前模塊是DLL模塊,則把注冊(cè)“窗口類”的名字加入到模塊狀態(tài)的域m_szUnregisterList中。該域是一個(gè)固定長度的緩沖區(qū),依次存放模塊注冊(cè)的“窗口類”的名字(每個(gè)名字是以“n