基于单个文件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. Selenium之利用Excel实现参数化

    Selenium之利用Excel实现参数化 说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本 ...

  2. poj2486(树形dp)

    题目链接:http://poj.org/problem?id=2486 题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走m步,最多能遍历到的权值. 分析:非常不错的树形d ...

  3. 使用GraceNote Web API发展Mac发现音乐信息的应用

    好久没有写博客,最近各种忙,特别忙里忙,今晚难得清闲.写最近完成下一个博客任务的摘要:使用GraceNote的Web API开发一个查询的音乐信息的应用,事实上,并在这些功能的前GraceNote S ...

  4. c++ 对象指针参数和对象引用参数02

    对象指针作为函数参数和对象引用作为函数参数都比对象作为函数参数要用的更为普遍 传对象指针和传对象引用作为实参,那么实参在函数里发生了变话,那么相应的对象本身也会发生变化,二传递对象本身作为实参的话,实 ...

  5. MFC控件(15):Tooltip

    在各种软件产品中我们经常碰到把鼠标放到一个控件上时会弹出关于该控件的一些提示信息.这就是tooltip. 在MFC中使用该功能可以使用类CToolTipCtrl.假如要让鼠标放到按钮IDC_BTN上时 ...

  6. 【Android】-- adb shell 命令探索

    ADB是什么,做android开发的没有不知道的. window下执行cmd,输入adb help就会打印adb都可以做的事情,包含 adb push ..adb pull .. adb device ...

  7. python之字符串的分割和拼接

    关于string的split 和 join 方法 对导入os模块进行os.path.splie()/os.path.join() 貌似是处理机制不一样,但是功能上一样. 1.string.split( ...

  8. eclipse 重构(转)

    Eclipse中的重构类型        如果你看一下Eclipse的重构菜单,可以看到四部分.第一部分是撤销和重做.其他的三部分包含Eclipse提供的三种类型的重构. 第一种类型的重构改变代码的物 ...

  9. Andriod开发之浏览器开发(WebView)

    1.创建一个WebView在XML文件 <WebView android:id="@+id/webView" android:layout_width="match ...

  10. Swift难点-继承中的构造规则实例具体解释

    关于继承中的构造规则是一个难点. 假设有问题,请留言问我. 我的Swift新手教程专栏 http://blog.csdn.net/column/details/swfitexperience.html ...