CFormView动态调整对话框的尺寸和调整比例控制的部署
基于单个文件CFormView动态调整对话框的尺寸和调整比例控制的部署
假设你正在开发一个程序基于单个文件,使用CFormView基类来实现多种形式展示,那么,这个文件可能会给你一点帮助。
一、实现对话框填充客户区
当我们加入了资源对话框时,它的尺寸在客户区显示时是不会随着窗体的大小调整的。当框架尺寸小于它的尺寸时,还出现了滚动栏。操作麻烦同一时候视觉效果也不良好。
思路
依据客户区的大小调整资源对话框的大小,而客户区大小由父级的框架进行设定。
步骤
1、 依据屏幕分辨率设定框架的尺寸
请注意,我们不能将在InitInstance中ShowWindow參数SW_SHOW 直接改为SW_SHOWMAXIMIZED。尽管窗体是最大化了可是我们的在CFormView中使用GetClientRect能够看到客户区的尺寸仍然是原来的大小。
假设在PreCreateWindow或者OnCreate函数中设定框架的尺寸时,发现并没有起到作用。
正确的方法是在MainFrame中重载OnGetMinMaxInfo,并依据屏幕分辨率设定窗体的尺寸。
//根据屏幕分辨率设置框架大小
voidCMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
// TODO: 在此加入消息处理程序代码和/或调用默认值
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
lpMMI->ptMinTrackSize.x= cx;
lpMMI->ptMaxTrackSize.x = cx;
lpMMI->ptMaxTrackSize.y = cy;
lpMMI->ptMinTrackSize.y = cy;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
并在PreCreateWindow中设定窗体的初始坐标。
cs.x= 0;cs.y = 0;
2、 依据客户区尺寸设定对话框的尺寸
在View中的OnInitialUpdate函数进行操作。这是View第一个运行的函数。
CRect rect;
GetClientRect(&rect);
MoveWindow(&rect);
3、依据对话框大小动态调整控件的大小和位置
使用了网上获得一个方法,并进行了改动详细例如以下。视类中加入成员变量和成员函数:
voidSetControlInfo(WORD CtrlID);
protected:
intm_old_cx,m_old_cy;
CDWordArraym_control_info;
在OnInitialUpdate初始化:
CSizesz = GetTotalSize();
m_old_cx= sz.cx;
m_old_cy=sz.cy;
加控件信息的函数定义:
voidCTestFormView::SetControlInfo(WORD CtrlID){
m_control_info.Add(CtrlID);
}
加入OnMySize函数
voidCTestFormView:: OnMySize (UINT nType,int cx,int cy){
if(cx==0 || cy ==0){
cx =800;
cy = 600;
}
floatdx_percent = (m_old_cx==0)?1:(float)((float)cx/(float)m_old_cx);
floatdy_percent = (m_old_cy==0)?1:(float)((float)cy/(float)m_old_cy);
if(m_old_cx){
CRect WndRect;
CWnd * pWnd;
for(inti=0;i<m_control_info.GetSize();i++){
pWnd = GetDlgItem(m_control_info[i]);
if(!pWnd){
TRACE(_T("Control ID-%dNot"),m_control_info[i]);
continue;
}
pWnd->GetWindowRect(&WndRect);
ScreenToClient(&WndRect);
WndRect.left= (int)(WndRect.left*dx_percent );
WndRect.right= (int)(WndRect.right*dx_percent );
WndRect.top= (int)(WndRect.top*dy_percent );
WndRect.bottom= (int)(WndRect.bottom*dy_percent );
pWnd->MoveWindow(&WndRect);
}
}
m_old_cx= cx;
m_old_cy= cy;
}
在OnInitialUpdate函数中增加控件ID
SetControlInfo(IDC_BUTTON1);
……
请大家注意了,这里须要获得对话框的初始尺寸就是我们在资源对话框中拉出的对话框的大小。才干知道缩放的比例。
获得初始尺寸使用的CScrollView中的函号码GetTotalSize可得到。
版权声明:本文博主原创文章,博客,未经同意不得转载。
CFormView动态调整对话框的尺寸和调整比例控制的部署的更多相关文章
- 动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)
// 动态修改对话框属性,去掉对话框标题栏,设置Border为NONE属性. if(dlg.GetSafeHwnd()) { dlg.ModifyStyle(WS_CAPTION, 0); // 去掉 ...
- paip.输入法编程---智能动态上屏码儿长调整--.txt
paip.输入法编程---智能动态上屏码儿长调整--.txt 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...
- Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法
详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法.该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活.适用于多个开发项目共享有界面的公用程序模 ...
- #调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著,但并不是越多越好),加上verbose=True,显示进程使用信息
#调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著) from sklearn import datasets X, y = datasets.make_c ...
- #调整随机森林的参数(调整max_features,结果未见明显差异)
#调整随机森林的参数(调整max_features,结果未见明显差异) from sklearn import datasets X, y = datasets.make_classification ...
- 调整图像的尺寸 - cvResize() 函数实现
前言 有时会碰到一张图片太大了,想将它缩小.本文将讲解一个很好用的函数解决这个问题. 图像尺寸调整函数 cvResize() // 图像尺寸调整函数 void Resize ( const CvArr ...
- png图片尺寸大小调整
Android 开发中经常遇到各种hdpi,xhdpi,xxhdpi....很多尺寸大小的png图片要求. 网上也有不少工具,今天我又发现一款在线转换大小的网站,用了一下,一个png 114X114 ...
- 【VS开发】MFC动态设置对话框属性 弹出或嵌入
参考: MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个"Border"项,改变该项的值就可以改变窗口边框风格.实际上w ...
- MFC动态创建对话框中的按钮控件并创建其响应消息
转自:http://www.cnblogs.com/huhu0013/p/4626686.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 1 ...
随机推荐
- hdu2295(重复覆盖+二分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2295 题意::一个国家有n个城市,有m个地方可以建造雷达,最多可以建K个雷达(K>=1 & ...
- ubuntu下使用自带的openJDK查看java源码
如题 Ubuntu自带的OpenJDK仅仅有jre环境,不提供源代码,所以我们还是须要去下载. JDK6:http://download.java.net/openjdk/jdk6/ JDK7:htt ...
- Knockout应用开发指南 第三章:绑定语法(1)
原文:Knockout应用开发指南 第三章:绑定语法(1) 第三章所有代码都需要启用KO的ko.applyBindings(viewModel);功能,才能使代码生效,为了节约篇幅,所有例子均省略了此 ...
- /etc/sysconfig/network-scripts/ifcfg-eth0
以下各值常见于所有的基本配置文件中:* DEVICE=name,这里name是物理设备的名字(动态分配的PPP设备应当除外,它的名字是“逻辑名”.* IPADDR=addr, 这里addr是IP地址. ...
- 字符串拼接 拆分 NameValueCollection qscoll = HttpUtility.ParseQueryString(result)
string result = "sms&stat=100&message=发送成功"; string d = HttpUtility.ParseQueryStri ...
- 虚拟化技术学习(一)在VMware虚拟机中安装KVM
近期一直研究虚拟化技术,曾经对VMware虚拟机有一定的了解,近期突发奇想,能不能在VMware虚拟机中再装一个虚拟机呢? 那么问题就来了,首先,你须要一台电脑,vmware软件,(本人的电脑配置渣渣 ...
- Linux虚拟文件系统VFS解决
参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...
- Coder的利器
Coder的利器记载 工作近三年,使用PC快六年,拥抱Mac整一年,投具器石榴裙三年.14年第一次被同事推荐Everything,开启了JeffJade对工具的折腾之旅,并乐此不疲.时去两年,这必然是 ...
- jQuery回到顶部插件jQuery GoUp
插件描写叙述 jQuery GoUp!是一个简单的jQuery插件,让你的网页用户直接回到顶部. 用法很easy 引用jquery库和jquery.goup.min.js到你的页面 <scrip ...
- 深入理解计算机系统之旅(四)处理器(CPU)的体系结构
1.前言 处理器是很复杂的系统,它不是一蹴而就的,它是经过不断的升级.更新.设计之后的产物,而且如今还在保持着不断的更新. 处理器仅仅能运行一系列的指令,每条指令都仅仅是运行某个简单的操作,比方数字相 ...