[ucgui] 对话框2——小窗口初始化与消息响应

>_<" 上一节已经说过,创建过得窗口虽然可见,但是它们是以 “空”的形式出现的。这是因为对话框过程函数尚未包含初始化单个元素的代码。小工具的初始值、由它们所引起的行为以及它们之间的交互作用都需要在对话框过程中进行定义。这里在过程函数的WM_INIT_DIALOG消息下实现对小窗口初始化,然后在WM_NOTIFY_PARENT消息下实现对小工具的响应~

 1 /*********************************************************************
 2 *
 3 对话框可以基于阻塞(使用GUI_ExecDialogBox())或非阻塞(使用GUI_CreateDialogBox())
 4 方式创建。必须首先定义一个资源表,以指定在对话框中所要包括的所有小工具。下面的示例说明了创
 5 建资源表的方法:
 6 对话框中所要包括的任何小工具都必须使用<WIDGET>_CreateIndirect()函数来间接创建。
 7 */
 8 static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
 9     { FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0 },
10     { BUTTON_CreateIndirect, "OK", GUI_ID_OK, 100, 5, 60, 20 },
11     { BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 100, 30, 60, 20 },
12     { TEXT_CreateIndirect, "LText", 0, 10, 55, 48, 15, TEXT_CF_LEFT },
13     { TEXT_CreateIndirect, "RText", 0, 10, 80, 48, 15, TEXT_CF_RIGHT },
14     { EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 60, 55, 100, 15, 0, 50 },
15     { EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 60, 80, 100, 15, 0, 50 },
16     { TEXT_CreateIndirect, "Hex", 0, 10, 100, 48, 15, TEXT_CF_RIGHT },
17     { EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, 60, 100, 100, 15, 0, 6 },
18     { TEXT_CreateIndirect, "Bin", 0, 10, 120, 48, 15, TEXT_CF_RIGHT },
19     { EDIT_CreateIndirect, NULL, GUI_ID_EDIT3, 60, 120, 100, 15 },
20     { LISTBOX_CreateIndirect, NULL, GUI_ID_LISTBOX0,10, 10, 48, 40 },
21     { CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 10, 140, 0, 0 },
22     { CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK1, 30, 140, 0, 0 },
23     { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 60, 140, 100, 20 },
24     { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 10, 170, 150, 30 }
25 };
26 /*********************************************************************
27 *
28 对话框过程函数
29 */
30 static void _cbCallback(WM_MESSAGE * pMsg) {
31     int NCode, Id;
32     static const GUI_ConstString _apListBox[] = {  //ListBox contant
33             "English", "Deutsch", "Fran?ais", "Japanese", "Italiano", NULL
34     };
35     WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBox;
36     WM_HWIN hWin = pMsg->hWin;
37     switch (pMsg->MsgId) {
38     /*用它们各自的初始值对小工具进行初始化。在对话框过程函数中,这是对WM_INIT_DIALOG
39     消息做出反应时的通常做法*/
40     case WM_INIT_DIALOG:
41         /* Get window handles for all widgets */
42         hEdit0 = WM_GetDialogItem(hWin, GUI_ID_EDIT0);
43         hEdit1 = WM_GetDialogItem(hWin, GUI_ID_EDIT1);
44         hEdit2 = WM_GetDialogItem(hWin, GUI_ID_EDIT2);
45         hEdit3 = WM_GetDialogItem(hWin, GUI_ID_EDIT3);
46         hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);
47         /* Initialize all widgets */
48         EDIT_SetText(hEdit0, "EDIT widget 0");
49         EDIT_SetText(hEdit1, "EDIT widget 1");
50         EDIT_SetTextAlign(hEdit1, GUI_TA_LEFT);
51         EDIT_SetHexMode(hEdit2, 0x1234, 0, 0xffff);
52         EDIT_SetBinMode(hEdit3, 0x1234, 0, 0xffff);
53         LISTBOX_SetText(hListBox, _apListBox);
54         WM_DisableWindow (WM_GetDialogItem(hWin, GUI_ID_CHECK1));
55         CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK0));
56         CHECKBOX_Check( WM_GetDialogItem(hWin, GUI_ID_CHECK1));
57         SLIDER_SetWidth( WM_GetDialogItem(hWin, GUI_ID_SLIDER0), 5);
58         SLIDER_SetValue( WM_GetDialogItem(hWin, GUI_ID_SLIDER1), 50);
59         break;
60     /*告知父窗口,其子窗口中发生了某些改变。上面是小工具的初始化,下面是过程中变化的处理*/
61     case WM_NOTIFY_PARENT:
62         Id = WM_GetId(pMsg->hWinSrc); /* Id of widget 获得小工具的ID*/
63         NCode = pMsg->Data.v; /* Notification code 通知消息代号*/
64         switch (NCode) {
65         case WM_NOTIFICATION_RELEASED:/* React only if released 此通知消息将在被点击的小工具已被释放时发送。*/
66             if (Id == GUI_ID_OK) { /* OK Button */
67                 GUI_EndDialog(hWin, 0);
68             }
69             if (Id == GUI_ID_CANCEL) { /* Cancel Button */
70                 GUI_EndDialog(hWin, 1);
71             }
72             break;
73         case WM_NOTIFICATION_SEL_CHANGED:/* Selection changed 此通知消息将在小工具选择已更改时发送。*/
74             FRAMEWIN_SetText(hWin, "Dialog - sel changed");
75             break;
76         default:
77             FRAMEWIN_SetText(hWin, "Dialog - notification received");
78         }
79         break;
80     default:
81     WM_DefaultProc(pMsg);
82     }
83 }
84 /*********************************************************************
85 *
86 * MainTask
87 */
88 void Fun(void) {
89     //对于该示例,对话框显示时会有下列代码行:
90     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),&_cbCallback, 0, 0, 0);
91 }
时间: 2024-08-02 06:59:01

