2024年3月19日发(作者:)
cdxCDynamicWnd and derived classes
原作者:by Hans Bühler : codex design
使用评论 comment: 龚建伟
动态窗口包括对话框、表格视等等,为了忠于原作者,将英文也附上了,本人在做串口调试助手过
程中,有些使用的网友反映说有时窗口太小,看数据不方便,于是便找到了这个类,并在网页上得到了其
最新的版本,感觉很好,大家需要做动态界面时,不妨用用。这里仅给出了如何使用这个类做对话框,其
它功能大家试试,有好作品别忘了给我寄一份。
首先下载类的源程序:下载 (269网罗软件提供链接,包括我做的示例程序) 国外下载
好了,先跟着做一个简单的动态对话框吧,本人是编程菜鸟,总想着人家也不懂,就从最基本做起:
1. 新建项目:在VC6中用MFC新建一个基于对话框的Test项目,并在对话框中加入控件如图1所示,别
忘了在Properties中把对话框styles->border的
resizable
选上,你也可以把Maximize Box选上,等会
验证是不是可以放大到全屏;
2.在项目中插入文件:把所有cdx*.cpp和cdx*.h文件copy 到项目文件夹下(多了无所谓),Project->Add
to Project->Files中选上cdx*.cpp、cdx*.h和,sizeCBar.h, Insert; 怎么样,在
ClassView中看到了这些类吧。 (
,和它们的头文件,
共18个文件全部加入);
3.改变基类:在对话框头文件TestDlg.h中加入 #include "cdxCDynamicDialog.h"; 在对话框实现文
件中把"CDialog" 替换成 "cdxCDynamicDialog",注意不要把About对话框的基类CDialog
替换了;
现在你可以试着运行程序,呵,对话框可以改变大小了!但其中控件不行吧,别急,
接着来改变对话框中控件的大小;
4.控制控件动态变化方法 对话框中每一个控件(包括静态文本)都必须有一个独立的ID,要注意的是静
态文本的ID不能全是IDC_STATIC,可有将它们改变为IDC_STATIC1、IDC_STATIC2等。有两种方法可以
使控件动态移动,本人推荐第一种,因为这种方法不用为每一个控件设置控制变量(若控件多,这是一件
相当麻烦的事,如我做的串口调试助手)
在我做的示例程序Test中,除编辑控件用了第二种方法,其余控件均用第一种方法
方法一:用
DYNAMIC_MAP_ENTRY
函数
在对话框头文件TestDlg.h : CTestDlg类定义中加入 DECLARE_DYNAMIC_MAP() 一行;再在实现
文件中加入:
BEGIN_DYNAMIC_MAP(CTestDlg,cdxCDynamicDialog)
DYNAMIC_MAP_ENTRY(IDOK, mdRepos, mdRepos)
DYNAMIC_MAP_ENTRY(IDCANCEL, mdNone, mdRepos)
DYNAMIC_MAP_ENTRY(IDC_STATIC0, mdNone, mdRepos)
DYNAMIC_MAP_ENTRY(IDC_STATIC1, mdNone, mdRepos)
DYNAMIC_MAP_ENTRY(IDC_STATIC2, mdRepos, mdRepos)
DYNAMIC_MAP_ENTRY(IDC_STATIC3, mdRepos, mdRepos)
DYNAMIC_MAP_ENTRY(IDC_STATIC4, mdRepos, mdRepos)
END_DYNAMIC_MAP()
参数含义:
DYNAMIC_MAP_ENTRY(IDC_STATIC2, mdX, mdY) 其中:mdX控制X
方向,mdY控制Y方向
- mdNone (保持不变)
- mdRepos (重新定位:move to left)
- mdResize (按对话框大小相应改变大小 resize)
- mdRelative (保持相应位置,如保持在中间如果变化前其位置在中间的话)
方法二:
AddSzControl(Hwnd, Mode mdX, Mode mdY);
Hwnd为控件的DDX控制变量,利用ClassWizard添加,在示例程序Test中,我为IDC_EDIT1添
加了m_ctrlEdit1控制变量,然后在对话框初始化函数OnInitDialog()中添加:
用AddSzControl(m_ctrlEdit1,mdResize,mdResize);
5.好了,做好了,你也可以试试了。这个类还可以做出其它界面来,看看类作者提供的示例程序就知道了。
documentation
1 | Preface, Definition
Definiton:
A
dynamic
window is a window that automatically repositions its child controls when its size
changes.


发布评论