当前位置: 首页 > news >正文

2408wtl,01用wtl的内置调整对话框类

原文

使用CDialogResize

底层

与许多其他WTL函数一样,首先在对话框类继承列表中添加CDialogResize.

class CMainDlg : public CAxDialogImpl<CMainDlg>,public CDialogResize<CMainDlg>

atlframe.h中声明CDialogResize.
下一步是在对话框的OnInitDialog处理器中,初化CDialogResize代码:

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{//初化`CDialogResize`代码DlgResize_Init();
...
}

DlgResize_Init()有一些可选参数.

接着,在对话框的消息映射中,给CDialogResize添加一个传递大小消息的项:

BEGIN_MSG_MAP(CMainDlg)MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)...CHAIN_MSG_MAP(CDialogResize<CMainDlg>)//..
END_MSG_MAP()

最后,给对话框类添加一个列举对话框调整哪些控件新映射:

class CMainDlg : public CAxDialogImpl<CMainDlg>, public CDialogResize<CMainDlg>
{
...
public:BEGIN_DLGRESIZE_MAP(CMainDlg)END_DLGRESIZE_MAP()
...
};

初化CDialogResize

调用DlgResize_Init()来初化CDialogResize.原型是:

void CDialogResize::DlgResize_Init (bool bAddGripper = true,bool bUseMinTrackSize = true,DWORD dwForceStyle = WS_THICKFRAME | WS_CLIPCHILDREN );

参数:
1,bAddGripper:这控制CDialogResize是否在对话框右下角添加大小框.则添加大小框,,则不添加它.
2,bUseMinTrackSize:此参数控制CDialogResize是否限制对话框的最小大小.如果为,则禁止对话框的大小小于在资源文件中存储的其初始大小.如果你不想限制对话框的最小大小,请传递.
3,dwForceStyle:指定要应用给对话框的窗口风格.默认值一般就足够了.

设置调整映射

对话框调整映射指示CDialogResize移动或调整哪些控件的大小.项如下:

DLGRESIZE_CONTROL(ControlID, Flags)

ControlID对话框控件ID.可能标志及其含义是:
1,DLSZ_SIZE_X:在水平调整对话框时调整控件的宽度.
2,DLSZ_SIZE_Y:在垂直调整对话框时调整控件的高度.
3,DLSZ_MOVE_X:当水平调整对话框时,水平移动控件.
4,DLSZ_MOVE_Y:当垂直调整对话框时,垂直移动控件.
5,DLSZ_REPAINT:在每次移动/调整后使控件失效,这样每次都重画.

注意,不能在相同维度中,移动控件并调整其大小.如果同时指定,如DLSZ_MOVE_XDLSZ_SIZE_X,则会忽略大小标志.

还可组合控件在一起,这样按比例移动和调整.

示例项目

根据以下规则来调整移动控件:
1,水平调整Location(位置)编辑框.
2,水平移动Go,ExitAbout按钮.
3,在一组中水平调整Back(后退),Forward(前进),Stop(停止)和Refresh(刷新)按钮.
4,水平和垂直调整浏览器控件.

浏览器的OnInitDialog()函数如下初化CDialogResize:

LRESULT OnInitDialog(UINT /*`uMsg`*/, WPARAM /*`wParam`*/, LPARAM /*l参数*/, BOOL& /*b已处理*/)
{//初化`CDialogResize`代码DlgResize_Init();...
}

这使用导致添加大小框DlgResize_Init()默认参数.此外,对话框的大小不能小于其初始大小.

下面是列举控件移动和调整行为的调整映射.注意新的BEGIN_DLGRESIZE_GROUP()END_DLGRESIZE_GROUP()宏,现在一个大小调整组中放入四个浏览器控件按钮.

BEGIN_DLGRESIZE_MAP(CMainDlg)//位置编辑框DLGRESIZE_CONTROL(IDC_URL, DLSZ_SIZE_X)//"开始","退出",""按钮DLGRESIZE_CONTROL(IDC_GO, DLSZ_MOVE_X)DLGRESIZE_CONTROL(IDC_EXIT, DLSZ_MOVE_X)DLGRESIZE_CONTROL(ID_APP_ABOUT, DLSZ_MOVE_X)//`IE`控件按钮BEGIN_DLGRESIZE_GROUP()DLGRESIZE_CONTROL(IDC_BACK, DLSZ_SIZE_X)DLGRESIZE_CONTROL(IDC_FORWARD, DLSZ_SIZE_X)DLGRESIZE_CONTROL(IDC_STOP, DLSZ_SIZE_X)DLGRESIZE_CONTROL(IDC_REFRESH, DLSZ_SIZE_X)END_DLGRESIZE_GROUP()//`WebBrowser`控件DLGRESIZE_CONTROL(IDC_BROWSER, DLSZ_SIZE_X|DLSZ_SIZE_Y)
END_DLGRESIZE_MAP()

注意,编辑框更宽,浏览器控件更宽,更高.

如果要移动而不是调整按钮,它们的位置分布总是均匀.注意,组中的所有控件都应有相同DLSZ_*标志.

CDialogResize的问题

这样初化CMainDlg对象:

int nRet;{CMainDlg dlgMain;nRet = dlgMain.DoModal();}

http://www.mrgr.cn/news/6959.html

相关文章:

  • Android开发语言Kotlin简介
  • 微服务Dubbo扩展点如何做
  • 一文彻底理解大模型 Agent 智能体原理和案例
  • 测试用例的设计
  • 无需多部备用机,云手机方便又便宜!
  • docker-harbor 仓库上传下载镜像以及仓库之间的镜像复制
  • 机器学习术语
  • 济南网站制作方案定制
  • 云计算day28
  • 2024升级zblog小程序开源源码/基于uniapp开发的(支持微信小程序、百度小程序、安卓APP)
  • EmguCV学习笔记 VB.Net 5.3 透视变换
  • ZCC5429 异步升压芯片
  • 数据库进阶 - ACID事务属性的实现机制详解
  • microsoft edge怎么关闭安全搜索
  • TF SD卡突然容量变小或者名字改变并且电脑就算格式化也恢复不了原状态或者干脆windows系统都格式化失败的解决办法
  • runc did not terminate successfully: exit status 127: unknown
  • linux 系统备份与恢复方法及解决方案
  • CSS 样式穿透
  • 软件设计之MySQL(6)
  • HTML DOM 对象