资源——对话框(Dialog Box)

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

对话框的坐标X轴以对话框所用字体宽度的1/4为单位,Y轴以字体高度的1/8为单位。

对话框处理过程与窗口处理过程很相似,但也有一些不同,对话框过程不是窗口过程。一般在对话框处理过程中,我们只需要处理子窗口控件的初始化、子窗口控件消息和结束对话框。下面是一个对话框过程: 可以看出,虽然它与窗口过程参数相同,但返回值为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一样,但直接返回窗口句柄,一般句柄保存为全局变量。

非模态对话框的消息经由消息队列发到程序,所以非模态对话框要从消息队列中获取自己的消息,可以按下面方法修改消息循环 IsDialogMessage把消息发给对话框,如果对话框处理则返回TRUE,不处理返回FALSE。

关闭非模态对话框用DestroyWindow而不是EndDialog。虽然非模态对话框默认有关闭按钮,但并不处理WM_CLOSE消息,用户必须添加处理过程: 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结构体变量。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值