创建不能改变大小的对话框
来源:互联网 发布:移动网络玩dnf组队卡 编辑:程序博客网 时间:2024/05/18 18:54
原文:http://blog.csdn.net/shining100/article/details/5383670
在我们开发的过程中,需要实现大量的弹出式对话框。其中有一些对话框由于在响应WM_SIZE消息时没有移动相应控件的位置,导致了在改变对话框的大小后,对话框中的控件并不会随着窗体大小的改变而移动位置。解决这个问题有两个方法:一是在WM_SIZE消息中添加相应的处理代码,使控件随着窗口大小的改变而移动其位置和调整其大小。二就是创建不能改变大小的对话框。至于选择哪一种方法则要根据具体的要求而定,个人认为程序的主对话框需要使用方法一,而程序的一些提供给用户输入的弹出对话框,我认为使用第二种方法更加的方便。下面让我们来看看第二种方法的实现方法。
对话框的外观是由窗体样式(Windows Styles)决定的,通过定义窗体样式,我们可以指定对话框中是否有标题栏、是否有滚动条以及是否可以改变对话框的大小等。窗体样式是一个32位的字段值,我们可以通过标志组合的方法,来定义自己的窗体样式。比如你组合下列标志: WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXMIZEBOX,就可以创建一个带有标题栏、系统目录、最小化按钮以及最大化按钮的可以改变大小的对话框。所以,如果你想创建一个不能改变大小的对话框,只需要将WS_THICKFRAME和WS_MAXMIZEBOX标志去除即可。
明白了创建不能改变大小对话框的原理后,下面让我们再来看看用什么方法可以创建一个不能改变大小的对话框。方法一是通过使用资源编辑器,讲对话框的Border属性设置为Dialog Frame,然后将Maxmize Box属性设为False,这也是资源编辑器在插入一个对话框时候的默认设置。该方法最为简单,但是该方法无法实现在程序中动态改变对话框的大小。方法二是使用GetWindowLong函数和SetWindowLong函数,我们使用GetWindowLong函数获取对话框所有的窗口样式,然后通过位操作去掉WS_THICKFRAME和WS_MAXMIZEBOX标志位,最后再通过SetWindowLong函数设置新的窗口样式到原来的窗口上即可。应该注意的是我们应该在窗口初始化的时候执行上述操作,即我们应该将代码添加到处理WM_INITDIALOG消息的对话框过程中。如果使用WIN32式的经典编程方法,则代码如下所示。
- BOOL CALLBACK DlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- DWORD dwStyle;
- dwStyle = GetWindowLong(m_hWnd, GWL_STYLE);
- dwStyle &= ~WS_THICKFRAME;
- dwStyle &= ~WS_MAXMIZEBOX
- ::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
- return TRUE;
- }
- return FALSE;
- }
如果使用的是MFC的话,则可以将代码添加到OnInitDialog函数中,代码如下所示。
- BOOL CXXDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
- DWORD dwStyle;
- dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
- dwStyle &= ~WS_THICKFRAME;
- dwStyle &= ~WS_MAXSIZEBOX;
- ::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
- return TRUE;
- }
方法三就是使用MFC中的CWnd类中的ModifyStyle函数,代码如下所示。
- BOOL CXXDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
- ModifyStyle(WS_THICKFRAME, 0);
- ModifyStyle(WS_MAXSIZEBOX, 0);
- return TRUE;
- }
在VS2010中对话框默认border 值是:Resizing 我们把它改为:Dialog Frame 就可以了
- 创建不能改变大小的对话框
- 创建不能改变大小的对话框
- VC对话框运行后不能改变大小的问题
- 编写可托拽改变大小的对话框
- 动态改变对话框中控件的大小
- 禁止改变对话框大小
- WTL改变对话框大小
- 对话框控件随界面大小的改变而改变
- MFC 控件随着对话框大小的改变而改变
- 不能任意改变它的大小
- 三种随着对话框的大小更新改变控件大小
- 对话框上的控件的大小和位置随着对话框的大小的改变而变化
- 第二章 创建对话框 2.4改变形状的对话框
- 如何让对话框中的控件随着对话框大小的改变而随之改变
- 对话框可以拖动改变大小
- 无边框对话框改变大小
- 无边框对话框改变大小
- 鼠标拖动对话框改变大小
- android Activity android:launchMode="singleInstance" 与 startActivityForResult
- kthread内核线程
- while 指针 字符串
- C++定义不能被继承的类
- 本人新书 windows 8权威指南 希望大家喜欢和支持
- 创建不能改变大小的对话框
- Android开发环境搭建(jdk+eclip+android sdk)
- Office 2010安装错误 1042 无法打开注册表项
- 指针 数组
- Java基础_标识符
- 宝钢集团通知全体员工卸载360软件
- ReadBmpArray
- 通过遥控器控制步进电机 步进电机接P1口,遥控器接P3口,拔掉P3口跳线
- compiler limit : internal heap limit reached; use /Zm to specify a higher limit