资源——对话框(Dialog Box)
一般菜单项的后面加省略号(...)提示该菜单会激活一个对话框。
对话框的坐标X轴以对话框所用字体宽度的1/4为单位,Y轴以字体高度的1/8为单位。
对话框处理过程与窗口处理过程很相似,但也有一些不同,对话框过程不是窗口过程。一般在对话框处理过程中,我们只需要处理子窗口控件的初始化、子窗口控件消息和结束对话框。下面是一个对话框过程:BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,lParam) { switch(message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: case IDCANCEL: EndDialog(hDlg,0); return TURE; } break; } return FALSE; } 可以看出,虽然它与窗口过程参数相同,但返回值为BOOL型;窗口处理过程把不处理的消息交由DefWindowProc处理,而对话框消息不这样,对于处理的消息返回TRUE,不处理的消息返回FALSE;对话框消息不处理WM_PAINT与WM_DESTORY消息,也不会收到WM_CREATE消息。WM_INITDIALOG消息返回TRUE,对话框窗口会把输入焦点设为第一个可TAB停靠的控件,也可以在这个消息中用SetFocus指定输入焦点控件,但要返回FALSE。
模态对话框的消息不会进入程序的消息队列,但WndProc还会接收消息。
模态对话框
DialogBox(hInstance,MAKEINTRESOURCE(IDM_MYDIALOGBOX),hwnd,DlgProc):激活对话框,返回值是DlgProc中EndDialog的第二个参数。
DialogBox实际上调用了CreateWindow函数,CreateWindow的参数从对话框模板中获取,对话框模板可以提供几乎所有的参数(包括窗口类),如果没有定义窗口类,CreateWindow会注册一个特殊的窗口类。
如果要动态创建对话框,可以使用DialogBoxIndirect这个函数。模板中常用的一些控件类型有PUSHBUTTON、CHECKBOX、RADIOBUTTON、BROUPBOX、LTEXT、CTEXT、RTEXT、ICON、EDITTEXT、SCROLLBAR、LISTBOX、COMBOBOX
为了避免使用全局变量,可以用DialogBoxParam激活对话框。DialogBoxParam比DialogBoxParam多了一个32位的参数,可以传你需要的任意数据,一般传递一个结构体指针,这个参数传递到WM_INITDIALOGBOX消息的lParam。
对话框模板中,WS_TABSTOP标记表示按TAB时输入焦点在此停留,WS_GROUP标记表示与下一个WS_GROUP控件(不包括这个)之间的控件为一组,当用光标控制键时会在这输入焦点会在这一组切换。还可用GetNextDlgTabItem或GetNextDlgGroupItem获得下一个或前一个Tab或Group控件句柄。
MapDialogRect:把对话框的字符坐标转化成像素坐标。
自定义控件
首先在WinMain中注册窗口类并添加消息处理函数,再从工具箱添加一个自定义控件,在属性里填写刚刚注册的类名。
非模态对话框
使用CreateDialog创建,参数与DialogBox一样,但直接返回窗口句柄,一般句柄保存为全局变量。
非模态对话框的消息经由消息队列发到程序,所以非模态对话框要从消息队列中获取自己的消息,可以按下面方法修改消息循环while(GetMessage(&msg,NULL,0,0)) { if(hDlgModeless==0 || IsDialogMessage(hDlgModeless,&msg) { TranslateMessage(&msg); DispatchMessage(&msg); } } IsDialogMessage把消息发给对话框,如果对话框处理则返回TRUE,不处理返回FALSE。
关闭非模态对话框用DestroyWindow而不是EndDialog。虽然非模态对话框默认有关闭按钮,但并不处理WM_CLOSE消息,用户必须添加处理过程:case WM_CLOSE: DestroyWindow(hwnd); hDlgModeless=NULL; return TRUE; DestroyWindow参数要写消息处理过程传递的窗口句柄。
可以直接用CreateDialog创建主窗口,但要自己写对话框模板并包含在.rc文件中,窗口类的cbWndExtra字段必须设为DLGWINDOWEXTRA,CreateDialog第三、四个参数为NULL,不能加对话框处理过程,所有消息处理在窗口类的窗口处理过程中。
通用对话框(Common Dialog Box)
要include头文件COMMDLG.h
GetOpenFileName(&ofn):ofn是OPENFILENAME结构体变量,创建一个打开文件对话框。
GetSaveFileName(&ofn):保存文件对话框。
ChooseFont(&cf):cf是CHOOSEFONT结构体变量,打开字体选择对话框。
FindText(&fr):fr是FINDREPLACE结构体变量,查找对话框。
ReplaceText(&fr):替换对话框。
RegisterWindowMessage(lpString):注册一个lpString指定的消息,返回消息ID。使用查找、替换对话框时,lpString为FINDMSGSTRING,在父窗口中注册,当点击查找、替换、关闭按钮时会给父窗口发送一个该函数注册的消息,lParam参数是FINDREPLACE结构体的指针。
ChooseColor(&cc):cc是CHOOSECOLOR结构体变量。
资源——对话框(Dialog Box)相关推荐
- matlab 对话框保持,如何在matlab中创建输入对话框?(How to create Input dialog box in matlab?)...
如何在matlab中创建输入对话框?(How to create Input dialog box in matlab?) 我想在matlab中创建输入对话框. 我在MATLAB中执行简单的加法运算. ...
- java modal_Java 源码-模态对话框(Modal Dialog Box)的实现
所谓的模态对话框,即弹出后用户只能与对话框交互,而不能与背景页面交互的对话框. (modal specifies whether dialog blocks user input to other t ...
- Android 对话框(Dialog)大全 建立你自己的对话框
Android 对话框(Dialog)大全 建立你自己的对话框 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户 ...
- java实用教程——组件及事件处理——对话框(dialog)
对话框: import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.awt.*; impo ...
- Color dialog box
#include <windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK Pan ...
- COM:The Open Dialog Box
如何使用com组件创建打开对话框 #include <windows.h>#include <shobjidl.h> int WINAPI wWinMain(HINSTANCE ...
- Android 对话框(Dialog)大全
Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int) ...
- Android项目实战(三十二):圆角对话框Dialog
原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...
- Android对话框dialog大全(代码直接可用)
Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...
最新文章
- 第十课.简单文本分类
- Oracle Logminer 做数据恢复 说明示例
- 理解JSON对象:JSON.parse、 JSON.stringify
- oracle 动态sql列转行_oracle行转列(动态行转不定列)
- Nacos 快速开始
- zookeeper源码-分布式锁
- Mysql调试存储过程最简单的方法
- (一)区块链的共识算法:整体介绍 及 分叉 的通俗讲解
- c语言中文网qq,c语言写的qq连看辅助
- 卸载wps后安装office图标异常的问题
- React项目中提示caniuse-lite已过时,建议更新
- hellow windows
- 快速理解Raft之日志复制(肝了两千五百字)
- Css基本样式————链接
- 那些从来不用花呗的女孩
- linux应用开发大杂烩(你不一定都知道的细枝末节)
- [bzoj-4808]马 题解
- ModuleNotFoundError: No module named ‘locust.events‘,httprunner执行locust压测报错解决办法~
- 安大计算机学院的张燕平导师怎么样,安大两名硕士论文被曝高度抄袭两人同届同门同属于一个导师...
- 专访实在智能CEO孙林君:聚焦AI+RPA赛道,为全社会贡献100万个数字员工
热门文章
- 大厂程序员裸辞,全职接单一个月的感触!
- ​势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?
- 计算机组成原理乘法器实验报告,Booth乘法器实验报告
- 用go来搭建一个简单的图片上传网站
- 【Leetcode】对 矩 阵 螺 旋 输 出 java/c++
- 3dsMax记录---制作一套桌椅
- python发微信提醒天气冷了注意保暖_2019天气转冷注意保暖微信 2019天气冷注意保暖的句子(图文)...
- (转)世界上最美丽的英文
- 电子商务的 OKR(附案例)
- ggplot2画图教程之Pathway富集分析(气泡图)