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.