WinxGui Official Blog

用户自定义消息

winx中对用户自定义消息没有什么处理方案,下面是我的一个尝试

设计目标:

   在用户自定义的消息是常量情况下,用户只需要简单挂接一下,然后就可以随意编写对应的消息处理函数,特别地,具体哪条消息对应到哪个函数不需要用户在他的代码中加上一大堆宏来映射,就像 winx做到的那样

  用户自定义的消息可能是一个连续的区间,也可能是几个间隔的值,还能能是两种的混合,应该都支持 

用法:

 在用户的消息处理类中,编写winx支持的函数

 BOOL ProcessUserMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT& lResult)

{

winx::CUserMessageHelper<CTestwxDlg> Helper(this);

//假定用户自定义的消息 WM_START, WM_1, WM_2, WM_3, WM_END,他们的值是连续的

 typedef winx::ValueRange<WM_START, WM_END> MsgRange;

 BOOL r = 0;
  r = winx::callUserMessage<MsgRange>(&Helper, hWnd, message, wParam, lParam, lResult);

//假定用户自定义的消息 WM_7, WM_8, WM_9, WM_10 ,他们的值是间隔的

 typedef VALUELIST_4(WM_7, WM_8, WM_9, WM_10) MsgList;

r = winx::callUserMessage<MsgList>(&Helper, hWnd, message, wParam, lParam, lResult);

 //混合情况

typedef TYPELIST_2(MsgRange, MsgList) MsgList2;

r = winx::callUserMessageEx<MsgList2>(&Helper, hWnd, message, wParam, lParam, lResult);

return r;

}

然后在消息类中,可以定义处理函数为

 BOOL OnUserMsg(HWND h,  WPARAM w, LPARAM l, LRESULT& lr,  …)
 {
   return FALSE;
 }

  BOOL OnUserMsg(HWND h,  WPARAM w, LPARAM l, LRESULT& lr,  winx::Int2Value<WM_2>)
 {
  return TRUE;
 }

BOOL OnUserMsg(HWND h,  WPARAM w, LPARAM l, LRESULT& lr,  winx::Int2Value<WM_1>)
 {
  return TRUE;
 }

 其他函数 依次类推,也可以不定义,但那个参数为…的函数必须定义。

注意我们在挂接时只指定了范围,但消息处理调用到的哪个版本的OnUserMsg函数是完全自动的

 注:我不能上传文件,代码下次贴上

4 条评论 »

  1. 许式伟 于 2007-04-20 @ 12:53:13 留言

    留意下编辑页面,有上传文件的入口的。

  2. zhouzusheng 于 2007-04-20 @ 13:13:44 留言

    我知道,但是上传老是失败

  3. 许式伟 于 2007-04-20 @ 13:18:26 留言

    哦?很大吗?发到我的邮箱吧,我帮你上传看。:)

  4. zhouzusheng 于 2007-04-20 @ 13:25:58 留言

    小得很

有话想说

你必须登录以发表评论。