对话框是比较常用的窗口,比如当你想让用户输入一些参数时就可以使用对话框。或者提示一些警告的信息,都是可以使用对话框的。比如当你拷贝文件时,Windows就会提示一个拷贝文件的进度对话框。对话框的使用范围比较广,并且它在设计时就可以看到运行的结果模样,这样方便设计。但对话框又分为两类,一种对话框运行后,一定要用户关闭那个对话框后才能返回到父窗口;一种对话框是不需要关闭后就可以直接返回父窗口。因此,软件开发人员就要考虑这个对话框的结果是否会影响后面的操作,如果这个对话框的结果跟后面的操作没有因果关系的,可以设置为第二种对话框。像拷贝文件的对话框就是第二种的对话框,称作无模式的对话框。如果设置为第一类,非要等那里拷贝文件才可以去操作其它东西,那么Windows就不方便使用了,这样会浪费大量的时间。让人等待,就是一个不好用的软件,所以软件开发人员设计软件时,要站在用户的立场思考问题,在保持软件正确的情况下,不要让人等待,任何让人等待超过20秒以上的软件,会让用户烦躁不安。如果非要等待的话,也要加入进度条对话框提示,这样可以有效地缓解用户烦躁不安的心情。这就跟你去银行排队时,可以坐在那里看着电视,感觉不到时间长的道理一样的。
函数DialogBox函数和DialogBoxParam函数声明如下:
#define DialogBoxA(hInstance, lpTemplate, hWndParent, lpDialogFunc) /
DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
#define DialogBoxW(hInstance, lpTemplate, hWndParent, lpDialogFunc) /
DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
#ifdef UNICODE
#define DialogBox DialogBoxW
#else
#define DialogBox DialogBoxA
#endif // !UNICODE
WINUSERAPI
INT_PTR
WINAPI
DialogBoxParamA(
__in_opt HINSTANCE hInstance,
__in LPCSTR lpTemplateName,
__in_opt HWND hWndParent,
__in_opt DLGPROC lpDialogFunc,
__in LPARAM dwInitParam);
WINUSERAPI
INT_PTR
WINAPI
DialogBoxParamW(
__in_opt HINSTANCE hInstance,
__in LPCWSTR lpTemplateName,
__in_opt HWND hWndParent,
__in_opt DLGPROC lpDialogFunc,
__in LPARAM dwInitParam);
#ifdef UNICODE
#define DialogBoxParam DialogBoxParamW
#else
#define DialogBoxParam DialogBoxParamA
#endif // !UNICODE
hInstance是当前应用程序的实例句柄。
lpTemplateName是对话框的资源模板。
hWndParent是父窗口的句柄。
lpDialogFunc是对话框的消息处理函数。
dwInitParam是初始化参数,这里缺省设置为0。
调用这个函数的例子如下:
#001 //
#002 // 目的: 处理主窗口的消息.
#003 //
#004 // 蔡军生 2007/07/12 QQ:9073204
#005 //
#006 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#007 {
#008 int wmId, wmEvent;
#009 PAINTSTRUCT ps;
#010 HDC hdc;
#011
#012 switch (message)
#013 {
#014 case WM_COMMAND:
#015 wmId = LOWORD(wParam);
#016 wmEvent = HIWORD(wParam);
#017 // 菜单选项命令响应:
#018 switch (wmId)
#019 {
#020 case IDM_ABOUT:
#021 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
#022 break;
#023 case IDM_EXIT:
#024 DestroyWindow(hWnd);
#025 break;
#026 default:
#027 return DefWindowProc(hWnd, message, wParam, lParam);
#028 }
#029 break;
#030 case WM_PAINT:
#031 hdc = BeginPaint(hWnd, &ps);
#032 //
#033 EndPaint(hWnd, &ps);
#034 break;
#035 case WM_DESTROY:
#036 PostQuitMessage(0);
#037 break;
#038 default:
#039 return DefWindowProc(hWnd, message, wParam, lParam);
#040 }
#041 return 0;
#042 }
第21行就是调用函数DialogBox来显示对话框窗口。
对话框的模板如下:
/
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "关于"
FONT 9, "新宋体", 400, 0, 0x86
BEGIN
ICON IDI_TESTWIN,IDC_MYICON,14,9,21,21
LTEXT "TestWin Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
LTEXT "Copyright (C) 2007",IDC_STATIC,49,20,119,8
DEFPUSHBUTTON "确定",IDOK,185,51,38,16,WS_GROUP
END
IDD_ABOUTBOX是对话框模板的名称。
DIALOGEX是对话框定义的关键字。
22, 17, 230, 75是对话框的坐标和大小。
STYLE是设置对话框的显示类型。
CAPTION是定义标题名称。这里是"关于"。
FONT是定义对话的字体。
ICON是定义一个图标显示。
LTEXT是定义显示静态文本。
DEFPUSHBUTTON是定义一个按钮。
消息响应函数:
- BOOL CALLBACK DialogProc(
- HWND hwndDlg, // handle to dialog box
- UINT uMsg, // message
- WPARAM wParam, // first message parameter
- LPARAM lParam // second message parameter
- )
- {
- switch(uMsg)
- {
- case WM_INITDIALOG:
- return TRUE;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDOK:
- case IDCANCEL:
- EndDialog(hwndDlg,LOWORD(wParam));
- break;
- }
- return TRUE;
- default:
- break;
- }
- return FALSE;
- }
(17)DialogBox和DialogBoxParam函数相关推荐
- 20.17 shell中的函数
2019独角兽企业重金招聘Python工程师标准>>> 20.17 shell中的函数 函数:就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这 ...
- 17.Node.js 回调函数--异步编程
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程 ...
- 17.容器的成员函数优先于同名的算法
有些STL 容器提供了一些与算法同名的成员函数.大多数情况下,应该使用这些成员函数,而不是相应的STL算法. 有两个理由: 成员函数往往速度快. 成员函数通常与容器结合地更紧密,这是算法所不能比的. ...
- 【17】C语言 | 函数递归题
目录 函数递归:就是函数自己调用自己 下面我们通过几个例子了解一下函数递归 1 [下面代码输出什么?] 2[数9的个数] 3 [分数求和] 4 [求10个整数中最大值] 5 [屏幕上输出乘法口诀表] ...
- (转载)由1-7的随机整数函数构造1-10随机整数函数
题目: 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10. 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n ...
- DialogBox函数参数
DialogBox是一个Windows API函数.它的作用是从一个对话框资源中创建一个模态对话框.该函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制.该函数通过调用D ...
- C语言dialog函数用法,DialogBox用法
该宏根据对话框模板资源创建一个模态的对话框.DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制.该宏使用DialogBoxParam函数. 函数原型:i ...
- Win32 API 函数列表
ID编号 函数名 函数说明 详细说明 Win16支持 Win9x支持 WinNT支持 1 AbortDoc 终止一项打印作业 Yes Yes Yes 2 AbortPath 终止或取消DC中的一切路 ...
- Win32 API 函数列表1(格式有点乱)
西安邮电学院 徐兆元 ID编号 函数名 函数说明 详细说明 Win16支持 Win9x支持 WinNT支持 1 AbortDoc 终止一项打印作业 Yes Yes Yes 2 AbortPath 终 ...
- 中年人学C语言Windows程序设计,30 DialogBox控件
DialogBox控件 1.DialogBox 函数功能:该宏根据对话框模板资源创建一个模态的对话框.DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制 ...
最新文章
- 同一份数据,Redis为什么要存两次?
- LeetCode-笔记-143. 重排链表
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
- 中国AI创新者论坛成功举办!这里有一份AI教育和医疗的落地秘籍
- matlab计算复活节概率,复活节日期的计算方法
- sql编程接收一个集合_T-SQL中基于集合的程序编程方法简介
- 陌陌 3 千万数据暗网出售;美团反腐 89 人受刑事查处;iPhone 推迟 5G 采用时间 | 极客头条...
- 计算机应用缺什么人才,中国缺少什么专业人才
- 基于jquery的全局ajax函数处理session过期后的ajax操作
- 三菱plc 毕设_PLC入门难?怎么快速学好PLC?
- LM算法+推导+C++代码实践
- 电子邮件 e-mail原理
- web前端开发Vue面试题记录
- Python学习笔记 使用matplotlib创建Gif动图
- 国美易卡网络大数据,国美易卡MySQL数据库
- Olly Script Editor V2.0
- 「深度」规模仅为12亿元,充电桩建设真的是朝阳产业吗?
- 知道创宇高级威胁情报团队:以APT测绘及APT防御应对高级威胁
- 理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器
- 天敏SDK2500开发小计
热门文章
- 【windows】Windows电脑怎么卸载服务/删除服务?
- 小程序毕设作品之微信二手交易小程序毕业设计成品(6)开题答辩PPT
- plecs使用C-Script模块建立PI传递函数模型
- 栅栏密码--Python解密脚本
- 电路设计基础--MOS管驱动直流电机电路,看懂芯片手册
- Tomcat启动出现乱码
- tomcat乱码怎么解决
- 通过开发对接淘宝联盟发单淘宝客优惠线报自动转链接社转发返利机器人球鞋搬砖
- 生物医学信号检测与处理实验3——1微电阻梁
- UCanCode Visio 2022发布--专业--免费-绿色