基于单个文件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动态调整对话框的尺寸和调整比例控制的部署的更多相关文章

  1. 动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)

    // 动态修改对话框属性,去掉对话框标题栏,设置Border为NONE属性. if(dlg.GetSafeHwnd()) { dlg.ModifyStyle(WS_CAPTION, 0); // 去掉 ...

  2. paip.输入法编程---智能动态上屏码儿长调整--.txt

    paip.输入法编程---智能动态上屏码儿长调整--.txt 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...

  3. Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法

    详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法.该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活.适用于多个开发项目共享有界面的公用程序模 ...

  4. #调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著,但并不是越多越好),加上verbose=True,显示进程使用信息

    #调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著) from sklearn import datasets X, y = datasets.make_c ...

  5. #调整随机森林的参数(调整max_features,结果未见明显差异)

    #调整随机森林的参数(调整max_features,结果未见明显差异) from sklearn import datasets X, y = datasets.make_classification ...

  6. 调整图像的尺寸 - cvResize() 函数实现

    前言 有时会碰到一张图片太大了,想将它缩小.本文将讲解一个很好用的函数解决这个问题. 图像尺寸调整函数 cvResize() // 图像尺寸调整函数 void Resize ( const CvArr ...

  7. png图片尺寸大小调整

    Android 开发中经常遇到各种hdpi,xhdpi,xxhdpi....很多尺寸大小的png图片要求. 网上也有不少工具,今天我又发现一款在线转换大小的网站,用了一下,一个png 114X114 ...

  8. 【VS开发】MFC动态设置对话框属性 弹出或嵌入

    参考: MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个"Border"项,改变该项的值就可以改变窗口边框风格.实际上w ...

  9. MFC动态创建对话框中的按钮控件并创建其响应消息

    转自:http://www.cnblogs.com/huhu0013/p/4626686.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 1 ...

随机推荐

  1. ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2

    分析从库1062问题,解析从库binlog日志,报错如下 [root@xxxdb0402 tmp]# mysqlbinlog mysql-bin.004271 > 4.log ERROR: Er ...

  2. 如何用C#使用java

    如何使用C#调用Java 今天需要使用C#调用Java的包,研究了一下,大体是以下几种解决方案: 把Java包转换为DLL或者EXE后注册为com组件,之后调用. 使用web service 比如:H ...

  3. Extjs4.0.7 实现Grid的嵌套

    网上相关资料非常少,我看过的大多是Extjs 3.0 急以前版本的解决方案. 比如:http://mikhailstadnik.com/ext/examples/nested-grid.htm  (E ...

  4. Tier和Layer

    在实际开发工作中.我们经常听到"架构设计"和"架构师"这种名词,它并不新奇和神奇,可是却非常少有人对"架构"有全面的了解和认识.更谈不上掌握 ...

  5. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    在使用Hibernate的J2EE项目中,莫名其妙出现如上错误,既不报错,也不运行不论什么输出測试代码,更不返回结果. 经过排查,在方法里面引用的实体类和其映射文件属性个数不一致. 改动一致后,即解决 ...

  6. HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博

    HttpClient4,最原始的需求就是使用其来模拟浏览器想服务器发起http请求,当然,他的功能不止于此,但是我需要的就是这个功能而已,jdk也有其自带的类似的api:UrlConnection,效 ...

  7. CentOS7 编译安装LNMP

    (文章来自:http://www.cnblogs.com/i-it/p/3841840.html,请各位到这个网址去看原文的) LNMP(Linux-Nginx-Mysql-PHP),本文在CentO ...

  8. TextBox自定义Mac输入框类

    using System.Windows.Controls; namespace test { public class MacTextBox : TextBox { private string _ ...

  9. KSImageNamed-Xcode

    KSImageNamed-Xcode   非常的给力的XCODE图片浏览插件; What is this? Can't remember whether that image you just add ...

  10. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...