想做个换肤窗口

尝试写一个自绘窗体,在vckbase上找到一个范例, 其中绘制标题栏的代码大概如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
CWindowDC dc( pWindow );

CBrush br( RGB( 
2550128 ) );
CBrush 
*pOld = dc.SelectObject( &br );

CRect rcWnd;
pWindow
->GetWindowRect( &rcWnd );

CPoint pt;
pt.x 
= rcWnd.Width();
pt.y 
= GetSystemMetrics( SM_CYSIZE ) + GetSystemMetrics( SM_CYFRAME ) + 1;
dc.PatBlt( 
00, pt.x, pt.y, PATCOPY );

 

在整个程序中都以是类似的方式在一个函数中绘制完成,而我在看别人写的界面时,却发觉是通过创建区域、合并区域最终完成换肤,

整个流程显得轻巧与优雅

 

上面的程序绘制出来的样子大概如下图,怪异的红色的标题栏是自己绘的,其余部分没有绘制。
然后我拖着资源管理器窗口左右移动以覆盖了它。
这时可以看到
SDI程序主框架下的非客户区,上面的红色标题栏以及其它所有蓝色区域(菜单栏、窗口左边框、右边框、下边框,
这些区域是用资源管理器覆盖它后产生的)。

还有就是这种绘制方法下,不能屏蔽Windows自身绘制的最小化、最大化、关闭按钮。

2009010816135369.jpg

 

转载于:https://www.cnblogs.com/Touchsoft/archive/2009/01/08/1371982.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值