duilib进阶教程 -- 响应windows原生消息和自定义消息(13)
来源:互联网 发布:暗物质 暗能量知乎 编辑:程序博客网 时间:2024/06/07 02:26
一、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 <windowsx.h>
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~
0 0
- duilib进阶教程 -- 响应windows原生消息和自定义消息(13)
- duilib 响应windows原生消息和自定义消息
- duilib---响应windows原生消息和自定义消息
- 响应windows原生消息和自定义消息
- duilib 捕捉Windos原生消息和自定义消息
- duilib进阶教程 -- 扩展duilib的消息 (11)
- duilib创建自定义消息
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
- DuiLib(4)——消息响应
- 【duilib进阶】自定义控件响应指定命令
- QT 自定义消息响应
- duilib消息
- vlc响应windows消息
- Windows消息响应机制
- Windows消息响应机制
- 为duilib的MenuDemo增加消息响应,优化代码和显示效果
- SendMessage发送自定义消息及消息响应
- windows消息响应机制之一:消息分析器
- gson使用在android使用例子
- duilib进阶教程 -- 改进List控件 (16)
- 网友汇总的IT笔试面试题
- duilib进阶教程 -- 设置资源路径 (15)
- duilib进阶教程 -- Container控件的bug (14)
- duilib进阶教程 -- 响应windows原生消息和自定义消息(13)
- duilib进阶教程 -- 改进窗口拖动 (12)
- duilib进阶教程 -- 扩展duilib的消息 (11)
- duilib进阶教程 -- 各种控件的响应 (10)
- iOS国际化时遇到的错误:read failed: the data couldn't be read because it isn't in the correct format.
- html&JavaScript&ajax部分
- duilib进阶教程 -- TreeView控件的bug (9)
- PHP面向对象:PHP中的多态
- duilib进阶教程 -- Label控件的bug (8)