搜档网
当前位置:搜档网 › VC控件--控件的大小与像素之间的转换 - 冷秋魂的专栏 - 博客频道 - CSDN_NET

VC控件--控件的大小与像素之间的转换 - 冷秋魂的专栏 - 博客频道 - CSDN_NET

?VC控件--控件的大小与像素之间的转换 - 冷秋魂的专栏 - 博客频道 - https://www.sodocs.net/doc/e910781869.html,亲,
分类: VC-界面设计 2007-12-26 18:05 904人阅读 评论(0) 收藏 举报
本人是做对话框的皮肤时遇到的问题,有人说用GetDialogBaseUnits函数,可惜将用此方法按照图片大小(以像素为单位)计算出来的对话框大小却不正确。不过先将此方法写出来,待正确了再来修改。
函数功能:该函数返回系统的对话基本单位,该基本单位为系统字体字符的平均宽度和高度。对于使用系统字体的对话框,可以用这些值在对话框模板之间转换,比如在对话框模板和像素之间。对于不使用系统字体的对话框,从对话框模板单位到像素的转换要根据对话框使用的字体而定。对于对话框的其中一种类型用MaPDialogRect函数很容易地来执行转换,MaPDialogRect考虑字体且正确的把一个长方形模板单位转换为此像素。

函数原型:LONG GetDialogBaseUnits(VOID);

参数:无。

返回值:返回值为一个32位的含有对话基本单位的值。返回值的低位字含有水平对话框基本单位,且高低位字含有垂直对话框基本单位。


备注:GetDialogBaseUnits函数返回的水平基本单位同系统字体中字符以像素为单位的平均宽度相等;垂直基本单位同系统字体中字符的以像素为单位的平均高度相等;
对于一个没有使用系统字体的对话框基本单位相等于对话框字体字符以像素为单位的平均宽度和平均高度。可以用GetTextMetrics和GetTextExtentPoint32函数为一个选择的字体来计算这些值。但是,如果计算结果与那些通过系统执行的值不同,那么可以用MapDialogRect函数避免可能发生的错误。每一个水平基本单位同四个水平对话框模板单位相等;每一个垂直基本单位同八个垂直对话框模板单位相等。所以用下列公式来把对话框模板单位转换为像素:

PiselX=(temptateunitX★baseunitX)/4;PiseIY=(templateunitY★baseunitY)/8


同样地.用下列公式来把像素转换为对话框模板单位:templateunitX=(pixelX★4)/baseunitX;templateunitY=(plxelY★8)/baseunitY

Windows CE:Windows CE不支持此函数的任何一个扩展的错误值。

速查:Windows
NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:user32.lib

使用上述方法最后还是没有成功,最后通过微调,然后计算它们之间的比例:VC6.0:控件的宽/像素的宽 = 4/7控件的高度/像素的高度 =
2/3VS2005:控件的宽/像素的宽 = 2/3控件的高度/像素的高度 = 3/5


分享到: 上一篇:VC控件--用Spin控件完成对字符的增减
下一篇:刷新--单独刷新某个控件
查看评论
暂无评论



您还没有登录,请[登录]或[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场个人资料

primer_programer

访问:209645次
积分:3995分
排名:第689名
原创:164篇转载:84篇译文:1篇评论:87条文章搜索 文章分类ATL/ActiveX/COM(2)
C/C++(19)
DirectX SDK(2)
Excel编程(17)
Mac OS X(1)
STL(4)
Symbian使用笔记(11)
Symbian开发笔记(15)
Symbian编程错误集锦(3)
UML(4)
VC-Windows核心编程(13)
VC-动态链接库(5)
VC-开发工具(13)
VC-数据类型(18)
VC-文件&文件夹(7)
VC-注册表(1)
VC-界面设计(42)
VC-硬件&系统(4)
VC-网络编程(9)
Windows Shell(1)
XML(7)
内存/泄露(5)
字符编码(7)
操作系统(2)
数据库(13)
杂七杂八(2)
版本控制(8)
算法(2)
网络知识(1)
设备管理(5)
软件开发方法(0)
iOS开发(6)
文章存档2011年12月(1)
2011年11月(4)
2011年10月(2)
2011年09月(1)
2010年03月(1)
2009年09月(1)2009年07月(2)2009年05月(2)2009年04月(21)2009年03月(9)2009年02月(4)2008年08月(10)2008年07月(12)2008年06月(6)2008年05月(6)2008年04月(2)2008年03月(14)2008年02月(7)2008年01月(19)2007年12月(125)
展开阅读排行Excel函数使用——求方差(Var或V... (5855)
TinyXml对Unicode的支持 (5672)
AfxBeginThread和AfxEn... (5558)
MySQL——INSERT INTO (5525)
GetProp和SetProp的用法 (5379)
MySQL——客户端工具简介 (4467)
VC6.0读取Excel数据 (4426)
string的字符串替换函数,类似于CS... (3859)
去除string字符串中的空格 (3543)
VC控件——CTreeCtrl中HitT... (3148)
评论排行VC6.0读取Excel数据 (12)
VC运行库版本不同导致链接.LIB静态库... (5)
Symbian开发——Video Pla... (5)
AfxBeginThread和AfxEn... (3)
STL中vector和map的查找和删除 (3)
HWND_BROADCAST的一个用法—... (3)
一维、二维数组向SAFEARRAY转换 (3)
VC控件--用Spin控件完成对字符的增... (3)
Excel操作——删除工作表 (3)
Symbian开发——Symbian开发... (2)
推荐文章最新评论AfxMessageBox——模态与非模态的问题
mhm0902: 受教了。
TinyXml对Unicode的支持
yclhit: 顶一个
VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
blueblizza: 非常感谢~
sybmian s60 的armi、 thumb编译器不支持全局变量(包括静态成员变量)
kimono2: 兄弟你好!我有个问题想请教你!我qq75151997 邮箱kimono@https://www.sodocs.net/doc/e910781869.html,h
只允许程序运行一个实例
leither: 其实还有一种方法,使用共享内存的计数器,不仅可以限定只运行一个实例,还可以限定运行指定数量实例
SAFEARRAY向一维、二维数组转换


dragoo1: 多谢
一维、二维数组向SAFEARRAY转换
dragoo1: 多谢
CImageList使用指南
primer_programer: 我的MSN:lengqiuhun@https://www.sodocs.net/doc/e910781869.html,
Excel操作——删除工作表
primer_programer: 我不用QQ,我的MSN是lengqiuhun@https://www.sodocs.net/doc/e910781869.html,
VC6.0读取Excel数据
sunnan198538: 感谢楼主啊,下了这么多,就这个管用!!真是太好了。。。
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
Email:webmaster@https://www.sodocs.net/doc/e910781869.html,
Copyright ? 1999-2011, https://www.sodocs.net/doc/e910781869.html,, All Rights Reserved

相关主题