设为首页 加入收藏

TOP

子视窗控制项(三十七)
2010-12-30 21:12:42 来源: 作者: 【 】 浏览:32706
Tags:视窗 控制
crollProc必须被定义为callback函式。

对三个卷动列中的每一个,COLORS1使用SetWindowLong来设定新的卷动列视窗讯息处理程式的位址,并取得现存卷动列视窗讯息处理程式的位址:

OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i], GWL_WNDPROC,
(LONG) ScrollProc)) ;

现在,函式ScrollProc得到了Windows发送到COLORS1中三个卷动列(当然不是其他程式中的卷动列)的卷动列视窗讯息处理程式的全部讯息。ScrollProc视窗讯息处理程式在接收到Tab或者Shift-Tab键时,就将输入焦点改变到下一个(或者上一个)卷动列。它使用CallWindowProc呼叫旧的卷动列视窗讯息处理程式。

给背景著色
 

当COLORS1定义它的视窗类别时,也为其显示区域背景定义了一个实心的黑色画刷:

wndclass.hbrBackground = CreateSolidBrush (0) ;

当您改变COLORS1的卷动列设定时,程式必须建立一个新的画刷,并将该新画刷代号放入视窗类别结构中。如同使用GetWindowLong和SetWindowLong能得到并设定卷动列视窗讯息处理程式一样,用GetClassWord和SetClassWord能得到这个画刷的代号。

您可以建立新的画刷并将其代号插入视窗类别结构中,然後删除旧的画刷:

DeleteObject ((HBRUSH)
SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)
CreateSolidBrush (RGB (color[0], color[1], color[2])))) ;

Windows下一次重新为视窗的背景著色时,将使用这个新画刷。为了强迫Windows抹掉背景,我们将使整个显示区域无效:

InvalidateRect (hwnd, &rcColor, TRUE) ;

TRUE(非零)值作为第三个参数,表示希望在重新著色之前删去背景。

InvalidateRect使Windows在视窗讯息处理程式的讯息伫列中放进一个WM_PAINT讯息。由於WM_PAINT讯息的优先等级比较低,所以,如果您还在使用滑鼠或者游标键移动卷动列的话,这个讯息将不会立即被处理。如果您想

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

评论

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