请教UCGUI 对话框不显示

没有加操作系统,只有ucGUI之前在创建按钮控件的时候hButton1=BUTTON_CreateAsChild(40,20,60,30,hFrame,GUI_ID_OK... 没有加操作系统,只有ucGUI
之前在创建按钮控件的时候
hButton1 = BUTTON_CreateAsChild(40,20,60,30,hFrame,GUI_ID_OK,WM_CF_SHOW);
发现不不显示,就在后面加了一句WM_Paint(hButton1);就显示出来了,
现在创建了一个对话框,上面有两个button

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ FRAMEWIN_CreateIndirect, "PassWord", ID_FRAMEWIN_0, 0, 0, 200, 100, 0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 1, 56, 80, 20, 0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 108, 55, 80, 20, 0, 0 }
// USER START (Optionally insert additional widgets)
// USER END
};

WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, WM_HBKWIN, 0, 0);
WM_Paint(hWin);
发现有对话框,但是两个按钮没显示出来啊,后来我跟踪了下
将下面函数里的 WM_ShowWindow 换成了 WM_Paint 结果什么也显示不出来了,请教大家怎么办啊? 为什么ucGUI手册上面的例程在创建一个控件之后没有调用WM_Paint之类的函数就能显示出来了?谢谢了。

WM_HWIN GUI_CreateDialogBox(const GUI_WIDGET_CREATE_INFO* paWidget, int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent,
int x0, int y0)
{
WM_HWIN hDialog = paWidget->pfCreateIndirect(paWidget, hParent, x0, y0, cb); /* Create parent window */
WM_HWIN hDialogClient = WM_GetClientWindow(hDialog);
WIDGET_OrState(hDialog, paWidget->Flags);
//WM_ShowWindow(hDialog);
//WM_ShowWindow(hDialogClient);
WM_Paint(hDialog);
WM_Paint(hDialogClient);
while (--NumWidgets > 0) {
WM_HWIN hChild;
paWidget++;
hChild = paWidget->pfCreateIndirect(paWidget, hDialogClient, 0, 0, 0); /* Create child window */
// WM_ShowWindow(hChild);
WM_Paint(hChild);
}
WM_SetFocusOnNextChild(hDialog); /* Set the focus to the first child */
WM_SendMessageNoPara(hDialogClient, WM_INIT_DIALOG);
return hDialog;
}
展开
 我来答
610095871
推荐于2016-03-14 · TA获得超过455个赞
知道小有建树答主
回答量:380
采纳率:100%
帮助的人:270万
展开全部

  WM_Paint 这个函数是立即重绘,主要是通过发送重绘消息实现

  手册中关于对话框的例程只是给出了回调函数的处理,除了调用 WM_Paint,调用GUI_Delay,GUI_Exec,都可以达到绘制窗口的作用,GUI_Delay中调用了GUI_Exec,只不过同时还有延时。

  GUI_Exec这个函数中进行了消息的派送和处理,绘制无效窗口等内容都是在之中完成的,也就是说,如果你不带系统的话需要在while大循环中不停的调用GUI_Exec 来实现消息的派送和处理,

  不过对于WM_Paint和GUI_Exec两者的区别我不是很清楚,但是个人感觉最好用GUI_Exec

  这是我 按照楼主说程序在VC上做的试验

  主要代码是

  static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { 
{ FRAMEWIN_CreateIndirect, "PassWord", 0xf9, 0, 0, 200, 100, 0, 0 }, 
{ BUTTON_CreateIndirect, "Button", 0xfa, 1, 56, 80, 20, 0, 0 }, 
{ BUTTON_CreateIndirect, "Button", 0xfb, 108, 55, 80, 20, 0, 0 }
};
 // USER START (Optionally insert additional widgets)  // USER END};
void MainTask()
{

   EDIT_Handle hEdit,hEdit2 ;
 DROPDOWN_Handle hDropdown;

   GUI_Init();
 GUI_SetBkColor(GUI_RED);
 GUI_Clear();
 WM_SetDesktopColor(GUI_RED);

   GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), 0, WM_HBKWIN, 0, 0);
 while(1)
 {
  GUI_Exec();//必须调用,消息的派送窗口的更新都在其内完成
 }

}

希望对楼主有帮助

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式