Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1186250
  • 博文数量: 181
  • 博客积分: 6155
  • 博客等级: 准将
  • 技术积分: 1805
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 09:24
文章分类

全部博文(181)

文章存档

2015年(2)

2014年(3)

2013年(9)

2012年(29)

2011年(30)

2010年(36)

2009年(40)

2008年(32)

分类: C/C++

2012-07-27 16:36:08

谨慎对待对话框模板

 

对话框模板是写在 rc 文件中的用于描述 Windows 对话框的脚本,Visual Studio 提供了方便的对话框编辑器,我们也可以通过修改 rc 文件的脚本来改变对话框的大小、样式等。

今天直接修改 rc 代码,出现了一些奇怪的现象,写下来跟大家分享一下。

使用 Visual Studio 建立一个简单的对话框工程,对应对话框模板如下:

IDD_MYDIALOG_DIALOG DIALOGEX  0, 0, 320, 200

STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | WS_SYSMENU

EXSTYLE WS_EX_APPWINDOW

CAPTION "MyDialog"

FONT 8, "MS Shell Dlg"

BEGIN

    DEFPUSHBUTTON   "OK",IDOK,209,179,50,14

    PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14

    CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8

END

    我们关注对话框模板中的基本风格,此对话框模板的基本风格有DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | WS_SYSMENU,使用Visual Studio为对话框加入最大化、最小化风格,此时对话框模板中的基本风格变为DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,对比可以看到,除了 DSDialog Style)风格变化了之外,WSWindow Style)风格增加了 WS_MINIMIZEBOXWS_MAXIMIZEBOX两个,编译此工程,运行,对话框右上角有最小化、最大化、关闭按钮,在任务栏上右键菜单,可以看到对话框中有还原、移动、大小、最大化、最小化、关闭等项。我们使用 Visual Studio 去除最大化、最小化风格,重新编译,运行,对话框右上角只有关闭按钮了,在任务栏上右键菜单,可以看到对话框中只有移动、关闭等项了。工程至此,一切正常。我们继续往下看。

    由于新需求,我们要再次为对话框加入最大化、最小化风格,由于应急,某程序员在OnInitDialog函数中写下来如下代码:

ModifyStyle(0, WS_MINIMIZEBOX | WS_MAXIMIZEBOX);

       编译,运行,可以看到,对话框右上角再次出现了最大化、最小化按钮,似乎一切正常,我们点击最大化、最小化,发现功能根本不奏效,ModifyStyle 函数只是更改了对话框表现,并没有更改实际功能,要实现最终功能,还是要更改对话框模板。上述例子反过来同样奏效,使用 ModifyStyle 去除最大化、最小化风格后,在任务栏上右键点击,发现弹出的菜单中仍然会出现最大化、最小化选项,感兴趣的同学不妨试试。

在文章的最后,对于写 Windows 对话框,给出如下建议:

1、如果使用标准 Windows 对话框,最好不要手动更改对话框风格,建议使用Visual Studio直接修改 rc 文件,这样更方便更准确。

2、如果要写一个通用的对话框,建议为每种风格的对话框建立一个对话框模板,避免手动更改对话框风格。

 

阅读(1217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~