windows程序设计第九章colors

1、使用画刷将整个界面初始化为黑色

wndclass.hbrBackground = CreateSolidBrush(0);

2、WM_CREATE创建窗口的时候

hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);

        hwndRect = CreateWindow(L"static", L"", WS_VISIBLE|WS_CHILD|SS_WHITERECT, 0, 0, 0, 0, hwnd, (HMENU)9, hIns, NULL);
        for (int i = 0; i < 3; ++i) {
            hwndScroll[i] = CreateWindow(L"scrollbar", L"", WS_VISIBLE|WS_CHILD|SBS_VERT|WS_TABSTOP, 0,0,0,0,hwnd,(HMENU)i, hIns, NULL);
            hwndLabel[i] = CreateWindow(L"static", szColorLabel[i], WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+3), hIns,NULL);
            hwndValue[i] = CreateWindow(L"static",L"0",WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+6),hIns,NULL);

            SetScrollRange(hwndScroll[i], SB_CTL, 0, 255, FALSE);
            SetScrollPos(hwndScroll[i], SB_CTL, 0, FALSE);
            OldScroll[i] = (WNDPROC)SetWindowLong(hwndScroll[i], GWL_WNDPROC, (LONG)ScrollProc);
            hBrush[i] = CreateSolidBrush(crPrim[i]);
        }
        hBrushStatic = CreateSolidBrush(GetSysColor(COLOR_BTNHIGHLIGHT));
        cyChar = HIWORD(GetDialogBaseUnits());

注意,在hwndRect的创建风格时候使用SS_WHITERECT

在msdn上面的描述是这样的: Specifies a rectangle filled with the color used to fill the window background. The default is white.

说明使用默认的白色用来填充窗口背景色。并在WM_SIZE的时候将hwndRect充满整个窗口的左半部分,所以整个窗口的左半部分显示为白色。

这里通过拦截滚动条的默认窗口处理函数来进行对滚动条的一些特殊处理 OldScroll[i] = (WNDPROC)SetWindowLong(hwndScroll[i], GWL_WNDPROC, (LONG)ScrollProc);

    case WM_CTLCOLORSCROLLBAR:
        return (LRESULT)hBrush[GetWindowLong((HWND)lParam, GWL_ID)];
    case WM_CTLCOLORSTATIC:
        {
            int id = GetWindowLong((HWND)lParam,GWL_ID);
            if (id > 2 && id < 9) {
                SetTextColor((HDC)wParam, crPrim[id % 3]);
                SetBkColor((HDC)wParam, GetSysColor(COLOR_BTNHIGHLIGHT));
                return (LRESULT)hBrushStatic;
            }
        }
        break;

在static和scrollbar类型的界面画刷拦截显示中,通过返回对应的画刷句柄实现对static文字背景颜色的填充。也可以有其他一些图像之类的填充。

以下是在WM_VSCROLL中执行的修改整个窗口背景画刷,并使整个窗口背景的右半部分无效,重新填充颜色

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

时间: 2024-10-17 02:43:16

windows程序设计第九章colors的相关文章

javascript高级程序设计 第九章-- 客户端检测

javascript高级程序设计 第九章-- 客户端检测 客户端检测是javascript开发中最具争议的一个话题,由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码.有下列常使用的客户端检测方法:能力检测:在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数是否存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本.怪癖检测:怪癖实际上是浏览器中存

SqlServer——事务一编程进阶(SqlServer技术内幕 T-SQL程序设计 第九章

一般不要修改SQL Server事务的默认级别.不推荐强行加锁 1 执行 EXEC SP_LOCK 报告有关锁的信息 1 如何锁一个表的某一行 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM table ROWLOCK WHERE id = 1 2 锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 加锁语句: sybase: update 表 set col1=col1 whe

《windows程序设计》第一章,建议想学API的每天看一章

开始 壹佰软件开发小组  整理编译   本书介绍了在Microsoft Windows 98.Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法.这些程序用C语言编写并使用原始的Windows Application Programming Interface(API).如在本章稍后所讨论的,这不是写作Windows程序的唯一方法.然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的. 正如您可能知道的,Windows 98已

JavaScript高级程序设计:第九章

第九章 一.使用能力检测 能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力.能力检测的基本模式如下: if ( object.propertyInQuestion ) { //使用object.propertyInQuestion } 二.怪癖检测 与能力检测类似,怪癖检测的目标是识别浏览器的特殊行为.但与能力检测确认浏览器支持什么能力不同,怪癖检测是想要知道浏览器存在什么缺陷. 三.用户代理检测 用户代理检测技术: (1)识别呈现引擎 为了不在全局作用域中添加多余的变量,我们将使用模块

Windows程序设计笔记4:第10章:TCP/IP和网络通信

WinSock接口:Windows处理网络的API 套接字socket 流套接字:SOCKET_STREAM           可靠连接   TCP HTTP POP3 数据报套接字:SOCKET_DGRAM     不可靠连接 UDP 寻址方式: 1:sockaddr的第1个版本 struct sockaddr{ u_short  sa_family;       //地址家族 char      sa_data[14];   //数据 } 2.sockaddr的TCP/IP版本的 sock

linux程序设计——多个源文件带来的问题(第九章)

第九章 开发工具 本章介绍一些linux系统中的程序开发工具,其中一些工具也可以在UNIX系统中使用.linux系统除提供开发人员必须的编译器和调试器外,还提供一组工具,其中每个都可以完成一件独立的任务,并且允许开发人员将它们创造性地组合在一起,而这种组合能力也是linux从UNIX的哲学体系中继承而来的. 9.1 多个源文件带来的问题 在编写小程序时,许多人都会在编辑完源文件后重新编译所有文件来重组应用程序.但是对大型程序来说,使用这种简单的处理方式会带来一些很明显的问题.编辑--编译--测试

《Windows程序设计》读书笔九 子窗口控件

第九章 子窗口控件 子窗口可以作为控制屏幕图形显示,响应用户输入,以及在有重要输入事件的时候通知另一窗口. 标准子窗口控件,按钮,复选框,编辑框,列表框,组合框,文本字符串和滚动条. 可以使用CreateWindow来创建子窗口控件,或者在程序的资源脚本里编辑好各种属性. 使用预定义控件不需要再注册相应的子窗口类,这些类已经存在于windows中并且已经有了预定义的名称. 在调用CreateWindow时,只需要使用该名称作为窗口类的参数即可. 在窗口表明直接创建子窗口,所涉及的任务比使用对话框

jQuery第九章

第九章 jQuery Mobile 一.HTML5.0简介 谈到Web设计,我们经常把Web分为三个层: (1)结构层:(2)表现层:(3)行为层. 对应的技术分别是: (1)HTML:(2)CSS:(3)JavaScript 二.jQuery Mobile简介 对于Web开发者来说,jQuery是非常流行JavaScript类库,而且一直以来它都是为Web浏览器设计的,并没有特别为移动应用程序设计.jQuery Mobile则是用来填补jQuery在移动设备应用上的缺憾的一个新项目.它基于jQ

c++ primer plus(第6版)中文版 第九章编程练习答案

首先,说明下环境: linux:fedora14: IDE:eclipse: python:python2.7 python框架:django web服务器:apache web服务器的python模块:mod_wsgi 写在前面: 之前用的windows下面的xampp,写的php后台,现在想转向linux下面的python,跟以前一样,选择apache和eclipse作为自己的开发工具. eclipse的python配置, 参见之前的博客:http://blog.csdn.net/zy416