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

>_<" 小工具和对话框的区别:

  • 小工具可以创建并独立使用,因为它们本质上就是窗口。但是,通常需要使用对话框,它是包含一个或多个小工具的窗口。
  • 对话框通常是一个窗口,它在出现时会要求用户输入信息。它可能包含多个小工具,要求用户根据各种选择来提供信息,或者以消息框的形式,仅提供信息 (比如向用户提供注意事项或警告)和一个“确定”按钮。

>_<" 对话框的基本原理:

输入焦点

窗口管理器能记住用户使用触摸屏、鼠标、键盘或用其他方式最终所选择的窗口或窗口对象。该窗口会收到键盘输入消息,即具有输入焦点。追踪输入焦点的主要原因是为了确定键盘命令的发送目的地。具有输入焦点的窗口会接收由键盘所生成的事件。如果要将对话框内的输入焦点移至下一个焦点对话框项目,可以使用GUI_KEY_TAB键。如果要向后移动,则可以使用GUI_KEY_BACKTAB。

阻塞式和非阻塞式对话框

对话框窗口可以分为阻塞式和非阻塞式。阻塞式对话框会阻塞执行的线程。默认情况下,它有输入焦点,用户必须先关闭它,线程才能继续执行。阻塞式对话框不会同时禁用所显示的其他对话框。换言之,阻塞式对话框并非模式对话框。如果对话框为阻塞式,则表示只有在对话框关闭后,所使用的函数 (GUI_ExecDialogBox()或GUI_ExecCreatedDialog())才会返回值。而非阻塞式对话框则不会阻塞调用的线程--在它为可见时,可允许任务继续运行。创建对话框后,函数会立即返回值。需要注意的是,切勿从回调函数中调用阻塞式函数。否则,可能会导致应用程序故障。

对话框过程函数

对话框就是一个窗口,它接收消息的方式与系统中其他所有窗口一样。大多数消息由对话框的窗口回调程序自动处理,而其他消息则传递到建立对话框时所指定的回调程序,这便称为对话框过程函数。

对话框消息

发送到对话框过程函数的两种附加消息为:WM_INIT_DIALOG和WM_NOTIFY_PARENT。在显示对话框前,WM_INIT_DIALOG消息会立即发送到对话框过程函数。对话框过程函数通常使用该消息来初始化小工具,并执行其他任何会影响对话框外观的初始化任务。 WM_NOTIFY_PARENT消息则通过对话框的子窗口发送到对话框,通知任何事件的父窗口以确保同步化。通过子窗口发送的事件取决于其类型,并针对每个类型的小工具单独记录。

>_<" 创建对话框需要两个基本要素:

资源表和对话框过程;前者定义所要包括的小工具,后者定义小工具的初始值及其行为。一旦具备这两个要素,则只需进行单个函数调用(GUI_CreateDialogBox()或GUI_ExecDialogBox())就能创建对话框。

 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 作为起始点:
31 */
32 static void _cbCallback(WM_MESSAGE * pMsg) {
33 switch (pMsg->MsgId) {
34 default:
35 WM_DefaultProc(pMsg);
36 }
37 }
38 /*********************************************************************
39 *
40 * MainTask
41 */
42 void Fun(void) {
43     //对于该示例,对话框显示时会有下列代码行:
44     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),&_cbCallback, 0, 0, 0);
45 }
46 /*
47 创建对话框后,所有资源表中的小工具都将可见。尽管这些小工具在上面的屏幕截图中可见,但它们
48 是以 “空”的形式出现的。这是因为对话框过程函数尚未包含初始化单个元素的代码。小工具的初始
49 值、由它们所引起的行为以及它们之间的交互作用都需要在对话框过程中进行定义。
50 */
时间: 2024-10-02 16:01:59

[ucgui] 对话框1——创建对话框的相关文章

【转】VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)

原文网址:http://www.jizhuomi.com/software/153.html 前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的.大家用过VC++6.0

鸡啄米MFC教程笔记之四:对话框:创建对话框模板和修改对话框属性

---恢复内容开始--- 本节开始为大家讲解偏应用的知识-创建对话框. 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了. 创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件:  第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 这里鸡啄米就再创建一个基于对话框的应用程序,用来实现加法运算的功能.如下:

VS2010/MFC对话框:创建对话框类和添加控件变量

创建对话框类和添加控件变量 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的.大家用过VC++ 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在VS2010中,一般对话框类都是继承自CDia

VS2010-MFC(对话框:创建对话框模板和修改对话框属性)

转自:http://www.jizhuomi.com/software/149.html 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了. 创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件:第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 本节先讲讲怎样创建对话框模板和设置对话框属性. 创建基于对话

VS2010/MFC对话框:非模态对话框的创建及显示

非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将上一讲中创建的Tip模态对话框改为非模态对话框,让大家看下效果. 非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,所以上一讲中创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 创建及显示非模态

Android 官方推荐 : DialogFragment 创建对话框

1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框.典型的用于:展示警告框,输入框,确认框等等.在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog.注:官方不推荐直接使用Dialog创建对话框. 2. 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的

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

使用 DialogFragment 创建对话框

简介 在DialogFragment产生之前,我们创建对话框一般采用AlertDialog和Dialog,DialogFragment在android 3.0时被引入,是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框. 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其生命周期(自动重建),它和Fragment有着基本一致的生命周期.且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragm

【Qt】2.3 使用Qt设计师来创建对话框

安装完Qt OpenSource之后,在开始菜单目录下会有这几个东西. 其中[Designer]是用来设计窗口界面的程序.所以现在可以使用它来设计一个对话框.在[Qt Creator]中,[设计]这一项里也可以做界面的设计. 打开[Designer],会默认弹出[新建窗体],选择[Dialog without Buttons],这会新建出一个没有任何东西的对话框. [Dialog with Buttons Bottom]和[Dialog with Buttons Right]会创建出包含[确定]