MFC对话框自适应大小(四舍五入)高精度版本
最近写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对话框自适应大小(四舍五入)高精度版本相关推荐
- VS2017 MFC对话框程序打印及打印预览的实现
VS2017 MFC对话框程序打印及打印预览的实现 花了一个星期,研究了网上大量的MFC对话框打印及打印预览功能的demo之后,网上现有的版本都比较旧,所以选中了几个版本,合并修改,得到这个比较完美的 ...
- MFC对话框中的工具栏、状态栏设计小结
对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...
- CEF:MFC 对话框 Demo(VS2013)
原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...
- BCGControlBar MFC对话框换肤 续
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...
- 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)
科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1. 打开V ...
- MFC对话框应用程序中谷歌CEF浏览器内核的使用
MFC对话框应用程序中谷歌CEF浏览器内核的使用 最近在做一个与浏览器相关的MFC项目,用户要求使用IE和谷歌双内核.对于IE内核可以直接使用MFC中的ACTIVEX控件,但是对于谷歌浏览器内核却并没 ...
- soildworks模型导入MFC对话框
最近项目需要把solidworks创建的设备模型导入MFC对话框中显示,并且能鼠标控制移动.缩放. 软件平台包括 solidworks 2008 .3DS-Max 7.0 . vs 2008 sp1; ...
- MFC 以图像大小打开并显示图像,鼠标左击显示像素坐标
一.创建MFC对话框,类名CDialogDlg,添加按钮IDC_BUTTON1,OnBnClickedButton1()函数如下: CShow *dlg;dlg = new CShow;dlg-> ...
- MFC 对话框中的picture control 控件显示图片
MFC读取图片一般使用自定义的DIB文件.DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作. DIB文件下载路径:DIB文件下载 MFC显示图片有几种方法: 1.在运行界面上选择 文件 ...
最新文章
- 开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”
- Xilinx® 7 series FPGAs CLBs专题介绍(一)
- 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型
- linux内核网络协议栈--数据包的接收过程(二十)
- ajax 加载partial view ,并且 附加validate验证
- Scala, Groovy, Clojure, Jython, JRuby and Java ----我们的工作语言
- 关于谨防诈骗的温馨提示
- 《avascript 高级程序设计(第三版)》 ---第三章 基本概念
- 40+大厂AI面经,秋招offer手到擒来!
- Hadoop YARN(入门) —— Hadoop权威指南5
- php在线生成logo,logo在线生成 php在线生成ico文件的代码
- matlab如何看历史,matlab创建有价值历史纪录.txt 源代码在线查看 - Matlab创建有价值历史纪录(完整版),matlab 常用的命令集锦。 资源下载 虫虫电子下载站...
- vim生成连续数字列
- 关于美国安利的真实情况 !!!!!
- 将对象的属性值复制到另一个对象中
- VVC帧内预测(一)
- Gremlin-常用查询语句用法
- /storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别
- 德语键盘在标准ASCII键盘上使用的小窍门/ 德语键盘英语输入法输出波浪线~
- Qt多功能计算器(四)——base64加密和解密