纯C++创建Windows窗体(理解WinMain()与WndProc())
生活随笔
收集整理的這篇文章主要介紹了
纯C++创建Windows窗体(理解WinMain()与WndProc())
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一直比較關(guān)注本質(zhì)的東西。VC封裝了很多,想了解一下比較麻煩。
先從了解WinMain()入口函數(shù)與WndProc()消息處理函數(shù)開(kāi)始吧。
大氣象 #include?<windows.h>#include?<mmsystem.h>
LRESULT?CALLBACK?WndProc?(HWND,?UINT,?WPARAM,?LPARAM);?//聲名消息處理函數(shù)(處理windows和接收windows消息)
//hInstance:系統(tǒng)為窗口分配的實(shí)例號(hào),2和3忘了.4是顯示方式
int?WINAPI?WinMain?(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,PSTR?szCmdLine,?int?iCmdShow)
{
????static?TCHAR?szAppName[]?=?TEXT?("HelloWin")?;?//窗體名
????HWND?hwnd;//句柄
????MSG?msg;//消息體
????WNDCLASS?wndclass;//這義一個(gè)窗體類實(shí)例
????//設(shè)置窗體參數(shù)
????wndclass.style?=?CS_HREDRAW?|?CS_VREDRAW?;?//樣式
????wndclass.cbClsExtra???=?0?;
????wndclass.cbWndExtra???=?0?;
????wndclass.hInstance?=?hInstance?;//窗體實(shí)例名,由windows自動(dòng)分發(fā)
????wndclass.hIcon?=?LoadIcon?(NULL,?IDI_APPLICATION)?;//顯示上面的圖標(biāo)titlte
????wndclass.hCursor?=?LoadCursor?(NULL,?IDC_ARROW)?;//窗口光標(biāo)
????wndclass.hbrBackground=?(HBRUSH)?GetStockObject?(WHITE_BRUSH)?;//背景刷
????wndclass.lpszMenuName=NULL;
????wndclass.lpfnWndProc=WndProc;//設(shè)置窗體接收windws消息函數(shù)
????wndclass.lpszClassName=?szAppName;//窗體類名
????if?(!RegisterClass?(&wndclass))//注冊(cè)窗體類
????{
????????MessageBox?(?NULL,?TEXT?("This?program?requires?Windows?NT!"),?szAppName,?MB_ICONERROR)?;
????????return?0?;
????};
????//創(chuàng)建一個(gè)窗體。已分配內(nèi)存。返回一個(gè)窗體句柄
????hwnd?=?CreateWindow(?szAppName,??????//?window?class?name
????????TEXT?("The?Hello?Program"),???//?window?caption
????????WS_OVERLAPPEDWINDOW,?//?window?style
????????CW_USEDEFAULT,//?initial?x?position
????????CW_USEDEFAULT,//?initial?y?position
????????CW_USEDEFAULT,//?initial?x?size
????????CW_USEDEFAULT,//?initial?y?size
????????NULL,?//?parent?window?handle
????????NULL,?//?window?menu?handle
????????hInstance,?//?program?instance?handle
????????NULL)?;
????ShowWindow?(hwnd,iCmdShow);//顯示窗口
????UpdateWindow?(hwnd)?;//更新窗體
????while(GetMessage(&msg,NULL,0,0))
????{
????????TranslateMessage?(&msg);//翻譯消息并發(fā)送到windows消息隊(duì)列
????????DispatchMessage?(&msg)?;//接收信息
????}
????return?msg.wParam?;
}
LRESULT?CALLBACK?WndProc?(HWND?hwnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)//消息的處理程序
{
????HDC???????????????????hdc?;
????PAINTSTRUCT?ps?;
????RECT??????????rect?;
????switch?(message)
????{
????case?WM_CREATE:
????????//PlaySound(TEXT("HelloWin.wav"),NULL,SND_FILENAME|SND_ASYNC);
????????return?0?;
????case???WM_PAINT:
????????hdc?=?BeginPaint?(hwnd,?&ps)?;
????????TextOut(hdc,0,0,"大氣象",strlen("大氣象"));
????????EndPaint?(hwnd,?&ps)?;
????????return?0?;
????case???WM_DESTROY:
????????PostQuitMessage?(0)?;
????????return?0?;
????}
????return?DefWindowProc?(hwnd,?message,?wParam,?lParam)?;
}
?新建Visual C++空項(xiàng)目。在源文件目錄里新建一個(gè)cpp文件。
輸入以上代碼,直接運(yùn)行。如圖:
總結(jié)
以上是生活随笔為你收集整理的纯C++创建Windows窗体(理解WinMain()与WndProc())的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开发人员必学的5门课程
- 下一篇: C++ 事件编程