硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6109|回复: 10
收起左侧

[emWin] 调用WM_SendMessageNoPara()之前须调用WM_SetCallback()---鄙人发现的一点小细节

[复制链接]

7

主题

4

回帖

25

积分

新手上路

积分
25
发表于 2016-2-6 12:20:00 | 显示全部楼层 |阅读模式
说一点STemWim里的WM_SendMessageNoPara()函数,当我们要向回调函数发消息时可以使用该函数。在如下这个用GUIBuilder创建的回调函数里,第6行的aMsg就是可以用户自定义的一个消息( #define aMsg (GUI_ID_USER + 79) ),具体使用方法就是:1、#define   <你的消息,名字任意>   (GUI_ID_USER + <任意值,不要跟别的重复就行>)   2、在回调里添加它的处理部分,就像下面这个回调一样   3、最后必须注意的,在调用WM_SendMessageNoPara()之前必须先调用WM_SetCallback()重新绑定一下回调函数,否则不起作用,例如:WM_SetCallback( WM_HBKWIN, _cbDialog );  WM_SendMessageNoPara( WM_HBKWIN, aMsg );。
  1. static void _cbDialog(WM_MESSAGE * pMsg) {
  2.   int NCode;
  3.   int Id;
  4.   switch (pMsg->MsgId) {
  5.         case aMsg:
  6.             LED0=0;
  7.         break;
  8.         
  9.   case WM_NOTIFY_PARENT:
  10.     Id    = WM_GetId(pMsg->hWinSrc);
  11.     NCode = pMsg->Data.v;
  12.     switch(Id) {
  13.     case ID_BUTTON_0: // Notifications sent by 'Button'
  14.       switch(NCode) {
  15.       case WM_NOTIFICATION_CLICKED:
  16.         // USER START (Optionally insert code for reacting on notification message)
  17.         // USER END
  18.         break;
  19.       case WM_NOTIFICATION_RELEASED:
  20.         // USER START (Optionally insert code for reacting on notification message)
  21.         // USER END
  22.         break;
  23.       // USER START (Optionally insert additional code for further notification handling)
  24.       // USER END
  25.       }
  26.       break;
  27.     // USER START (Optionally insert additional code for further Ids)
  28.     // USER END
  29.     }
  30.     break;
  31.   // USER START (Optionally insert additional message handling)
  32.   // USER END
  33.   default:
  34.     WM_DefaultProc(pMsg);
  35.     break;
  36.   }
  37. }
复制代码

评分

参与人数 1 +5 收起 理由
eric2013 + 5

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2016-2-6 12:23:03 | 显示全部楼层
给桌面窗口发消息需要设置下回调函数,非常感谢楼主分享[s:151]
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-2-22 15:56:25 | 显示全部楼层
为什么这些小细节官方手册上都没有呢。这个地方研究了两天了,还是楼主给力阿!!!
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-2-22 17:35:05 | 显示全部楼层
eric2013 发表于 2016-2-6 12:23
给桌面窗口发消息需要设置下回调函数,非常感谢楼主分享[s:151]

老师,你好。我有个问题想要请教您:
首先在GUIBuilder中添加一个window控件和button控件;
然后将生成的DLG.c文件加入到工程中。
DLG.c中使用hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0) 创建了一个对话框。
那么是不是说:hWin 的父窗口是WM_HBKWIN,window控件和button控件的父窗口是hWin?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2019-2-22 17:38:55 | 显示全部楼层
Tobe 发表于 2019-2-22 17:35
老师,你好。我有个问题想要请教您:
首先在GUIBuilder中添加一个window控件和button控件;
然后将生成 ...

对话框的主体窗口是window的话,这个返回的句柄实际就是window的句柄。

而按钮之类的控件是建立在这个window上的。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-2-22 18:38:05 | 显示全部楼层
eric2013 发表于 2019-2-22 17:38
对话框的主体窗口是window的话,这个返回的句柄实际就是window的句柄。

而按钮之类的控件是建立在这个 ...

老师,您说的主体窗口是父窗口的意思吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2019-2-22 18:41:33 | 显示全部楼层
Tobe 发表于 2019-2-22 18:38
老师,您说的主体窗口是父窗口的意思吗?

QQ截图20190222184004.jpg
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-2-23 17:40:41 | 显示全部楼层

谢谢老师,明白了~
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2019-7-11 15:53:32 | 显示全部楼层
对啊,我也发现是这样,坑爹
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2019-7-19 21:02:25 | 显示全部楼层
但是重新设置回调函数之后,回调函数中的WM_PAINT和WM_INIT_DIALOG都没有运行
回复

使用道具 举报

0

主题

22

回帖

22

积分

新手上路

积分
22
发表于 2020-11-10 13:58:49 | 显示全部楼层
大神,请问这两个函数的区别是什么,  void _cbDialog(WM_MESSAGE * pMsg)   与   _cbCallback(WM_MESSAGE * pMsg)的区别?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-10 08:22 , Processed in 0.188352 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表