零基础逆向工程28_Win32_02_事件_消息_消息处理函数
生活随笔
收集整理的這篇文章主要介紹了
零基础逆向工程28_Win32_02_事件_消息_消息处理函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 第一個圖形界面程序
步驟1:創建Windows應用程序 選擇空項目步驟2:在新建項窗口中選C++代碼文件 創建一個新的cpp文件步驟3:在新的cpp文件中添加:#include <Windows.h>并添加入口函數:int CALLBACK WinMain( CALLBACK 是一個宏_In_ HINSTANCE hInstance, #define CALLBACK __stdcall_In_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nCmdShow) 所有的Win32 ? ? API函數都遵循該約定 {return 0; }步驟4:設計窗口類代碼://窗口的類名 TCHAR className[] = "My First Window";// 創建窗口類的對象 WNDCLASS wndclass = {0}; //一定要先將所有值賦值 wndclass.hbrBackground = (HBRUSH)COLOR_MENU; //窗口的背景色 wndclass.lpfnWndProc = WindowProc; //窗口過程函數 wndclass.lpszClassName = className; //窗口類的名字 wndclass.hInstance = hInstance; //定義窗口類的應用程序的實例句柄步驟5:注冊窗口類RegisterClass(&wndclass);步驟6:創建窗口// 創建窗口 HWND hwnd = CreateWindow(className, //類名TEXT("我的第一個窗口"), //窗口標題WS_OVERLAPPEDWINDOW, //窗口外觀樣式10, //相對于父窗口的X坐標10, //相對于父窗口的Y坐標600, //窗口的寬度300, //窗口的高度NULL, //父窗口句柄,為NULLNULL, //菜單句柄,為NULLhInstance, //當前應用程序的句柄NULL); //附加數據一般為NULLif(hwnd == NULL) //是否創建成功return 0;步驟7:顯示窗口// 顯示窗口 ShowWindow(hwnd, SW_SHOW);步驟8:消息循環MSG msg; while(GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg); }步驟9:回調函數/* 窗口消息處理程序 窗口回調函數:1、窗口回調函數處理過的消息,必須傳回0.2、窗口回調不處理的消息,由DefWindowProc來處理. */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;}//鼠標消息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 什么是事件?什么是消息?
"動作"即是事件,消息是對事件的具體描述。
Windows為了能夠準確的描述這些信息,提供了一個結構體:MSG,該結構體里面記錄的事件的詳細信息.
typedef struct tagMSG {HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt; } MSG, *PMSG;說明:
1、hwnd:窗口句柄
表示消息所屬的窗口
一個消息一般都是與某個窗口相關聯的
在Windows中 HWND類型的變量通常用來標識窗口。
2、message:消息類型
在Windows中,消息是由一個數值來表示的
但是由于數值不便于記憶,所以Windows將消息對應的數值定義為WM_XXX宏(WM == Window Message)
鼠標左鍵按下 WM_LBUTTONDOWN 鍵盤按下 WM_KEYDOWN
3、wParam 和 lParam
32位消息的特定附加信息,具體表示什么處決于message
4、time
消息創建時的時間
5、消息創建時的鼠標位置
3 什么是窗口進程
LRESULT CALLBACK WindowProc(IN HWND hwnd,IN UINT uMsg,IN WPARAM wParam,IN LPARAM lParam);4 一個完整的消息流程
轉載于:https://www.cnblogs.com/flatcc/p/7683979.html
總結
以上是生活随笔為你收集整理的零基础逆向工程28_Win32_02_事件_消息_消息处理函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj1055 [HAOI2008]玩
- 下一篇: vue生成包报错error from U