調用window庫窗口函數即可創建windows窗口。
必須使用windows的編譯器,如VC,MS等等。
RegisterClassEx函數:
該函數註冊在隨後調用CreateWindow函數和CreateWindowEx函數中使用的窗口類。 RegisterClass函數己經由函數RegisterClassEx函數來代替,但是,如果不需要設置類的小目標則仍然可以使用RegisterClass函數。
CreateWindowEx函數:
該函數創建壹個具有擴展風格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數相同。關於創建窗口和其他參數的內容,請參看CreateWindow。具體仍可見微軟的msdn。
消息處理函數WindowProc:
該函數是壹個應用程序定義的函數。它處理發送給窗口的消息。WINDPROC類型定義了壹個指向該回調函數的指針。WindowProc是用於應用程序定義函數的占位符。
函數原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
參數:
hwnd:指向窗口的句柄。
uMsg:指定消息類型。
wParam:指定其余的、消息特定的信息。該參數的內容與UMsg參數值有關。
IParam:指定其余的、消息特定的信息。該參數的內容與uMsg參數值有關。
返回值:返回值就是消息處理結果,它與發送的消息有關。
壹個簡單的Window的代碼如下:
#include?<Windows.h>#include?<tchar.h>
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam);
int?WinMain(?
__in?HINSTANCE?hInstance,?
__in_opt?HINSTANCE?hPrevInstance,?
__in?LPSTR?lpCmdLine,?
__in?int?nShowCmd?
)
{
TCHAR?*szName?=?_T("myWindow");
WNDCLASSEX?wc?=?{0};
HWND?hWnd?=?NULL;
MSG?Msg?=?{0};
wc.cbClsExtra=?0;
wc.cbWndExtra=?0;
wc.cbSize=?sizeof(WNDCLASSEX);
wc.hbrBackground?=?(HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數來設置壹個白色的背景,這裏大家設置為NULL看看,會很有趣的
wc.hCursor?=?NULL;//不設置
wc.hIcon?=?NULL;//不設置
wc.hIconSm?=?NULL;//不設置
wc.hInstance?=?hInstance;//當前程序的句柄,hInstance是有系統給傳遞的
wc.lpfnWndProc?=?WinProc;//窗口處理過程的回調函數。
wc.lpszClassName?=?szName;//窗口類的名字。
wc.lpszMenuName=?NULL;?
wc.style?=?CS_HREDRAW?|?CS_VREDRAW;?
RegisterClassEx(&wc);//在系統中註冊
hWnd?=?CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//創建窗口,窗口標題為"我的窗口我喜歡"
if(hWnd?==?NULL)
{
MessageBox(NULL,_T("There's?an?Error"),_T("Error?Title"),MB_ICONEXCLAMATION|MB_OK);
return?0;
}
ShowWindow(hWnd,nShowCmd);//顯示窗口
UpdateWindow(hWnd);
//下面是對消息的循環處理,大家先不必管這些,下節課我會細說的
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻譯消息
DispatchMessage(&Msg);//分派消息
}
return?Msg.message;
}
//消息處理函數
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam)
{
switch(Msg)//處理消息過程
{
case?WM_DESTROY://響應鼠標單擊關閉按鈕事件
PostQuitMessage(0);//退出消息隊列
return?0;//退出函數
}
return?DefWindowProc(hWnd,Msg,wParam,lParam);
}