向窗口发送消息

 

 在VC中,窗口的主要通信方式就是通过消息了,是MFC中很重要的一部分,花了一段时间终于把这个搞懂了,下面就说说想窗口发送消息的方法:

       1.首先需要确定和定义消息类型,如系统消息、用户自定义消息等。如果是自定义消息就得自己定义消息ID了,其实就是一个的用       来唯一标示Msg的整型数,在头文件中加入,如下:

               #define WM_MYMSG WM_USER+1;

          当然这个ID是不能随便定义的,需要在一定的范围,具体的说明如下:

           0 through WM_USER–1 Messages reserved for use by the system.
             WM_USER through 0x7FFF Integer messages for use by private window classes.
             WM_APP through 0xBFFF Messages available for use by applications.
             0xC000 through 0xFFFF String messages for use by applications.

             Greater than 0xFFFF Reserved by the system.

 

           如上所述,其实范围就是0x0400~0x7FFF这段了,呵呵。

      2. 消息ID确定了,就需要确认消息的响应函数,格式如下:

          afx_msg LRESULT OnMsgFunc(WPARAM iParam1,LPARAM iParam2) ;

          在头文件中定义,并在cpp中实现之。 

      3.添加消息映射

            在cpp中找到消息映射代码段,出入消息映射ON_MESSAGE

 

              BEGIN_MESSAGE_MAP(CTRAirPortProjDlg, CDialog)
                    ON_WM_SYSCOMMAND()
                    ON_WM_PAINT()
                     ON_WM_QUERYDRAGICON()
                     //}}AFX_MSG_MAP
                    ON_WM_LBUTTONDOWN()
                     ON_WM_ERASEBKGND()
                     ON_MESSAGE(WM_MYMSG,&CTRAirPortProjDlg::OnMyMsg)
               END_MESSAGE_MAP()

 

 

     到处为止,我们已经为一个窗口添加了消息ID和处理函数了,那么怎么想窗口发送消息呢?有2个函数可以:

            1.SendMessage

                 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

                

                参数:

              hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶

                               层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。


              Msg:指定被发送的消息ID。

              wParam:指定附加的消息指定信息。

              IParam:指定附加的消息指定信息。
                  返回值:返回值指定消息处理的结果,依赖于所发送的消息。

 

                例如:SendMessage(this->m_hWnd,WM_MYMSG,0,0);

            2.PostMessage

                函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

                与SendMessage是类似的,主要区别是:

              PostMessage消息发出后不等消息函数处理完就执行它的下一语句      (异步)
               SendMessage消息发出后阻塞等消息函数处理完执行它的下一语句    (同步)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值