自绘窗体界面问题(VC++范例宝典024)
发表在C语言图书答疑 2010-10-11
是否精华
版块置顶:
前辈好!
实例024有两个地方我不太明白:
1(第二版38页第16行)
//绘制左边线
//获取位图大小
pWindowDC->StretchBlt(1-m_BorderWidth,m_CaptionHeight+1,x+1,Clientrect.Height()+2*m_BorderHeight+5,&memDC,0,0,x,y,SRCCOPY);
我不明白为什么要用1-m_BorderWidth作为X值Clientrect.Height()+2*m_BorderHeight+5作为高?

2我自已写了个单文档程序,试图自画左边线,但是我不知道怎么获得左边线的高度!
我用了
l_BorderWidth = GetSystemMetrics(SM_CXBORDER);
l_BorderHeight = GetSystemMetrics(SM_CYBORDER);
l_CaptionHeight = GetSystemMetrics(SM_CYCAPTION);
我觉得l_BorderHeight是左边线的高度了,但是明明有500象素的高度,可我获得的值是1,不知道哪里错了,要怎么才能获得正确的高度?(l_BorderWidth也是1,l_CaptionHeight是29正常。)

希望得到解答!
分享到:
精彩评论 2
8031
学分:0 LV1
2010-10-12
沙发
首先你要知道窗体分为客户区、工具栏、标题栏、和外边框,我直接用语言说比较抽象,
外边框在边框在最外边,为了显示立体效果,所以有一定的宽度,外框的最外圈是一种颜色,内圈又是一种颜色
你可以拿拾取颜色的软件看一下,工具栏,标题栏,菜单都是非客户区,用户画图形、绘制图像都是在客户区
外边框宽度、标题栏宽度可以通过GetSystemMetrics函数获取,为什么要使用GetSystemMetrics函数获取呢,主要是因为这个值存储在
系统中,通过显示属性可以修改这个值,例如“经典”和“标准”的桌面主题,外边框宽度是不同的
1,为什么要用m_BorderWidth,这要看你要在“哪个”设备上下文(dc)中绘制“哪个”区域,如果你的DC是整个窗体(包括标题栏),那么你要绘制客户区,是不是应该去除边框的宽度呢
2,
GetSystemMetrics函数获取的是固定值(不改变桌面主题前提下),你要自绘左边线,要注意一定要获取正确的DC
dclchj
学分:0 LV1
TA的每日心情
学习
2022-09-02 15:29:05
2010-10-12
板凳
谢谢!
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照