一般菜单项的后面加省略号(...)提示该菜单会激活一个对话框。

对话框的坐标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)相关推荐

  1. matlab 对话框保持,如何在matlab中创建输入对话框?(How to create Input dialog box in matlab?)...

    如何在matlab中创建输入对话框?(How to create Input dialog box in matlab?) 我想在matlab中创建输入对话框. 我在MATLAB中执行简单的加法运算. ...

  2. java modal_Java 源码-模态对话框(Modal Dialog Box)的实现

    所谓的模态对话框,即弹出后用户只能与对话框交互,而不能与背景页面交互的对话框. (modal specifies whether dialog blocks user input to other t ...

  3. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户 ...

  4. java实用教程——组件及事件处理——对话框(dialog)

    对话框: import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.awt.*; impo ...

  5. Color dialog box

    #include <windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK Pan ...

  6. COM:The Open Dialog Box

    如何使用com组件创建打开对话框 #include <windows.h>#include <shobjidl.h> int WINAPI wWinMain(HINSTANCE ...

  7. Android 对话框(Dialog)大全

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int) ...

  8. Android项目实战(三十二):圆角对话框Dialog

    原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...

  9. Android对话框dialog大全(代码直接可用)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

最新文章

  1. 第十课.简单文本分类
  2. Oracle Logminer 做数据恢复 说明示例
  3. 理解JSON对象:JSON.parse、 JSON.stringify
  4. oracle 动态sql列转行_oracle行转列(动态行转不定列)
  5. Nacos 快速开始
  6. zookeeper源码-分布式锁
  7. Mysql调试存储过程最简单的方法
  8. (一)区块链的共识算法:整体介绍 及 分叉 的通俗讲解
  9. c语言中文网qq,c语言写的qq连看辅助
  10. 卸载wps后安装office图标异常的问题
  11. React项目中提示caniuse-lite已过时,建议更新
  12. hellow windows
  13. 快速理解Raft之日志复制(肝了两千五百字)
  14. Css基本样式————链接
  15. 那些从来不用花呗的女孩
  16. linux应用开发大杂烩(你不一定都知道的细枝末节)
  17. [bzoj-4808]马 题解
  18. ModuleNotFoundError: No module named ‘locust.events‘,httprunner执行locust压测报错解决办法~
  19. 安大计算机学院的张燕平导师怎么样,安大两名硕士论文被曝高度抄袭两人同届同门同属于一个导师...
  20. 专访实在智能CEO孙林君:聚焦AI+RPA赛道,为全社会贡献100万个数字员工

热门文章

  1. 大厂程序员裸辞,全职接单一个月的感触!
  2. ​势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?
  3. 计算机组成原理乘法器实验报告,Booth乘法器实验报告
  4. 用go来搭建一个简单的图片上传网站
  5. 【Leetcode】对 矩 阵 螺 旋 输 出 java/c++
  6. 3dsMax记录---制作一套桌椅
  7. python发微信提醒天气冷了注意保暖_2019天气转冷注意保暖微信 2019天气冷注意保暖的句子(图文)...
  8. (转)世界上最美丽的英文
  9. 电子商务的 OKR(附案例)
  10. ggplot2画图教程之Pathway富集分析(气泡图)