日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows消息循环理解及窗体创建步骤

發布時間:2023/12/18 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows消息循环理解及窗体创建步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先理解一句話:“Windows”向應用程序發送了一條消息。這里是指Windows調用了該程序內部的一個函數。

當UpdateWindow被調用后,新建的窗口在屏幕便完全可見了。此時,Windows會為其維護一個消息隊列。當事件發生時,Windows會自動將這些事件轉化為消息,并將其放置在應用程序的消息隊列中。

應用程序通過消息循環來獲取消息:

while (GetMessage(&msg, NULL, 0, 0)) //從消息隊列中獲取消息并放在msg結構中 {TranslateMessage(&msg); //將虛擬鍵消息轉換為字符消息 DispatchMessage(&msg); //調度一個消息給窗口程序 }

在消息循環中,應用程序將獲取到的消息返還給Windows,接下來,Windows會將這條消息發送給合適的窗口過程即WndProc來處理:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_CREATE:...return 0;... ...case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd, message, wParam, lParam);//不進行處理的消息傳給此函數 }

綜上,窗口過程是由Windows來調用的,即當從消息隊列中取出消息并遞交給Windows后,Windows把消息內容作為參數,回調給其發送消息的窗口的窗口過程。

注:應用程序如果希望調用自身的窗口過程,則可通過函數SendMessage來實現。

/************窗體創建步驟****************/
實現窗口創建的六步驟:
第一步:創建入口函數WinMain
第二步:注冊窗口類
第三部:實現回調函數的功能
第四步:顯示窗口
第五步:更新窗口
第六步:消息循環

#include?"stdafx.h"
//回調函數(消息響應過程)
LRESULT?CALLBACK?WinProc(HWND?hWnd,UINT?uMsg,WPARAM?wParam,LPARAM?lParam?)
{
switch(uMsg)
{
case?WM_CREATE:
{
MessageBox(NULL,"即將創建一個窗口!","Infor",MB_OK);
}
break;
case?WM_DESTROY:
{
PostQuitMessage(0);
}
break;
}
return?DefWindowProc(hWnd,uMsg,wParam,lParam);
}
//創建入口函數
int?APIENTRY?WinMain(
?HINSTANCE?hInstance,??
?HINSTANCE?hPrevInstance,
?LPSTR?lpCmdLine,
?int?ShowCmd
?)
{
HWND?hWnd=0;
MSG?nMsg={0};
//注冊窗口類
WNDCLASS?cs={0};
cs.cbClsExtra=0;
cs.cbWndExtra=0;
cs.hbrBackground=(HBRUSH)(COLOR_WINDOW+2);
cs.hCursor=NULL;
cs.hIcon=NULL;
cs.hInstance=hInstance;
cs.lpfnWndProc=(WNDPROC)WinProc;
cs.lpszClassName="Main";
cs.lpszMenuName=NULL;
cs.style=CS_VREDRAW|CS_HREDRAW;
RegisterClass(&cs);//實現注冊窗口
//創建窗口
hWnd=CreateWindow("Main","Windows",WS_OVERLAPPEDWINDOW,200,200,500,500,NULL,NULL,hInstance,NULL);
//顯示窗口
ShowWindow(hWnd,SW_SHOW);
//更新窗口
UpdateWindow(hWnd);
//消息循環
while(GetMessage(&nMsg,0,NULL,NULL))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
return?0;
}
?

總結

以上是生活随笔為你收集整理的Windows消息循环理解及窗体创建步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。