设为首页 加入收藏

TOP

子视窗控制项(三十八)
2010-12-30 21:12:42 来源: 作者: 【 】 浏览:32707
Tags:视窗 控制
在颜色改变之後使该视窗立即变成最新的(目前的),那么您可以在InvalidateRect之後增加下面的叙述:

UpdateWindow (hwnd) ;

但这会使得键盘和滑鼠处理变慢。

COLORS1中的WndProc函式不处理WM_PAINT讯息,而是将其传给DefWindowProc。Windows对WM_PAINT讯息的内定处理只是呼叫BeginPaint和EndPaint使视窗生效。因为在InvalidateRect呼叫中已经指定背景要被抹掉,所以BeginPaint呼叫使Windows发出一个WM_ERASEBKGND(删除背景)讯息,WndProc也将忽略这个讯息。Windows用视窗类别中指定的画刷将显示区域的背景抹去,这样就处理了这个讯息。

在终止以前进行清除总是一个好主意,因此在处理WM_DESTROY讯息处理期间,再一次呼叫DeleteObject:

DeleteObject ((HBRUSH)
SetClassLong (hwnd, GCL_HBRBACKGROUND,
(LONG) GetStockObject (WHITE_BRUSH))) ;

给卷动列和静态文字著色
 

在COLORS1中,三个卷动列的内部和六个文字栏位中的文字著色为红、绿和蓝色。卷动列的著色是通过处理WM_CTLCOLORSCROLLBAR讯息来完成的。

在WndProc中,我们为画刷定义了一个由三个代号组成的静态阵列:

static HBRUSH hBrush [3] ;

在处理WM_CREATE期间,我们建立三个画刷:

for (I = 0 ; I < 3 ; I++)
hBrush[0] = CreateSolidBrush (crPrim [I]) ;

其中crPrim阵列中包含三种原色的RGB值。在WM_CTLCOLORSCROLLBAR处理期间视窗讯息处理程式传回这三画刷中的一个:

case WM_CTLCOLORSCROLLBAR:
i = GetWindowLong ((HWND) lParam, GWL_ID) ;
return (LRESULT) hBrush [i] ;

在处理WM_DESTROY讯息的过程中,这些画刷必须被删除:

for (i = 0 ; i < 3 ; i++)
DeleteObject (hBrush [i])) ;

同样地,静态文字栏位中的文字是在处理WM_CTLCOLORST

首页 上一页 35 36 37 38 39 40 41 下一页 尾页 38/61/61
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇功能表及其他资源 下一篇计时器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: