遗留MFC工程上调整对话框大小

2024-09-04 22:18

本文主要是介绍遗留MFC工程上调整对话框大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在遗留MFC工程上,调整对话框对象,以达到隐藏不关注的那些控件。

诉求:一个老的工程上,现在只需要其中很小一部分功能,想偷懒,不需要全部重写,不想大规模改写。比如如果直接去删除对话框上的一些控件,那么这些控件映射的成员变量、消息处理,都需要考虑。

偷懒的做法:把不需要的控件全部给扔到对话框的下面,要用到的部分布局到对话框的左上角。在对话框初始化的时候调整窗口大小,隐藏掉那些用不到的控件。

示例:

原来的样子如下,现在只需要保留上面3个控件(2个编辑框加一个文本框)。

before

即希望的样子:

after

对话框资源:

IDD_CHANGEWINDOWSIZE_DIALOG DIALOGEX 0, 0, 222, 153
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "ChangeWindowSize"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGINGROUPBOX        "All Controls",IDC_GROUP,14,7,192,139PUSHBUTTON      "First",IDC_FIRST,26,20,77,20,WS_DISABLEDPUSHBUTTON      "Second",IDC_SECOND,117,20,77,20EDITTEXT        IDC_THIRD,26,52,168,20,ES_AUTOHSCROLLPUSHBUTTON      "Fourth",IDC_FOURTH,26,85,77,20,WS_DISABLEDPUSHBUTTON      "Fifth",IDC_FIFTH,118,85,77,20,WS_DISABLEDEDITTEXT        IDC_SOME_OTHERS,25,112,168,20,ES_AUTOHSCROLL | WS_DISABLED
END

在隐藏下半部分的时候,需要注意Group控件的显示效果,即要完整地显示这个group,而不是显示一个残缺的样子:

Error

思路:

  • 先确定要显示的编辑框的bottom坐标
  • 基于此,调整Group控件的bottom坐标
  • 调整对话框的bottom坐标

代码:

void CChangeWindowSizeDlg::ChangeWindowSize()
{CRect rect;GetDlgItem(IDC_THIRD)->GetWindowRect(&rect);int bottom = rect.bottom;GetDlgItem(IDC_GROUP)->GetWindowRect(&rect);rect.bottom = bottom + 10;ScreenToClient(&rect);GetDlgItem(IDC_GROUP)->MoveWindow(&rect);GetClientRect(&rect);rect.bottom = bottom + 20;MoveWindow(&rect);
}

在OnInitDialog()中调用这个函数。

还需要主要的是:对话框的Border不能是Resizing属性,否则用户通过调整对话框的大小,就可以看到下面本该隐藏的部分。

Border

这篇关于遗留MFC工程上调整对话框大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137182

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

控制台和MFC中内存泄露工具vld的使用

最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。    vld资源:    1)、大家可以移步下边的网址下载:     http://vld.codeplex.com/releases/view/82311    2

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

Linux下获取硬盘空间的大小

1. df 命令查看所有硬盘设备的信息 2. 查看指定路径的磁盘空间大小 代码获取空间大小案例:

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一