zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    在Exchange 2013中重置用户密码
    在exchange邮箱服务器上启用反垃圾邮件功能
    EMC队列 发件人为空 From Address: <>
    zabbix删除历史记录
    ESXi 6.7 CVE-2018-3646警告的处理
    CentOS安装nmap端口查看工具
    webpack学习
    vscode 点滴
    chrome点滴
    前端资料汇总
  • 原文地址:https://www.cnblogs.com/cxiaoln/p/5357105.html
Copyright © 2011-2022 走看看