1. 程式人生 > >Windows API 程式設計之建立一個windows視窗

Windows API 程式設計之建立一個windows視窗

直接上程式碼。

/**************************************************************************************
 *  問題:使用windows API函式建立一個windows視窗
 *  作者:李文順
 *  步驟:
 *      1、註冊視窗類 (RegisterClassEx)
 *      2、建立視窗      (CreateWindowsEx)
 *      3、在桌面顯示視窗   (ShowWindows)
 *      4、更新視窗客戶區   (UpdataWindows)
 *      5、進入無限迴圈的訊息獲取和處理的迴圈。
 *          GetMessage ,獲取訊息
 *          TranslateMessage ,轉換鍵盤訊息     
 *          DispatchMessage ,將訊息傳送到相應的視窗函式
 **************************************************************************************/
* 修改:修改一些註釋,更準確。 * 時間:20161229 **************************************************************************************/ #include <windows.h> //函式申明 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); //全域性變數 char titleName[]="你隨意"; //視窗標題 //圖形介面程式的入口 int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int
nCmdShow) { //定義視窗類(擴充套件) WNDCLASSEX wcex; //設定視窗的屬性 wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; //從這個視窗派生出的視窗具有的風格 wcex.lpfnWndProc = (WNDPROC)WndProc; //視窗訊息處理函式指標 wcex.cbClsExtra = 0; wcex.cbWndExtra = 0
; wcex.hInstance = hInstance; wcex.hIcon = NULL; //視窗最小化圖示 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = titleName; //該視窗類的名稱 wcex.hIconSm = NULL; //左上角圖示 //註冊視窗 ::RegisterClassEx(&wcex); HWND hWnd; //建立視窗 hWnd = ::CreateWindow(titleName, titleName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd)return FALSE; //建立視窗失敗,返回 //顯示視窗 ::ShowWindow(hWnd, nCmdShow); //重新整理視窗客戶區 ::UpdateWindow(hWnd); //迴圈獲取\處理訊息 MSG msg; while(::GetMessage(&msg,0,0,0)) { ::TranslateMessage(&msg); //轉換鍵盤訊息 ::DispatchMessage(&msg); //將訊息傳送到相應的視窗函式 } return (int)msg.wParam; } //視窗訊息處理函式 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; RECT rect; PAINTSTRUCT ps; switch(message) { case WM_PAINT: hDC = ::BeginPaint(hWnd,&ps); //使無效的客戶區變得有效,並取得環境裝置 //自定義 { ::GetClientRect(hWnd,&rect); //獲取視窗客戶區的大小 ::DrawText(hDC,TEXT("HELLO WORLD"),-1,&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); //在指定的矩形裡寫入格式化的正文 } ::EndPaint(hWnd,&ps); //釋放環境變數控制代碼,和::BeginPaint 配套使用 break; case WM_DESTROY: ::PostQuitMessage(0); //該函式向訊息佇列中插入一條 WM_QUIT 訊息,由 GetMessage 函式捕獲返回 0 而退出程式 break; } return ::DefWindowProc(hWnd,message,wParam,lParam); }