经典的 windowproc消息处理函数中,使用的switch结束,进行消息转发。
例如:
//窗口消息函数一
LRESULT WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (message )
{
case WM_CLOSE:
case WM_COMMAND:
case WM_INITDIALOG:
onMessage(hWnd,wParam,lParam);
break;
}
}
看了一下深入浅出MFC,自己也来写一个消息处理函数,方便自己测试,参照P owerbuilder中的消息封装,把消息和处理函数放到一个数组中。
struct Event
{
UINT msg; //消息
function fun;//函数指针
};
//窗口消息函数一
LRESULT WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
Event eMap[] ={{WM_COMMAND,onMessage},{WM_CREATE,onMessage},{WM_CLOSE,onMessage}};
int iSize = SIZEOF_ARRAY(eMap);
for(int i =0;i<iSize;i++)
{
if(uMsg == eMap[i].msg)
{
(*eMap[i].fun)(hWnd,wParam,lParam);
return 1 ; //有消息
}
}
return 0 ;
}
LRESULT onMessage(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
printf("handed Message\n");
return 0 ;
}
function 是一个函数指针,定义 :typedef LRESULT (*Function)(HWND,WPARAM,LPARAM);
窗口要用到哪些消息,就定义在消息数组中,简单好用,在这里写个备忘录。
这篇博客介绍了如何使用C++创建一个自定义的消息处理函数,通过映射消息到对应的处理函数,简化了窗口消息的处理。作者参考了MFC和PowerBuilder的做法,将消息和处理函数存储在一个结构体数组中,并在`WindowProc`中遍历执行。示例代码展示了如何定义结构体,创建消息映射数组,以及如何调用处理函数。
3525

被折叠的 条评论
为什么被折叠?



