纯C++创建Windows窗体(理解WinMain()与WndProc())
生活随笔
收集整理的這篇文章主要介紹了
纯C++创建Windows窗体(理解WinMain()与WndProc())
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一直比較關注本質的東西。VC封裝了很多,想了解一下比較麻煩。
先從了解WinMain()入口函數與WndProc()消息處理函數開始吧。
大氣象 #include?<windows.h>#include?<mmsystem.h>
LRESULT?CALLBACK?WndProc?(HWND,?UINT,?WPARAM,?LPARAM);?//聲名消息處理函數(處理windows和接收windows消息)
//hInstance:系統為窗口分配的實例號,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;//這義一個窗體類實例
????//設置窗體參數
????wndclass.style?=?CS_HREDRAW?|?CS_VREDRAW?;?//樣式
????wndclass.cbClsExtra???=?0?;
????wndclass.cbWndExtra???=?0?;
????wndclass.hInstance?=?hInstance?;//窗體實例名,由windows自動分發
????wndclass.hIcon?=?LoadIcon?(NULL,?IDI_APPLICATION)?;//顯示上面的圖標titlte
????wndclass.hCursor?=?LoadCursor?(NULL,?IDC_ARROW)?;//窗口光標
????wndclass.hbrBackground=?(HBRUSH)?GetStockObject?(WHITE_BRUSH)?;//背景刷
????wndclass.lpszMenuName=NULL;
????wndclass.lpfnWndProc=WndProc;//設置窗體接收windws消息函數
????wndclass.lpszClassName=?szAppName;//窗體類名
????if?(!RegisterClass?(&wndclass))//注冊窗體類
????{
????????MessageBox?(?NULL,?TEXT?("This?program?requires?Windows?NT!"),?szAppName,?MB_ICONERROR)?;
????????return?0?;
????};
????//創建一個窗體。已分配內存。返回一個窗體句柄
????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);//翻譯消息并發送到windows消息隊列
????????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++空項目。在源文件目錄里新建一個cpp文件。
輸入以上代碼,直接運行。如圖:
總結
以上是生活随笔為你收集整理的纯C++创建Windows窗体(理解WinMain()与WndProc())的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发人员必学的5门课程
- 下一篇: FFPLAY的原理(一)