硬汉嵌入式论坛

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

[emWin] 子窗口中WM_INIT_DIALOG消息不响应

[复制链接]

15

主题

56

回帖

101

积分

初级会员

积分
101
发表于 2018-7-6 10:05:51 | 显示全部楼层 |阅读模式
我在对话框的WM_INIT_DIALOG中创建了一个子窗口Window,回调函数为_cbWindow,在回调中处理了两个消息类型:
1.WM_INIT_DIALOG
2.WM_PAINT
只有WM_PAINT消息会响应,在WM_INIT_DIALOG处设置断点,重启程序发现根本不会运行到这。
以下为代码:
  1. static void _cbDialog(WM_MESSAGE * pMsg) {
  2.         WM_HWIN hItem;
  3.         // USER START (Optionally insert additional variables)
  4.         int x, y;
  5.         // USER END

  6.         switch (pMsg->MsgId) {
  7.         case WM_INIT_DIALOG:
  8.                 //
  9.                 // Initialization of 'Window'
  10.                 //
  11.                 hItem = pMsg->hWin;
  12.                 WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(GUI_INVALID_COLOR));
  13.                 // USER START (Optionally insert additional code for further widget initialization)
  14.                 WM_EnableMemdev(pMsg->hWin);
  15.                 WIDGET_SetDefaultEffect(&WIDGET_Effect_3D);
  16.                 x = WM_GetWindowSizeX(hItem);
  17.                 y = WM_GetWindowSizeY(hItem);
  18.                 hWindow = WINDOW_CreateEx((x - x/2)/2, (y - y/2)/2, x/2, y/2, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS, 0, 0,  _cbWindow);
  19.                 //WM_SetHasTrans(hWindow);
  20.                 hTimer = GUI_TIMER_Create(_Timercb, GUI_GetTime() + 1000, 0, 0);
  21.                 // USER END
  22.                 break;
  23.                 // USER START (Optionally insert additional message handling)
  24.         case WM_PAINT:
  25.                 GUI_DrawBitmap(&bm_bg,0,0);
  26.                 break;
  27.                 // USER END
  28.         default:
  29.                 WM_DefaultProc(pMsg);
  30.                 break;
  31.         }
  32. }
复制代码
  1. static void _cbWindow(WM_MESSAGE * pMsg) {
  2.         WM_SCROLL_STATE ScrollState;
  3.         WM_HWIN         hDlg;
  4.         int             xPos;
  5.         int             yPos;
  6.         int                xSize;
  7.         int                ySize;

  8.         hDlg = pMsg->hWin;
  9.         switch (pMsg->MsgId) {
  10.         case WM_INIT_DIALOG:
  11.                 xPos = WM_GetWindowOrgX(pMsg->hWin);
  12.                 yPos = WM_GetWindowOrgY(pMsg->hWin);
  13.                 xSize = WM_GetWindowSizeX(pMsg->hWin);
  14.                 ySize = WM_GetWindowSizeY(pMsg->hWin);
  15.                 hDlg = BUTTON_CreateEx(0, yPos+ySize-40, xSize/2, 40, pMsg->hWin, WM_CF_SHOW, 0, 0);

  16.                 break;
  17.         case WM_PAINT:
  18.                 WM_EnableMemdev(pMsg->hWin);
  19.                 GUI_DrawBitmap(&bm_ADAS_sport, 0, 0);
  20.                 break;
  21.         default:
  22.                 WM_DefaultProc(pMsg);
  23.         }
  24. }
复制代码
不知道出了什么问题,WM_PAINT里面可以,但是INIT消息没有接收到
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-6 10:08:58 | 显示全部楼层
WINDOW_CreateEx回调没有消息WM_INIT_DIALOG,这个消息是对话框才有的。

你要使用WM_CREATE。
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-7-6 10:20:19 | 显示全部楼层
eric2013 发表于 2018-7-6 10:08
WINDOW_CreateEx回调没有消息WM_INIT_DIALOG,这个消息是对话框次才有的。

你要使用WM_CREATE。

这样啊,我试试,没注意过
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-7-6 10:26:04 | 显示全部楼层
drifting1024 发表于 2018-7-6 10:20
这样啊,我试试,没注意过

我改了一下,发现还是没有INIT这个消息处理
  1. static void _cbDialog(WM_MESSAGE * pMsg) {
  2.         WM_HWIN hItem;
  3.         // USER START (Optionally insert additional variables)
  4.         int x, y;
  5.         // USER END

  6.         switch (pMsg->MsgId) {
  7.         case WM_INIT_DIALOG:
  8.                 //
  9.                 // Initialization of 'Window'
  10.                 //
  11.                 hItem = pMsg->hWin;
  12.                 WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(GUI_INVALID_COLOR));
  13.                 // USER START (Optionally insert additional code for further widget initialization)
  14.                 WM_EnableMemdev(pMsg->hWin);
  15.                 WIDGET_SetDefaultEffect(&WIDGET_Effect_3D);
  16.                 x = WM_GetWindowSizeX(hItem);
  17.                 y = WM_GetWindowSizeY(hItem);
  18.                 hWindow = WM_CreateWindow((x - x/2)/2, (y - y/2)/2, x/2, y/2, WM_CF_SHOW | WM_CF_HASTRANS, _cbWindow, 0);
  19.                 //WM_SetHasTrans(hWindow);
  20.                 //hTimer = GUI_TIMER_Create(_Timercb, GUI_GetTime() + 1000, 0, 0);
  21.                 // USER END
  22.                 break;
  23.                 // USER START (Optionally insert additional message handling)
  24.         case WM_PAINT:
  25.                 GUI_DrawBitmap(&bm_bg,0,0);
  26.                 break;
  27.                 // USER END
  28.         default:
  29.                 WM_DefaultProc(pMsg);
  30.                 break;
  31.         }
  32. }
复制代码
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-7-6 10:27:11 | 显示全部楼层
drifting1024 发表于 2018-7-6 10:26
我改了一下,发现还是没有INIT这个消息处理

CreateWindow  和  CreateAsChildWindow  都试了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-6 10:35:00 | 显示全部楼层
drifting1024 发表于 2018-7-6 10:27
CreateWindow  和  CreateAsChildWindow  都试了

CreateWindow  和  CreateAsChildWindow 是窗口,不是对话框。

GUI_CreateDialogBox才是对话框的API
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-7-6 10:40:26 | 显示全部楼层
eric2013 发表于 2018-7-6 10:35
CreateWindow  和  CreateAsChildWindow 是窗口,不是对话框。

GUI_CreateDialogBox才是对话框的API

有几个问题想问下:
1.只有对话框才有INIT_DIALOG,Window没有对吗
2.想要在子窗口的基础上创建其他控件没有INIT_DIALOG怎么实现
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-6 10:42:16 | 显示全部楼层
drifting1024 发表于 2018-7-6 10:40
有几个问题想问下:
1.只有对话框才有INIT_DIALOG,Window没有对吗
2.想要在子窗口的基础上创建 ...

1、对
2、WM_CREATE消息。
回复

使用道具 举报

15

主题

56

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2018-7-6 10:50:20 | 显示全部楼层
eric2013 发表于 2018-7-6 10:42
1、对
2、WM_CREATE消息。

2具体是什么意思,我没找到创建消息的WM函数啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-6 16:01:35 | 显示全部楼层
drifting1024 发表于 2018-7-6 10:50
2具体是什么意思,我没找到创建消息的WM函数啊

QQ截图20180706160048.png
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 07:32 , Processed in 0.259373 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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