[ucgui] 对话框2——小窗口初始化与消息响应的相关文章

MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应

MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/details/5866213 二.在对话框中创建视图(我这里创建的是一个滚动视图): 见博文: http://blog.csdn.net/clever101/article/details/4873994 http://blog.csdn.net/clever101/article/details/37790

uCGUI窗口初始化过程

一.相关结构体和变量 重要的uCGUI系统全局变量 NextDrawWin                      下一个需要重绘的窗口句柄 WM__NumWindows       系统当前的总共窗口总数 WM__NumInvalidWindows   系统当前无效的窗口总数,这些窗口都需要重绘的 WM__FirstWin                    系统第一个窗口的句柄,默认的就是桌面窗口,桌面窗口的句柄就是1.在创建桌面窗口的时候,会将桌面窗口的句柄,付给该全局变量,该动作发生

[ucgui] 对话框1——创建对话框

>_<" 小工具和对话框的区别: 小工具可以创建并独立使用,因为它们本质上就是窗口.但是,通常需要使用对话框,它是包含一个或多个小工具的窗口. 对话框通常是一个窗口,它在出现时会要求用户输入信息.它可能包含多个小工具,要求用户根据各种选择来提供信息,或者以消息框的形式,仅提供信息 (比如向用户提供注意事项或警告)和一个“确定”按钮. >_<" 对话框的基本原理: 输入焦点 窗口管理器能记住用户使用触摸屏.鼠标.键盘或用其他方式最终所选择的窗口或窗口对象.该窗口会

MFC窗口的消息响应顺序

最开始的消息传递 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COM

ZeroMQ接口函数之 :zmq_msg_init_size - 使用一个指定的空间大小初始化ZMQ消息对象

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_size zmq_msg_init_size(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_msg_init_size - 使用一个指定的空间大小初始化ZMQ消息对象 Synopsis int zmq_msg_init_size (zmq_msg_t *msg, size_t size); Description zmq_msg_init_size()函数会分配任何被请

Java基础:多功能小窗口,swing,io,net综合应用

概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者,最快速的上手方式应该就是学以致用了. 下面做了一个小窗口,主要是为了综合应用java的一些基础功能,界面稍显随意. 界面: 具体功能以及代码: 1 /*具体实现功能: 2 * 1.根据地址栏的路径打开文本文件,显示在文本区域. 3 * 2.根据地址栏的网址获取网页源代码,显示在文本区域. 4 * 3.通过打开按钮打开本地文本文件,显示在文本区域. 5 * 4.通过保存按钮,把文本区域内

如何给对话框中的控件发送消息呢?Windows消息分类

以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给控件的消息给控件容器(控件的父窗口)是没有用的.为什么呢?首先要明白windows的消息分类: Windows消息的分类 1. 标准消息(队列消息)除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,如WM_MOUSEMOVE.WM_LBUTTONUP.WM_KEYDOWN.WM_C

窗体的Alpha通道透明色支持(一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息)

参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768 Windows 2000后,为了支持类似MAC界面的Alpha通道混合效果,提供了GDI+,提供了很多的界面功能函数,可以实现很好的界面效果.例如可以使用UpdateLayeredWindow来实现窗体的颜色透明.但是一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息. UpdateLayeredWindow(hw

窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo

最近用到窗口变化的一些东西,遇到几个相关的消息函数,简要分析,作为备忘. 3个消息分别是:WM_SIZE.WM_SIZING.WM_GETMINMAXINFO:分别对应相应的处理函数:OnSize.OnSizing.OnGetMinMaxInfo. 当窗口大小发生变化时,响应的顺序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE. OnGetMinMaxInfo 这个函数在窗口初始化的时候会被调用一次,当窗口大小发生改变的时候也会被调用.利用这个函数,可以比