基于单个文件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. [Leetcode]-ReverseLinkedList

    题目:单链表取反 #include <stdlib.h> #include <stdio.h> typedef struct node *list; typedef struc ...

  2. Failed to load libGL.so问题解决

    Ubuntu 14.04下启动模拟设备Android 4.2.2的时候报错: failed to load libgl.so 先用locate 命令定位libGL库, 然后加入�一个链接就可以: de ...

  3. 为了找到自己的路——leo锦书62

    <Leo锦书(文章1编辑)>百度已经降落阅读,今后将继续更新.免费下载:http://t.cn/RvawZEx 柯克•卡梅隆是谁呢?在中国听过这名字的人预计不多.但看下封面我们马下就会说: ...

  4. javamail发送邮件(转)

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  5. Eclipse怎么显示行号,定位某行

    Eclipse怎么显示行号,定位某行 设置显示行号 1 快捷键:Ctrl+F10,点击'Show Line Numbers'即可. 如果取消显示行号,也可以按这个快捷键,然后再点击show line ...

  6. qt的资源替换搜索QDir具体解释

    QDir对跨平台的文件夹操作提供了非常多的便利,为了更加方便的提供全局资源的查找,QDir提供了搜索路径替换功能,攻克了资源搜索不便的问题,也能提高文件查找的效率. QDir通过已知的路径前缀去搜索并 ...

  7. Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成

    介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...

  8. Linux 安装之U盘引导

    说到装系统最简单的方法无非就是找个系统安装光盘来然后就一步一步慢慢的安装.简单是简单但好似大多数人好像都木有Linux的安装光盘. 因此仅仅能用U盘来模拟光盘的功能来装系统咯. 电脑上装有Window ...

  9. 宏碁宣布Liquid Jade智能机和Leap袖口

    据科技网站Android Community 4月29日覆盖,宏碁29公布的新智能机Liquid Jade而随着智能手镯部署Liquid Leap.尽管宏碁已经宣布了一项新的外部基本信息.但价格格和商 ...

  10. Ubuntu下用NdisWrapper安装网卡驱动

    下面是一个简单全面的使用NdisWrapper的指南.这是从Beginning Ubuntu Linux, Second Edition中提炼出来的. 这份指南是第8章的一部分.该章给出了在Ubunt ...