基于单个文件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. poj1849(求树的直径)

    题目链接:http://poj.org/problem?id=1849 题意:有一颗n个结点的带权的无向树, 在s结点放两个机器人, 这两个机器人会把树的每条边都走一遍, 但是最后机器人不要求回到出发 ...

  2. linux网络编程学习笔记之三 -----多进程并发服务端

    首先是fork()函数.移步APUE 8.3.  比較清晰的解释能够參考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://w ...

  3. CSS背景图拉伸自适应尺寸

    .bg{ background:url(images/test.jpg); filter:"progid:DXImageTransform.Microsoft.AlphaImageLoade ...

  4. 数据库采用多表连接查询,对应javaBean文件连接方式

    在一个Web项目中,只要是存在数据库就一定会有JavaBean文件.一个JavaBean文件会对应一张数据库中的表,供dao中的代码来调用用来存取数据.我们都知道,在数据库设计的时候,如果A.B两张表 ...

  5. Linux系统部署规范v1.0

    Linux系统部署规范v1.0 目的: 1.尽可能减少线上操作: 2.尽可能实现自动化部署: 3.尽可能减少安装服务和启动的服务: 4.尽可能使用安全协议提供服务: 5.尽可能让业务系统单一: 6.尽 ...

  6. 用python调用R做数据分析-准备工作

    0.R的介绍 R是自由软件,不带不论什么担保.在某些条件下你能够将其自由散布,用'license()'或'licence()'来看散布的具体条件. R是个合作计划.有很多人为之做出了贡献,用'cont ...

  7. C++出现计算机术语5

    class template(类模板) 可以用来定义一个类定义了一组特定类型的类的.类模板template keyword其次是尖括号(<>)附上.的列表来定义. export keywo ...

  8. MVC 学习 区域

    http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2209438.html

  9. Windows Phone开发(4):框架和页

    原文:Windows Phone开发(4):框架和页 在开如之前,我想更正一个小问题,之前我在第一篇文章中说,Visual Studio Express for Windows Phone的中文版没有 ...

  10. Android使得手机拍照功能的发展(源共享)

    Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...