標籤:
案例代碼
#include <Windows.h>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); GetClientRect(hwnd,&rect); DrawText(hdc,TEXT("Hello,windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam);}int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE preHinstance,PSTR cmdLine,int icmdShow){ static TCHAR szAppName[] = TEXT("helloWin"); HWND hwnd;//畫布 MSG msg;//資訊 WNDCLASS wndclass;//表單類別
//對wndclass進行初始化開始 //horizontal redraw //vertical redraw wndclass.style = CS_HREDRAW | CS_VREDRAW; //視窗類別確定了處理視窗訊息的視窗過程,實際是指向該函數的指標 wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; //當前應用程式執行個體控制代碼 wndclass.hInstance = hinstance; //載入表徵圖,獲得表徵圖控制代碼以供程式使用 //針對函數LoadIcon,如果要載入本程式內的表徵圖,需將NULL換位本程式執行個體的控制代碼 //第二個參數用於識別該表徵圖 //IDI ID for an icon wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //載入滑鼠游標,獲得滑鼠控制代碼以供程式使用 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //為該視窗的客戶區指定背景色 //handle to a brush //GetStockObject,Windows API函數。該函式檢索預定義的備用筆、刷子、字型或者調色盤的控制代碼。 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; //在建立應用程式視窗之前,必須調用函數RegisterClass來註冊視窗類別。 if(!RegisterClass(&wndclass))//為應用視窗註冊一個視窗類別 { MessageBox(NULL,TEXT("The program requires windows NT!"),szAppName,MB_ICONERROR); return 0; } //基於視窗類別建立一個視窗 //handle to the window hwnd = CreateWindow(szAppName,// 視窗類別名稱 TEXT("The Hello program"),// 視窗標題 WS_OVERLAPPEDWINDOW,// 視窗風格 CW_USEDEFAULT,// 初始x座標 CW_USEDEFAULT,// 初始y座標 CW_USEDEFAULT,// 初始x方向尺寸 CW_USEDEFAULT,// 初始y方向尺寸 NULL,// 父視窗控制代碼 NULL,// 視窗菜單控制代碼 hinstance, // 視窗執行個體控制代碼 NULL); // 建立參數 //在CreateWindow完成之後只是在記憶體中儲存了createWindow的一些資訊,如果要在螢幕中顯示視窗 ShowWindow(hwnd,SW_SHOWNORMAL); //指示視窗對自身進行重繪 UpdateWindow(hwnd); //從訊息佇列中擷取資訊,一直檢索 //第二個參數~第四個參數均製為NULL或0表明該程式希望擷取由該程式所建立的所有視窗訊息 while(GetMessage(&msg,NULL,0,0)) { //翻譯一些鍵盤訊息 //將msg結構返給windows以進行某些鍵盤訊息的轉換 TranslateMessage(&msg); //將訊息發送給視窗過程 DispatchMessage(&msg); } //return msg.wParam; return 0;}
提示
(一)如果想要調用PlaySound函數,需要為環境添加winmm.lib的引用,否則會出現如下錯誤:
無法解析的外部符號 [email protected],該符號在函數 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" ([email protected]@[email protected]@[email protected]) 中被引用。
具體配置步驟如下:
①:找到方案總管,對自己的項目點擊右鍵,選擇屬性
②:找到配置屬性下的連接器下的輸入
③:選擇附加依賴項後的小三角
④:添加winmm.lib,點擊確定,應用即可
⑤:點擊運行,即可得到想要的效果
(二)我用的是windows XP經典開機音樂代替hellowin.wav,好資源是需要分享滴,在此分享給大家:helloWin
2 視窗與訊息