WindowProc中的消息处理,快速转发到实现函数

这篇博客介绍了如何使用C++创建一个自定义的消息处理函数,通过映射消息到对应的处理函数,简化了窗口消息的处理。作者参考了MFC和PowerBuilder的做法,将消息和处理函数存储在一个结构体数组中,并在`WindowProc`中遍历执行。示例代码展示了如何定义结构体,创建消息映射数组,以及如何调用处理函数。

经典的 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);

窗口要用到哪些消息,就定义在消息数组中,简单好用,在这里写个备忘录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿峰的编程博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值