win32 app 消息流程记录

事件:用户或者windows所产生的每一个动作  

消息:用来详细描述每一个事件

 

 

typedef struct tagMSG {

  HWND   hwnd; //接受消息的句柄(那个窗口去响应这个消息)

  UINT   message; //消息的类型 应用程序使用低字,系统使用高字

  WPARAM wParam;   //关于消息具体信息,具体视消息类型而定

  LPARAM lParam;   //关于消息具体信息,具体视消息类型而定

  DWORD  time; //消息发布的事件

  POINT  pt; //消息发布时光标所在外置

} MSG, *PMSG, *LPMSG;

 

 

 

typedef struct tagPOINT {

  LONG x; //光标所处位置的坐标信息

  LONG y;

} POINT, *PPOINT;

 

 

过程解释:

1、系统或用户发出某个动作

 

2、系统将信息存储到MSG的结构体中

 

3、系统将该消息存储到相关应用程序的消息队列中

 

4While(GetMessage(&Msg.null,0,0)) //从队列中获取消息

{

TranslateMessage(&Msg); //翻译消息

DispatchMessage(&Msg); //将消息分派到不同的窗口

}

 

5DispatchMessage将加工的消息传递给操作系统

 

6、系统调用窗口过程函数

 

 

Win32应用项目创建过程:

1.添加窗口类名

 

typedef struct tagWNDCLASS {

  UINT      style;           //窗口风格

  WNDPROC   lpfnWndProc; //过程函数的指针

  int       cbClsExtra;

  int       cbWndExtra;

  HINSTANCE hInstance; //应用程序的句柄(imagebase)

  HICON     hIcon;

  HCURSOR   hCursor;

  HBRUSH    hbrBackground; //指定窗口的背景色

  LPCTSTR   lpszMenuName;

  LPCTSTR   lpszClassName; //给窗口起一个名字

} WNDCLASS, *PWNDCLASS;


 

2. 注册窗口类

ATOM WINAPI RegisterClass(

  _In_ const WNDCLASS *lpWndClass

);


 

RegisterClass(&wndclass);

 

 

3. 创建窗口

HWND WINAPI CreateWindow(

  _In_opt_ LPCTSTR   lpClassName, //创建窗口的类名

  _In_opt_ LPCTSTR   lpWindowName, //制定窗口名称

  _In_     DWORD     dwStyle, //窗口样式值的组合

  _In_     int       x, //

  _In_     int       y, //创建出窗口的位置

  _In_     int       nWidth, //

  _In_     int       nHeight, //创建窗口的宽高

  _In_opt_ HWND     hWndParent,   //窗口所在父窗口的句柄

  _In_opt_ HMENU     hMenu, //菜单的句柄

  _In_opt_ HINSTANCE hInstance, //所属应用程序的句柄

  _In_opt_ LPVOID    lpParam //附加数据一般为NULL

);


 

 

 

4、显示窗口

BOOL WINAPI ShowWindow(

  _In_ HWND hWnd, //窗口句柄

  _In_ int  nCmdShow //显示方式

);


 

ShowWindow(hwnd,SW_SHOW);

 

5、消息循环

BOOL WINAPI GetMessage(
  _Out_    LPMSG lpMsg, 	        //指向从线程队列接受消息MSG构
  _In_opt_ HWND  hWnd,		//要检索消息的窗口句柄
  _In_   UINT  wMsgFilterMin,     //
  _In_   UINT  wMsgFilterMax	//如果是0接受所有消息可能
);


MSG msg
While(GetMessage(&Msg.null,0,0))	//从队列中获取消息
{
TranslateMessage(&Msg);		//翻译消息
DispatchMessage(&Msg);		//将消息分派到不同的窗口
}

6、回调函数

每个消息必须返回处理结果return 0;

如果不是必要的(不是应用处理的)消息返回给windows处理

Return DefWindowProc(hwnd,UMasg,wPatm,lParam);

 WM_COMMAND消息类型是windows提供的窗口类传递的消息类型:例如按钮窗口它会调用系统提供的winpoc然后转换为WM_COMMAND在调用父窗口的windowproc

/*

*定义过程函数

*LRESULT CALLBACK WindowProc

*/

LRESULT CALLBACK WindowProc(

  _In_ HWND   hwnd, //窗口的句柄

  _In_ UINT   uMsg, //消息类型

  _In_ WPARAM wParam, //消息的具体说明

  _In_ LPARAM lParam

);

 

LRESULT CALLBACK WindowProc(

   _In_ HWND   hwnd,   

 _In_ UINT   uMsg,  

 _In_ WPARAM wParam,

   _In_ LPARAM lParam

)

{

Switch(uMsg)

{

  case WM_CREATE:

{

Return 0;

}

 Case WM_MOVE:

{

Return 0;

}

Case WM_COMMAND:

{

Switch(LOWORD(wParam))

{

Case 子窗口编号(窗口的菜单句柄定义)

}

}

 

}

Return DefWindowProc(hwnd,UMasg,wPatm,lParam);

}


 

LOWORD(wParam) 菜单表示符。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值