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);

  • 相关阅读:
    Javascript 与 c# 数据加密互通 DEC
    Auto.js 隐藏日志信息、定时器
    Auto.js 检测开启无障碍
    Auto.js 初学碰到的坑
    SmartAssembly 汉化说明
    espcms 表结构说明
    处理器调度
    进程死锁与避免
    并发程序设计
    Mysql性能调优
  • 原文地址:https://www.cnblogs.com/cxiaoln/p/5357105.html
Copyright © 2011-2022 走看看