EmWin在对话框里怎么显示实时emwin 刷新实时数据数值

【安富莱原创】【STemWin教程】第39章 对话框基础知识_ucos_emwin_ucgui吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:95贴子:
【安富莱原创】【STemWin教程】第39章 对话框基础知识
第39章 对话框基础知识在上期教程我们讲解了控件的基础知识,本期教程我们接着讲解一下对话框的基础知识,有了这两部分的基础知识后,后面我们就可以进行每个控件的应用讲解了。控件可以创建并独立使用,因为它们本质上就是窗口。如果在对话框上面创建控件的话,就更加的方便了,这样就可以充分利用GUIBulder。39. 1 对话框的基本原理39. 2 创建对话框39. 3 对话框API39. 4 总结
39.1 对话框的基本原理39.1.1 输入焦点窗口管理器能记住用户使用触摸屏、鼠标、键盘或用其他方式最终所选择的窗口或窗口对象。该窗口会收到键盘输入消息,即具有输入焦点。追踪输入焦点的主要原因是为了确定键盘命令的发送目的地。具有输入焦点的窗口会接收由键盘所生成的事件。如果要将对话框内的输入焦点移至下一个焦点对话框项目,可以使用GUI_KEY_TAB键。如果要向后移动,则可以使用GUI_KEY_BACKTAB。39.1.2 阻塞式和非阻塞式对话框对话框窗口可以分为阻塞式和非阻塞式。阻塞式对话框会阻塞执行的线程。默认情况下,它有输入焦点,用户必须先关闭它,线程才能继续执行。阻塞式对话框不会同时禁用所显示的其他对话框。换言之,阻塞式对话框并非模式对话框。如果对话框为阻塞式,则表示只有在对话框关闭后,所使用的函数 (GUI_ExecDialogBox()或GUI_ExecCreatedDialog())才会返回值。而非阻塞式对话框则不会阻塞调用的线程--在它为可见时,可允许任务继续运行。创建对话框后,函数会立即返回值。需要注意的是,切勿从回调函数中调用阻塞式函数。否则,可能会导致应用程序故障。39.1.3 对话框过程函数对话框就是一个窗口,它接收消息的方式与系统中其他所有窗口一样。大多数消息由对话框的窗口回调程序自动处理,而其他消息则传递到建立对话框时所指定的回调程序,这便称为对话框过程函数。39.1.4 对话框消息发送到对话框过程函数的两种附加消息为:WM_INIT_DIALOG和WM_NOTIFY_PARENT。在显示对话框前,WM_INIT_DIALOG消息会立即发送到对话框过程函数。对话框过程函数通常使用该消息来初始化控件,并执行其他任何会影响对话框外观的初始化任务。 WM_NOTIFY_PARENT消息则通过对话框的子窗口发送到对话框,通知任何事件的父窗口以确保同步化。通过子窗口发送的事件取决于其类型,并针对每个类型的控件单独记录。
创建对话框创建对话框需要两个基本要素:资源表和对话框过程;前者定义所要包括的控件,后者定义控件的初始值及其行为。一旦具备这两个要素,则只需进行单个函数调用(GUI_CreateDialogBox()或GUI_ExecDialogBox())就能创建对话框。这里只是给大家讲解一下各个部分的原理,具体的创建方法可以参考第4章:uCGUIBulder和GUIBulder的使用。
资源表对话框可以基于阻塞(使用GUI_ExecDialogBox())或非阻塞(使用GUI_CreateDialogBox())方式创建。必须首先定义一个资源表,以指定在对话框中所要包括的所有小工具。下面的示例说明了创建资源表的方法:static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {{ FRAMEWIN_CreateIndirect, &Dialog&, 0, 10, 10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0 },{ BUTTON_CreateIndirect, &OK&, GUI_ID_OK, 100, 5, 60, 20 },{ BUTTON_CreateIndirect, &Cancel&, GUI_ID_CANCEL, 100, 30, 60, 20 },{ TEXT_CreateIndirect, &LText&, 0, 10, 55, 48, 15, TEXT_CF_LEFT },{ TEXT_CreateIndirect, &RText&, 0, 10, 80, 48, 15, TEXT_CF_RIGHT },{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 60, 55, 100, 15, 0, 50 },{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 60, 80, 100, 15, 0, 50 },{ TEXT_CreateIndirect, &Hex&, 0, 10, 100, 48, 15, TEXT_CF_RIGHT },{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, 60, 100, 100, 15, 0, 6 },{ TEXT_CreateIndirect, &Bin&, 0, 10, 120, 48, 15, TEXT_CF_RIGHT },{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT3, 60, 120, 100, 15 },{ LISTBOX_CreateIndirect, NULL, GUI_ID_LISTBOX0,10, 10, 48, 40 },{ CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 10, 140, 0, 0 },{ CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK1, 30, 140, 0, 0 },{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 60, 140, 100, 20 },{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 10, 170, 150, 30 }};对话框中所要包括的任何小工具都必须使用&WIDGET&_CreateIndirect()函数来间接创建。这个在前面38.6.1小节有讲解。
对话框过程函数上述示例使用如下所示的空白对话框过程函数创建。在创建任何对话框过程函数时,该基本模板都将作为起始点:/**********************************************************************对话框过程函数*/static void _cbCallback(WM_MESSAGE * pMsg) {switch (pMsg-&MsgId) {default:WM_DefaultProc(pMsg);}}对于该示例,对话框显示时会有下列代码行:GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),&_cbCallback, 0, 0, 0);所生成的对话框看起来如下图一样或者与之类似 (实际外观则取决于配置和默认设置): 创建对话框后,所有资源表中的控件都将可见。尽管这些控件在上面的屏幕截图中可见,但它们是以 “空”的形式出现的。这是因为对话框过程函数尚未包含初始化单个元素的代码。控件的初始值、由它们所引起的行为以及它们之间的交互作用都需要在对话框过程中进行定义。
初始化对话框下一步通常是使用它们各自的初始值对小工具进行初始化。在对话框过程函数中,这是对WM_INIT_DIALOG消息做出反应时的通常做法。下面的程序摘要说明了这个过程:/**********************************************************************对话框过程函数*/static void _cbCallback(WM_MESSAGE * pMsg) {int NCode, Id;WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBWM_HWIN hWin = pMsg-&hWswitch (pMsg-&MsgId) {case WM_INIT_DIALOG:/* Get window handles for all widgets */hEdit0 = WM_GetDialogItem(hWin, GUI_ID_EDIT0);hEdit1 = WM_GetDialogItem(hWin, GUI_ID_EDIT1);hEdit2 = WM_GetDialogItem(hWin, GUI_ID_EDIT2);hEdit3 = WM_GetDialogItem(hWin, GUI_ID_EDIT3);hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);/* Initialize all widgets */EDIT_SetText(hEdit0, &EDIT widget 0&);EDIT_SetText(hEdit1, &EDIT widget 1&);EDIT_SetTextAlign(hEdit1, GUI_TA_LEFT);EDIT_SetHexMode(hEdit2, 0xxffff);EDIT_SetBinMode(hEdit3, 0xxffff);LISTBOX_SetText(hListBox, _apListBox);WM_DisableWindow (WM_GetDialogItem(hWin, GUI_ID_CHECK1));CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK0));CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK1));SLIDER_SetWidth( WM_GetDialogItem(hWin, GUI_ID_SLIDER0), 5);SLIDER_SetValue( WM_GetDialogItem(hWin, GUI_ID_SLIDER1), 50);default:WM_DefaultProc(pMsg);)}}经过初始化的对话框现在如下所示,所有小工具都包含了它们各自的初始值:
定义话框行为一旦对话框得到初始化,则剩下的所有工作便是向对话框过程函数添加代码,这样可定义小工具的行为,从而使其能充分操作。继续同一个示例,最终的对话框过程函数如下所示:/**********************************************************************对话框过程函数*/static void _cbCallback(WM_MESSAGE * pMsg) {int NCode, Id;WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBWM_HWIN hWin = pMsg-&hWswitch (pMsg-&MsgId) {case WM_INIT_DIALOG:/* Get window handles for all widgets */hEdit0 = WM_GetDialogItem(hWin, GUI_ID_EDIT0);hEdit1 = WM_GetDialogItem(hWin, GUI_ID_EDIT1);hEdit2 = WM_GetDialogItem(hWin, GUI_ID_EDIT2);hEdit3 = WM_GetDialogItem(hWin, GUI_ID_EDIT3);hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);/* Initialize all widgets */EDIT_SetText(hEdit0, &EDIT widget 0&);EDIT_SetText(hEdit1, &EDIT widget 1&);EDIT_SetTextAlign(hEdit1, GUI_TA_LEFT);EDIT_SetHexMode(hEdit2, 0xxffff);EDIT_SetBinMode(hEdit3, 0xxffff);LISTBOX_SetText(hListBox, _apListBox);WM_DisableWindow (WM_GetDialogItem(hWin, GUI_ID_CHECK1));CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK0));CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK1));SLIDER_SetWidth( WM_GetDialogItem(hWin, GUI_ID_SLIDER0), 5);SLIDER_SetValue( WM_GetDialogItem(hWin, GUI_ID_SLIDER1), 50);case WM_KEY:switch (((WM_KEY_INFO*)(pMsg-&Data.p))-&Key) {case GUI_ID_ESCAPE:GUI_EndDialog(hWin, 1);case GUI_ID_ENTER:GUI_EndDialog(hWin, 0);}case WM_NOTIFY_PARENT:Id = WM_GetId(pMsg-&hWinSrc); /* Id of widget */NCode = pMsg-&Data.v; /* Notification code */switch (NCode) {case WM_NOTIFICATION_RELEASED:/* React only if released */if (Id == GUI_ID_OK) { /* OK Button */GUI_EndDialog(hWin, 0);}if (Id == GUI_ID_CANCEL) { /* Cancel Button */GUI_EndDialog(hWin, 1);}case WM_NOTIFICATION_SEL_CHANGED:/* Selection changed */FRAMEWIN_SetText(hWin, &Dialog - sel changed&);default:FRAMEWIN_SetText(hWin, &Dialog - notification received&);}default:WM_DefaultProc(pMsg);}}
对话框API对话框主要有以下四个API:关于这几个函数在用户手册中有详细的讲解,这里就不做讲解了
总结有了本期和前面的教程介绍后,后面具体的讲解每个控件时就会方便很多。
内&&容:使用签名档&&
保存至快速回贴查看: 1910|回复: 8
如何实时改变UCGUI可编辑文本框中的数字?
主题帖子精华
初级会员, 积分 64, 距离下一级还需 136 积分
在线时间0 小时
& & 可编辑文本框中的数字,可以通过点击按钮的回调函数改变。我现在想实时的改变其中的数字,不是通过其他的控件,例如实时检测电机的转速然后显示出来,该怎么做呢?请大神指导,谢谢大家!!
不太明白你这个实时是什么意思?
按理说只需要你修改EDIT内容的地点调用修改EDIT内容的函数即可——如
EDIT_SetValue();(针对DEC、HEX、BIN三种类型的EDIT)或者EDIT_SetFloatValue();(针对FLOAT类型EDIT)
靡不有初?鲜克有终
主题帖子精华
在线时间0 小时
不太明白你这个实时是什么意思?
按理说只需要你修改EDIT内容的地点调用修改EDIT内容的函数即可——如
EDIT_SetValue();(针对DEC、HEX、BIN三种类型的EDIT)或者EDIT_SetFloatValue();(针对FLOAT类型EDIT)
努力,前进。
主题帖子精华
在线时间113 小时
主题帖子精华
初级会员, 积分 64, 距离下一级还需 136 积分
在线时间0 小时
求助求助啊~~
靡不有初?鲜克有终
主题帖子精华
在线时间0 小时
更新你的显示内容即可。
于停用该账号:http://www.microstar.club
主题帖子精华
初级会员, 积分 64, 距离下一级还需 136 积分
在线时间0 小时
回复【4楼】styleno1:
---------------------------------谢谢指导!能再详细解释一下吗?我只是在while(1)里调用的GUI_Exec();运行按钮等其他控件的回调函数。您说的更新显示内容也要用到回调函数吗,还是有其他的方法?谢谢了!!
靡不有初?鲜克有终
主题帖子精华
初级会员, 积分 94, 距离下一级还需 106 积分
在线时间0 小时
回复【5楼】cdkchang:
---------------------------------
能加个qq交流下马我也使这个问题
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间0 小时
回复【5楼】cdkchang:
---------------------------------
不断的写文本框里面的字符串!不断的清除
主题帖子精华
初级会员, 积分 131, 距离下一级还需 69 积分
在线时间3 小时
回复【6楼】5498折戟沉沙:
---------------------------------
可是&,你在哪里显示这个edit控件呢?&&
触摸触发显示&&&还是定时显示?
希望与更多的电子爱好者交朋友
Powered by关于EDIT控件数据更新|uCOS &
emWin - 安富莱电子论坛 - Powered by phpwind
查看完整版本: [--
关于EDIT控件数据更新
我用ucGUI和ucOS做了一个对话框,上面有几个edit控件显示数据,创建了一个任务专门GUI_Exec(); 现在的情况是数据变了,但是edit的内容没有更新,我是把数据显示放在了对话框的回调函数的WM_PAINT消息处理里,发现只有对话框第一次显示的时候才发送这个消息,以后就没了,请教下该如何实现edit数据的更新呢?谢谢。。。。/*******************************************************************&&&&&&FunctionName:void PaintDialog(WM_MESSAGE * pMsg)**&&&&&&Function: to initialize the Dialog items**&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&**&&&&&&call this function in _cbCallback --& WM_PAINT*****************************************************************/static void PaintDialog(WM_MESSAGE * pMsg){&&&&&&&&&&&&&&&&WM_HWIN hWin = pMsg-&hW&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),Longitude);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT1),Latitude);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT2),Altitude);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT6),Speed);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT5),FixMode);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT4),Valid_S);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT8),Visible_S);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT3),UTCDate);&&&&&&&&&&&&&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT7),UTCTime);}/*******************************************************************&&&&&&FunctionName:void InitDialog(WM_MESSAGE * pMsg)**&&&&&&Function: to initialize the Dialog items**&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&**&&&&&&call this function in _cbCallback --& WM_INIT_DIALOG*****************************************************************/static void InitDialog(WM_MESSAGE * pMsg){&&&&&&&&&&&&&&&&WM_HWIN hWin = pMsg-&hW}/***********************************************************************&&&&&& Dialog callback routine*/static void _cbCallback(WM_MESSAGE * pMsg) {&&&&&&&&&&&&&&&&int NCode, Id;&&&&&&&&&&&&WM_HWIN hWin = pMsg-&hW&&&&&&&&&&&&switch (pMsg-&MsgId) &&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&case WM_PAINT:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&PaintDialog(pMsg);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case WM_INIT_DIALOG:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&InitDialog(pMsg);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case WM_KEY:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&switch (((WM_KEY_INFO*)(pMsg-&Data.p))-&Key) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_KEY_ESCAPE:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_KEY_ENTER:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case WM_NOTIFY_PARENT:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Id = WM_GetId(pMsg-&hWinSrc); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NCode = pMsg-&Data.v;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&switch (Id) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_ID_BUTTON37:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(NCode==WM_NOTIFICATION_RELEASED)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&done=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_ID_CANCEL:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(NCode==WM_NOTIFICATION_RELEASED)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WM_DefaultProc(pMsg);&&&&&&&&&&&&&&&&&&&&}}
你这里是初始化的时候只调用了一次,只有定时的更新才可以的,明天我回实验室了,把解决办法发给你。
:你这里是初始化的时候只调用了一次,只有定时的更新才可以的,明天我回实验室了,把解决办法发给你。 ( 20:58) 好的,谢谢了...
这里我假设hWin是你创建的对话框句柄,然后在主函数里面调用这个,试试看EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT6),&&要更新的数值); GUI_ID_EDIT6根据你的ID号改一下。如果要是不可以的话,得用这个函数先得到对话框的窗口函数句柄WM_GetClientWindow();也就是要这么调用EDIT_SetValue(WM_GetDialogItem(WM_GetClientWindow(hWin),GUI_ID_EDIT6),&&要更新的数值);
:这里我假设hWin是你创建的对话框句柄,然后在主函数里面调用这个,试试看EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT6),  要更新的数值); GUI_ID_EDIT6根据你的ID号改一下。如果要是不可以的话,得用这个函数先得到对话框的窗口函数句柄WM_GetClientWindow() .. ( 12:43) 谢谢版主,这个问题解决了,我现在发现EDIT控件中有一个光标,我不想显示这个光标,应该用哪个函数设置呢?
:谢谢版主,这个问题解决了,我现在发现EDIT控件中有一个光标,我不想显示这个光标,应该用哪个函数设置呢? ( 21:13) 这个光标好像没有办法消失,就跟你用电脑上面的控件是一样的,点击了以后会出现控件,只有你点击了别的地方那个控件才会消失。
可以试试EDIT_EnaBleBlink(),应该可以关闭闪烁光标。
case WM_KEY:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&switch (((WM_KEY_INFO*)(pMsg-&Data.p))-&Key) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_KEY_ESCAPE:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case GUI_KEY_ENTER:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin, 0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}你好,这段代码什么意思啊,麻烦了!
楼主,你的内容更新问题最终怎么解决的,可以写一下嘛
:谢谢版主,这个问题解决了,我现在发现EDIT控件中有一个光标,我不想显示这个光标,应该用哪个函数设置呢?&( 21:13)&楼主,光标不显示问题解决了吗?
查看完整版本: [--
Powered by
Time 0.048415 second(s),query:2 Gzip enabled【安富莱原创】【STemWin教程】第36章 窗口管理器之定时器使用_ucos_emwin_ucgui吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:95贴子:
【安富莱原创】【STemWin教程】第36章 窗口管理器之定时器使用
第36章 窗口管理器之定时器使用本期教程跟大家讲一下STemWin自带的定时器使用方法,这个定时器使用起来非常简单,而且很实用。在需要定时更新的时候可以用这个定时器。36. 1
定时器功能介绍36. 2 桌面窗口上使用定时器实例36. 3 对话框上使用定时器实例36. 4 总结
定时器功能介绍STemWin中有四个定时器相关的API函数供用户调用。这四个函数都是简单易用,下面通过两个例子跟大家讲解一下定时器的使用。
桌面窗口上使用定时器实例源代码如下(可以将其直接的复制到开发板或者模拟器上面运行)#include &stddef.h&#include &GUI.h&#include &DIALOG.h& #include &WM.h&#include &BUTTON.h&#include &CHECKBOX.h&#include &DROPDOWN.h&#include &EDIT.h&#include &FRAMEWIN.h&#include &LISTBOX.h&#include &MULTIEDIT.h&#include &RADIO.h&#include &SLIDER.h&#include &TEXT.h&#include &PROGBAR.h&#include &SCROLLBAR.h&#include &LISTVIEW.h&
GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW};static
char ucBackC /***********************************************************************
Dialog callback routine*/static void _cbBkWindow(WM_MESSAGE * pMsg) {
WM_HWIN hWin = pMsg-&hW
switch (pMsg-&MsgId)
{case WM_PAINT:ucBackColor++;if (ucBackColor == 3){ucBackColor = 0;}GUI_SetBkColor(_acColor[ucBackColor]);GUI_Clear();case WM_TIMER: (1)WM_RestartTimer(pMsg-&Data.v, 1000);WM_InvalidateWindow(hWin);
WM_DefaultProc(pMsg);
}} /***********************************************************************
MainTask************************************************************************/void MainTask(void) { WM_HTIMER hT GUI_Init();
/* 设置桌面窗口回调函数 */WM_SetCallback(WM_HBKWIN, _cbBkWindow);hTimer = WM_CreateTimer(WM_HBKWIN, 0, 1000, 0);(2)while (1){GUI_Delay(500);}}这个Demo主要是实现每隔1000ms改变一下桌面窗口的颜色。
代码说明及显示效果1. 定时器消息,这里要特别注意,如果想要定时器每隔一段时间执行一次,而不是只执行一次,必须得调用WM_RestartTimer()。在这个消息里面将桌面窗口无效进而会执行桌面窗口的重绘消息。2. 创建定时器函数WM_CreateTimer(WM_HBKWIN, //接受信息的窗口的句柄,注意是窗口而不是对话框0,
//用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。1000,
//周期,此周期过后指定窗口应收到消息。0) //保留,留作将来使用这个Demo的实际显示效果如下:
对话框上使用定时器实例这个Demo的主要功能是在对话框上面实现一个计数功能。下面是源码(可以将其直接的复制到开发板或者模拟器上面运行)#include &stddef.h&#include &stdio.h&#include &GUI.h&#include &DIALOG.h& #include &WM.h&#include &BUTTON.h&#include &CHECKBOX.h&#include &DROPDOWN.h&#include &EDIT.h&#include &FRAMEWIN.h&#include &LISTBOX.h&#include &MULTIEDIT.h&#include &RADIO.h&#include &SLIDER.h&#include &TEXT.h&#include &PROGBAR.h&#include &SCROLLBAR.h&#include &LISTVIEW.h& static int C/***********************************************************************
Dialog resource** This table conatins the info required to create the dialog.* It has been created by ucGUIbuilder.*/ static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect,
800,480,FRAMEWIN_CF_MOVEABLE,0},
{ BUTTON_CreateIndirect,
&BUTTON0&,
GUI_ID_BUTTON0,
82, 122,162,37, 0,0},
{ BUTTON_CreateIndirect,
&BUTTON1&,
GUI_ID_BUTTON1,
357,123,152,35, 0,0},{ TEXT_CreateIndirect,
GUI_ID_TEXT0,
278,264,300,48, 0,0}}; /*******************************************************************
FunctionName:void PaintDialog(WM_MESSAGE * pMsg)**
Function: to initialize the Dialog items**
call this function in _cbCallback --& WM_PAINT*****************************************************************/ void PaintDialog(WM_MESSAGE * pMsg){
WM_HWIN hWin = pMsg-&hW } /*******************************************************************
FunctionName:void InitDialog(WM_MESSAGE * pMsg)**
Function: to initialize the Dialog items**
call this function in _cbCallback --& WM_INIT_DIALOG*****************************************************************/ void InitDialog(WM_MESSAGE * pMsg){
WM_HWIN hWin = pMsg-&hW
//FRAMEWIN
FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
FRAMEWIN_SetTitleHeight(hWin,30); //
//GUI_ID_TEXT0
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontD36x48); } /***********************************************************************
Dialog callback routine*/static void _cbCallback(WM_MESSAGE * pMsg) {
int NCode, Id;char buf[10];
WM_HWIN hWin = pMsg-&hW
switch (pMsg-&MsgId)
{case WM_TIMER:(1)
Count++;sprintf(buf, &%04d&, Count);TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT0), (const char *)buf);WM_RestartTimer(pMsg-&Data.v, 100);case WM_PAINT:
PaintDialog(pMsg);
case WM_INIT_DIALOG:
InitDialog(pMsg);
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg-&Data.p))-&Key)
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1);
case GUI_KEY_ENTER:
GUI_EndDialog(hWin, 0);
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg-&hWinSrc);
NCode = pMsg-&Data.v;
switch (Id)
case GUI_ID_OK:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
case GUI_ID_CANCEL:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
case GUI_ID_BUTTON0:
switch(NCode)
case WM_NOTIFICATION_CLICKED:
case WM_NOTIFICATION_RELEASED:
case WM_NOTIFICATION_MOVED_OUT:
case GUI_ID_BUTTON1:
switch(NCode)
case WM_NOTIFICATION_CLICKED:
case WM_NOTIFICATION_RELEASED:
case WM_NOTIFICATION_MOVED_OUT:
WM_DefaultProc(pMsg);
}} /***********************************************************************
MainTask************************************************************************/void MainTask(void) {
WM_HWIN hDWM_HTIMER hTCount = 0;/*
使能窗口使用内存设备,这样可以有效避免闪烁 放在GUI_Init前面就包括桌面
窗口,如果放在后面就不包括桌面窗口。*/WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init();WM_SetDesktopColor(GUI_BLUE);
/* Automacally update desktop window */PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);///* 创建一个对话框 */
hDlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);hTimer = WM_CreateTimer(WM_GetClientWindow(hDlg), 0, 100, 0);(2)while (1){GUI_Delay(500);}}
函数说明及显示效果1. 定时器消息,在定时器消息中实现文件控件计数值的更新。2. 给对话框创建一个定时器,特别注意这里需要获取对话框中窗口的句柄才可以使用。这个例子的实际显示效果如下(分辨率800*480):
总结大家学完本期教程后,可以考虑在实际项目中使用这个功能,很实用。
内&&容:使用签名档&&
保存至快速回贴

我要回帖

更多关于 vba 输入数值对话框 的文章

 

随机推荐