想做个换肤窗口

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

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自身绘制的最小化、最大化、关闭按钮。

 

posted @ 2009-01-08 16:17  glimix  阅读(1744)  评论(5编辑  收藏  举报