最近写MFC对话框项目需要控件自适应窗口的大小…,使用以前用过的方法经过多次测试发现对话框内的部件"每经过一次拉伸或收缩都会有一定比例的缩小(控件朝左上方向缩小)";
  为了解决这个问题,继续查看代码发现 控件移动后的位置与控件上一次位置的倍数用的float储存,但是用来修改控件位置的SetRect函数传入的POINT结构体成员参数是long类型(小数位被舍去) ; 针对这种情况我们通过计算就可以得到含有小数位的控件移动后的位置并且根据小数位的数字大小进行增加或者舍弃,下面贴上代码:

移动后的位置计算方式:

//如果float类型数据位置比long类型数据位置大0.5,使用long类型数据位置+1 得到最终数据
TLPoint.x = (pointTLPoint.x*fsp[0] - long(pointTLPoint.x*fsp[0])) > 0.5 ? long(pointTLPoint.x*fsp[0]) + 1 : long(pointTLPoint.x*fsp[0]);    TLPoint.y = (pointTLPoint.y*fsp[1] - long(pointTLPoint.y*fsp[1])) > 0.5 ? long(pointTLPoint.y*fsp[1]) + 1 : long(pointTLPoint.y*fsp[1]);    

.h文件定义:

//在消息中添加WM_SIZE 得到OnSize函数
afx_msg void OnSize(UINT nType, int cx, int cy);
//手动添加
void ReSize();
POINT point;

.cpp实现部分

//首先在初始化函数中得到初始对话框大小
BOOL TestMfcDlg::OnInitDialog()
{CRect rect;      GetClientRect(&rect);     //取客户区大小    point.x=rect.right-rect.left;  point.y=rect.bottom-rect.top;
}//ReSize()函数 实现部分
void TestMfcDlg::ReSize()
{float fsp[2];  POINT Newp;   CRect recta;      GetClientRect(&recta);        Newp.x=recta.right-recta.left;  Newp.y=recta.bottom-recta.top;  fsp[0]=(float)Newp.x/point.x;  fsp[1]=(float)Newp.y/point.y;  CRect Rect;  int woc;  POINT pointTLPoint,TLPoint; //左上角  POINT pointBRPoint,BRPoint; //右下角  HWND  hwndChild=::GetWindow(m_hWnd,GW_CHILD);  //列出所有控件    while(hwndChild)      {      woc=::GetDlgCtrlID(hwndChild);//取得ID  GetDlgItem(woc)->GetWindowRect(Rect);    ScreenToClient(Rect);    pointTLPoint = Rect.TopLeft();    TLPoint.x = (pointTLPoint.x*fsp[0] - long(pointTLPoint.x*fsp[0])) > 0.5 ? long(pointTLPoint.x*fsp[0]) + 1 : long(pointTLPoint.x*fsp[0]);    TLPoint.y = (pointTLPoint.y*fsp[1] - long(pointTLPoint.y*fsp[1])) > 0.5 ? long(pointTLPoint.y*fsp[1]) + 1 : long(pointTLPoint.y*fsp[1]);    pointBRPoint = Rect.BottomRight();    BRPoint.x = (pointBRPoint.x *fsp[0] - long(pointBRPoint.x *fsp[0])) > 0.5 ? long(pointBRPoint.x *fsp[0]) + 1 : long(pointBRPoint.x *fsp[0]);    BRPoint.y = (pointBRPoint.y *fsp[1] - long(pointBRPoint.y *fsp[1])) > 0.5 ? long(pointBRPoint.y *fsp[1]) + 1 : long(pointBRPoint.y *fsp[1]);    Rect.SetRect(TLPoint,BRPoint);GetDlgItem(woc)->MoveWindow(Rect,TRUE);  hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);    }point=Newp;
}//OnSize函数 实现部分
void CUDP_TestMfcDlg::OnSize(UINT nType, int cx, int cy)
{CDialog::OnSize(nType, cx, cy);ReSize();
}

MFC对话框自适应大小(四舍五入)高精度版本相关推荐

  1. VS2017 MFC对话框程序打印及打印预览的实现

    VS2017 MFC对话框程序打印及打印预览的实现 花了一个星期,研究了网上大量的MFC对话框打印及打印预览功能的demo之后,网上现有的版本都比较旧,所以选中了几个版本,合并修改,得到这个比较完美的 ...

  2. MFC对话框中的工具栏、状态栏设计小结

    对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...

  3. CEF:MFC 对话框 Demo(VS2013)

    原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...

  4. BCGControlBar MFC对话框换肤 续

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  5. 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)

    科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1.    打开V ...

  6. MFC对话框应用程序中谷歌CEF浏览器内核的使用

    MFC对话框应用程序中谷歌CEF浏览器内核的使用 最近在做一个与浏览器相关的MFC项目,用户要求使用IE和谷歌双内核.对于IE内核可以直接使用MFC中的ACTIVEX控件,但是对于谷歌浏览器内核却并没 ...

  7. soildworks模型导入MFC对话框

    最近项目需要把solidworks创建的设备模型导入MFC对话框中显示,并且能鼠标控制移动.缩放. 软件平台包括 solidworks 2008 .3DS-Max 7.0 . vs 2008 sp1; ...

  8. MFC 以图像大小打开并显示图像,鼠标左击显示像素坐标

    一.创建MFC对话框,类名CDialogDlg,添加按钮IDC_BUTTON1,OnBnClickedButton1()函数如下: CShow *dlg;dlg = new CShow;dlg-> ...

  9. MFC 对话框中的picture control 控件显示图片

    MFC读取图片一般使用自定义的DIB文件.DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作. DIB文件下载路径:DIB文件下载 MFC显示图片有几种方法: 1.在运行界面上选择 文件 ...

最新文章

  1. 开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”
  2. Xilinx® 7 series FPGAs CLBs专题介绍(一)
  3. 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型
  4. linux内核网络协议栈--数据包的接收过程(二十)
  5. ajax 加载partial view ,并且 附加validate验证
  6. Scala, Groovy, Clojure, Jython, JRuby and Java ----我们的工作语言
  7. 关于谨防诈骗的温馨提示
  8. 《avascript 高级程序设计(第三版)》 ---第三章 基本概念
  9. 40+大厂AI面经,秋招offer手到擒来!
  10. Hadoop YARN(入门) —— Hadoop权威指南5
  11. php在线生成logo,logo在线生成 php在线生成ico文件的代码
  12. matlab如何看历史,matlab创建有价值历史纪录.txt 源代码在线查看 - Matlab创建有价值历史纪录(完整版),matlab 常用的命令集锦。 资源下载 虫虫电子下载站...
  13. vim生成连续数字列
  14. 关于美国安利的真实情况 !!!!!
  15. 将对象的属性值复制到另一个对象中
  16. VVC帧内预测(一)
  17. Gremlin-常用查询语句用法
  18. /storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别
  19. 德语键盘在标准ASCII键盘上使用的小窍门/ 德语键盘英语输入法输出波浪线~
  20. Qt多功能计算器(四)——base64加密和解密

热门文章

  1. 用 Java 写一个植物大战僵尸简易版
  2. 一不小心就踩坑的fail-fast是个什么鬼?
  3. springboot2.0集成activiti modeler
  4. 自己动手 CentOS-6.5 安装Oracle11g R2
  5. 服务器部署多个tomcat方法
  6. 基于HiKariCP组件,分析连接池原理
  7. 结构与算法(02):队列和栈结构
  8. Redis命令——键(key)
  9. ANOI 2009 【同类分布】
  10. 在windows命令行中查询MySQL乱码