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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

零基础逆向工程28_Win32_02_事件_消息_消息处理函数

發(fā)布時(shí)間:2024/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础逆向工程28_Win32_02_事件_消息_消息处理函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 第一個(gè)圖形界面程序

步驟1:創(chuàng)建Windows應(yīng)用程序 選擇空項(xiàng)目步驟2:在新建項(xiàng)窗口中選C++代碼文件 創(chuàng)建一個(gè)新的cpp文件步驟3:在新的cpp文件中添加:#include <Windows.h>并添加入口函數(shù):int CALLBACK WinMain( CALLBACK 是一個(gè)宏_In_ HINSTANCE hInstance, #define CALLBACK __stdcall_In_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nCmdShow) 所有的Win32 ? ? API函數(shù)都遵循該約定 {return 0; }步驟4:設(shè)計(jì)窗口類代碼://窗口的類名 TCHAR className[] = "My First Window";// 創(chuàng)建窗口類的對(duì)象 WNDCLASS wndclass = {0}; //一定要先將所有值賦值 wndclass.hbrBackground = (HBRUSH)COLOR_MENU; //窗口的背景色 wndclass.lpfnWndProc = WindowProc; //窗口過(guò)程函數(shù) wndclass.lpszClassName = className; //窗口類的名字 wndclass.hInstance = hInstance; //定義窗口類的應(yīng)用程序的實(shí)例句柄步驟5:注冊(cè)窗口類RegisterClass(&wndclass);步驟6:創(chuàng)建窗口// 創(chuàng)建窗口 HWND hwnd = CreateWindow(className, //類名TEXT("我的第一個(gè)窗口"), //窗口標(biāo)題WS_OVERLAPPEDWINDOW, //窗口外觀樣式10, //相對(duì)于父窗口的X坐標(biāo)10, //相對(duì)于父窗口的Y坐標(biāo)600, //窗口的寬度300, //窗口的高度NULL, //父窗口句柄,為NULLNULL, //菜單句柄,為NULLhInstance, //當(dāng)前應(yīng)用程序的句柄NULL); //附加數(shù)據(jù)一般為NULLif(hwnd == NULL) //是否創(chuàng)建成功return 0;步驟7:顯示窗口// 顯示窗口 ShowWindow(hwnd, SW_SHOW);步驟8:消息循環(huán)MSG msg; while(GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg); }步驟9:回調(diào)函數(shù)/* 窗口消息處理程序 窗口回調(diào)函數(shù):1、窗口回調(diào)函數(shù)處理過(guò)的消息,必須傳回0.2、窗口回調(diào)不處理的消息,由DefWindowProc來(lái)處理. */LRESULT CALLBACK WindowProc(IN HWND hwnd,IN UINT uMsg,IN WPARAM wParam,IN LPARAM lParam) {switch(uMsg){//窗口消息case WM_CREATE:{DbgPrintf("WM_CREATE %d %d\n",wParam,lParam);CREATESTRUCT* createst = (CREATESTRUCT*)lParam;DbgPrintf("CREATESTRUCT %s\n",createst->lpszClass);return 0;}case WM_MOVE:{DbgPrintf("WM_MOVE %d %d\n",wParam,lParam);POINTS points = MAKEPOINTS(lParam);DbgPrintf("X Y %d %d\n",points.x,points.y);return 0;}case WM_SIZE:{DbgPrintf("WM_SIZE %d %d\n",wParam,lParam);int newWidth = (int)(short) LOWORD(lParam);int newHeight = (int)(short) HIWORD(lParam);DbgPrintf("WM_SIZE %d %d\n",newWidth,newHeight);return 0;}case WM_DESTROY:{DbgPrintf("WM_DESTROY %d %d\n",wParam,lParam);PostQuitMessage(0);return 0;}//鍵盤消息case WM_KEYUP:{DbgPrintf("WM_KEYUP %d %d\n",wParam,lParam);return 0;}case WM_KEYDOWN:{DbgPrintf("WM_KEYDOWN %d %d\n",wParam,lParam);return 0;}//鼠標(biāo)消息case WM_LBUTTONDOWN:{DbgPrintf("WM_LBUTTONDOWN %d %d\n",wParam,lParam);POINTS points = MAKEPOINTS(lParam);DbgPrintf("WM_LBUTTONDOWN %d %d\n",points.x,points.y);return 0;}}return DefWindowProc(hwnd,uMsg,wParam,lParam); }

2 什么是事件?什么是消息?

"動(dòng)作"即是事件,消息是對(duì)事件的具體描述。

Windows為了能夠準(zhǔn)確的描述這些信息,提供了一個(gè)結(jié)構(gòu)體:MSG,該結(jié)構(gòu)體里面記錄的事件的詳細(xì)信息.

typedef struct tagMSG {HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt; } MSG, *PMSG;

說(shuō)明:

1、hwnd:窗口句柄
表示消息所屬的窗口
一個(gè)消息一般都是與某個(gè)窗口相關(guān)聯(lián)的
在Windows中 HWND類型的變量通常用來(lái)標(biāo)識(shí)窗口。

2、message:消息類型
在Windows中,消息是由一個(gè)數(shù)值來(lái)表示的
但是由于數(shù)值不便于記憶,所以Windows將消息對(duì)應(yīng)的數(shù)值定義為WM_XXX宏(WM == Window Message)
鼠標(biāo)左鍵按下 WM_LBUTTONDOWN 鍵盤按下 WM_KEYDOWN

3、wParam 和 lParam
32位消息的特定附加信息,具體表示什么處決于message

4、time
消息創(chuàng)建時(shí)的時(shí)間

5、消息創(chuàng)建時(shí)的鼠標(biāo)位置

3 什么是窗口進(jìn)程

LRESULT CALLBACK WindowProc(IN HWND hwnd,IN UINT uMsg,IN WPARAM wParam,IN LPARAM lParam);

4 一個(gè)完整的消息流程

轉(zhuǎn)載于:https://www.cnblogs.com/flatcc/p/7683979.html

總結(jié)

以上是生活随笔為你收集整理的零基础逆向工程28_Win32_02_事件_消息_消息处理函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。