MFC--自設(shè)半透明窗口
創(chuàng)建一個完整窗體要經(jīng)歷的步驟:
1)設(shè)計一個窗口類;
2)注冊窗口類;
3)創(chuàng)建窗口;
4)顯示及更新窗口。
第一步:
windows 已經(jīng)為用戶定義了一個完整的窗口類,用戶只需要將各個屬性填滿既可以。窗口類是一個 結(jié)構(gòu)體,其定義如下:
typedef struct _WNDCLASS{
UINT style;//class style
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS;
第二步:
用RegisterClass(&wndclass)來定義的窗口注冊。
第三步:創(chuàng)建窗口
1)定義一個句柄,然后用CreateWindow()來為句柄賦值。函數(shù)用法參看MSDN。創(chuàng)建窗口必須依據(jù)已經(jīng)聲明并且已經(jīng)注冊的窗口類型來創(chuàng)建。
HWND CreateWindow(
LPCTSTR lpClassName,//定義的窗口類名
LPCTSTR lpWindowName,//窗口的名字,將會在標(biāo)題欄上顯示出來的
DWORD dwStyle,//窗口的風(fēng)格(窗口的外觀模式和功能按鈕等等)
int x,//窗口初始位置ws_usedefault
int y,//同上
int nWidth,//窗口的寬度,可以用ws_usedefault
int nHeight,//窗口高度,可以用ws_usedefault
HWND hWndParent,//父窗口的句柄,單一窗口則設(shè)置為空
HMENU hMenu,//菜單的句柄,如果沒有菜單則將這個句柄設(shè)置為空
HINSTANCE hInstance,//由系統(tǒng)進行分配標(biāo)識
LPVOID lpParam//一般設(shè)置為空
);
第四步:顯示窗口
調(diào)用ShowWindow()函數(shù)來顯示窗口。
ShowWindow(
HWND hWnd,//要顯示的窗口的句柄
int nCmdShow//顯示窗口的模式,如:最大化最小花顯示
)
第五步:更新窗口
在顯示窗口的函數(shù)調(diào)用完畢以后調(diào)用UpdateWindow()來對窗體進行更新
UpdateWindow(hwnd);//這個函數(shù)沒有并不影響消息產(chǎn)生。
//消息循環(huán)
MSG msg;//定義了一個消息結(jié)構(gòu)體變量
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/*
GetMessage(
LPMSG lpMsg,
//消息結(jié)構(gòu)提的指針,無需對這個消息結(jié)構(gòu)提的內(nèi)部成員初始化,
//這個只需將定義的結(jié)構(gòu)體的地址傳到這里
HWND hWnd,
//窗口句柄,指明要獲得的是那個窗口的消息,如果要獲取所有窗口的消息則
//定義為NULL
UINT wMsgFilterMin,
//用來指定要從消息隊列里邊取得的最小值,
UINT wMsgFilterMax
//用來指定要從消息隊列里邊取得的最大值,
///////////////////////////////////////////////////////////////////////
//這兩個參數(shù)用來限制GETMESSAGE 在消息隊列里邊的取值范圍,//
//以去處調(diào)一些確定不感興趣的消息 //
//if要從消息隊列中所有的消息中提取的話則兩個參數(shù)均設(shè)定為 //
//零 //
///////////////////////////////////////////////////////////////////////
);//從調(diào)用程序線程消息隊列中取消息
*/
有了創(chuàng)建窗口的整個流程以后,現(xiàn)在就開始定義窗口過程,用WindowProc()
LRESULT CALLBACK WindowProc(/*函數(shù)名字可以更改,但是參數(shù)不允許改變*/
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);//參數(shù)和消息結(jié)構(gòu)提的前四個參數(shù)相同,事實上系統(tǒng)在調(diào)用窗口過程函數(shù)
//的時候自動將消息結(jié)構(gòu)體的前四個參數(shù)傳遞到窗口過程
例: