1. 程式人生 > 其它 >C windows.h 建立視窗

C windows.h 建立視窗

技術標籤:C++

#include<windows.h>
#pragma comment(lib, "winmm.lib")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, //hInstance是例項控制代碼,具體是一個數值
				HINSTANCE hPrevInstance, //此引數通常總是定義為NULL
				PSTR szCmdLine, //用來執行程式的命令列,有些Windows程式啟動時用它來把檔案裝入記憶體
int iCmdShow){//iCmdShow指明程式如何顯示(最大化?正常顯示?) static TCHAR szAppName[] = TEXT("HelloWindows"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; // 用於類結構和Windows內部維護的視窗結構中預留一些額外空間 wndclass.cbClsExtra = 0; wndclass.cbWndExtra =
0; wndclass.hInstance = hInstance; //例項控制代碼 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //載入圖示供程式使用 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //載入滑鼠游標 //獲得白色的滑鼠指標,同時視窗客戶區被填充為白色 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //獲取一個圖形物件,這裡是一個用來對視窗的背景進行重繪的畫刷 wndclass.lpszMenuName =
NULL; //指定視窗類的選單,NULL為不帶選單 wndclass.lpszClassName = szAppName; //視窗名 if(!RegisterClass(&wndclass)){//為應用程式註冊一個視窗類 // 註冊失敗 MessageBox(NULL, TEXT("本程式需要windows NT"), szAppName, MB_ICONERROR ); return 0; } // 函式原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam); hwnd = CreateWindow(szAppName, //視窗名 TEXT("Hello Programe"),//視窗內容 WS_OVERLAPPEDWINDOW, //視窗風格 CW_USEDEFAULT, //初始X座標 CW_USEDEFAULT, //初始Y座標 CW_USEDEFAULT, //初始X方向的尺寸 CW_USEDEFAULT, //初始Y方向的尺寸 NULL, //父視窗控制代碼 NULL, //菜 單控制代碼,或依據視窗風格指明一個子視窗標識 hInstance, //程式例項控制代碼 NULL //建立引數, 指向一個值的指標,該值傳遞給視窗 WM_CREATE訊息 ); /*函式功能:該函式設定指定視窗的顯示狀態。 函式原型:BOOL ShowWindow(HWND hWnd, int nCmdShow);*/ ShowWindow(hwnd, iCmdShow);//建立完之後,開始顯示 // 如果視窗更新的區域不為空,UpdateWindow函式就傳送一個WM_PAINT訊息來更新指定視窗的客戶區。 // 函式繞過應用程式的訊息佇列,直接傳送WM_PAINT訊息給指定視窗的視窗過程,如果更新區域為空,則不傳送訊息。 UpdateWindow(hwnd); /*GetMessage是從呼叫執行緒的訊息佇列裡取得一個訊息並將其放於指定的結構。 此函式可取得與指定視窗聯絡的訊息和由PostThreadMessage寄送的執行緒訊息。 此函式接收一定範圍的訊息值。GetMessage不接收屬於其他執行緒或應用程式的訊息。 獲取訊息成功後,執行緒將從訊息佇列中刪除該訊息。函式會一直等待直到有訊息到來才有返回值。*/ while(GetMessage(&msg, NULL, 0, 0)){ TranslateMessage(&msg); //翻譯一些鍵盤訊息 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); //標明視窗繪製開始 GetClientRect(hwnd, &rect); //獲取視窗客戶區的尺寸 // 顯示一個文字字元擦混 DrawText(hdc, TEXT("Hello, windows 10"), -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); //執行預設的訊息處理 }

在這裡插入圖片描述