码迷,mamicode.com
首页 > Windows程序 > 详细

duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

时间:2016-04-23 01:36:10      阅读:902      评论:0      收藏:0      [点我收藏+]

标签:

duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

  一、windows原生消息

  同样,入门教程只是给出了响应windows原生消息的方法,并没给出例子,这里以自适应屏幕分辨率为例。迅雷播放器虽然可以在启动的时候自动调整窗口大小,但是当屏幕分辨率实时改变时并没有调整窗口,所以我们给播放器加上实时调整大小的功能,很明显,应该响应WM_DISPLAYCHANGE消息,而duilib自己处理windows消息的函数是在HandleMessage里,因此我们重载HandleMessage函数,加入如下代码:

  LRESULT CDuiFrameWnd::HandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam )

  {

  LRESULT lRes = __super::HandleMessage(uMsg, wParam, lParam);

  switch (uMsg)

  {

  HANDLE_MSG (*this, WM_DISPLAYCHANGE, OnDisplayChange);

  }

  return lRes;

  }

  这样我们就可以在OnDisplayChange函数里响应分辨率改变的消息了,记得包含头文件#include

  void CDuiFrameWnd::OnDisplayChange( HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen )

  {

  ::SetWindowPos(m_PaintManager.GetPaintWindow(), NULL, 0, 0, cxScreen, cyScreen, SWP_FRAMECHANGED|SWP_NOZORDER|SWP_NOACTIVATE);

  }

  二、自定义消息

  自定义消息也是经常用到的,所以这里也介绍一下,和windows编程一样,自己定义消息ID和函数,只不过将消息处理搬到了HandleMessage函数而已。

  播放器的时间和文件进度时刻都在更新,所以这里介绍一下自定义一个消息,用于处理播放器的通知。

  1、定义消息ID

  #define WM_USER_POS_CHANGED     WM_USER + 2     // 文件播放位置改变

  2、响应自定义消息:

  在HandleMessage函数的switch分支里加上如下代码即可:

  case WM_USER_POS_CHANGED:

  return OnPosChanged(*this, wParam, lParam);

  这样我们就可以在OnPosChanged函数里处理WM_USER_POS_CHANGED消息了。

  3、发送自定义消息:

  在需要发送消息的地方调用        ::PostMessage(*this, WM_USER_POS_CHANGED, wParam, lParam);

  即可,和windows一样(当然,SendMessage也OK,看情况使用)

  在入门教程里就多次强调,duilib只是一个UI库,其他地方依然是windows编程,经过这么多例子的讲解,现在应该了解得差不多了吧~O(∩_∩)O~

duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

标签:

原文地址:http://www.cnblogs.com/h2052519/p/5423366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!