當前位置:編程學習大全網 - 圖片素材 - 怎麽用C語言編寫壹個windows窗口?

怎麽用C語言編寫壹個windows窗口?

調用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);

}

  • 上一篇:網頁無法訪問
  • 下一篇:有時會感覺到莫名的難過是什麽歌
  • copyright 2024編程學習大全網