我對windows編程基礎的理解

來源:互聯網
上載者:User

 

 四月份和五月份就要學習MFC,並要按照孫鑫的視頻來學習,但是在學習過程中總是對於windows編程基礎不能理解。終於在7月15號重新看了遍C++基礎,又在今天重新看windows編程基礎,終於在下午看明白了。原來如此簡單,讓人情何以堪啊。

我的總結:

在建立windows應用程式時,有幾個步驟

(1)視窗類別的定義(對於WNDCLASS的定義通過對此結構進行賦值來實現)

相當於定義了一個視窗的模板。

(2)註冊視窗類別(通過RegisterClass來實現,要進行檢測)

使用視窗類別之前必須先註冊。

(3)建立視窗(通過CreateWindow來實現)

相當於以上面步驟1定義的視窗模板來建立一個視窗

(4)顯示視窗(通過ShowWindow來實現)

  (5) 更新視窗(通過UpdateWindow來實現)

(6)訊息迴圈(通過GetMessage及DispatchMessage來實現)

這兒牽涉到windows的訊息機制,我們來簡單描述一下:

windows系統首先將訊息放入訊息佇列中,應用程式的訊息迴圈就是從應用程式的訊息佇列中檢取訊息,並將訊息發送相應的視窗過程函數中進一步處理。

在下面程式中的視窗過程函數時WndProc。

#include "windows.h"LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//視窗過程int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){HWND hwnd;//視窗控制代碼MSG msg;//訊息WNDCLASS wndclass;//視窗類別/*視窗類別的定義是通過給視窗類別資料結構wndclass賦值完成*/wndclass.style = CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc = WndProc;//定義視窗處理函數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;wndclass.lpszClassName = "HELLO win";/*視窗類別的註冊,windows系統本身提供部分預定義的視窗類別。視窗類別必須先註冊再使用*/if (!RegisterClass(&wndclass)){MessageBox(NULL,"視窗註冊失敗!","HELLO win",0);return 0;}/*建立一個視窗,通過CreateWindow()實現*/hwnd = CreateWindow("HELLO win","我的視窗", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);/*顯示一個視窗,通過ShowWindow()實現*/ShowWindow(hwnd,SW_SHOWMAXIMIZED);UpdateWindow(hwnd); //更新視窗,包括視窗的客戶區//進入訊息迴圈:當從應用程式訊息佇列中檢取的訊息是WM_QUIT時,則退出迴圈while (GetMessage(&msg,NULL,0,0)){//TranslateMessage(&msg);//轉換某些鍵盤訊息DispatchMessage(&msg);//將訊息發送給視窗過程,這裡是wndProc}return msg.wParam;}// 視窗過程函數的定義LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){switch(message){case  WM_CREATE ://視窗建立產生的訊息return 0; break;case WM_LBUTTONDOWN: MessageBox(NULL,"你好,我的visual C++世界","問候",0);return 0;break;case WM_RBUTTONDOWN: MessageBox(NULL,"fuck","問候",0);return 0;break;case WM_DESTROY: PostQuitMessage(0);return 0;    break;}return DefWindowProc(hwnd,message,wParam,lParam);//執行預設的訊息處理}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.