zoukankan      html  css  js  c++  java
  • win32-改变Combox的编辑框和下拉列表的背景颜色和文本字体颜色

    只需要调用WM_CTLCOLORLISTBOX和WM_CTLCOLOREDIT来分别处理编辑框和下拉列表。

    Combox的创建:

    int xpos = 100;            // Horizontal position of the window.
       int ypos = 100;            // Vertical position of the window.
       int nwidth = 200;          // Width of the window
       int nheight = 200;         // Height of the window
       HWND hwndParent = hWnd; // Handle to the parent window
    
       hWndComboBox = CreateWindow(WC_COMBOBOX, TEXT(""),
           CBS_DROPDOWNLIST | WS_CHILD |  WS_VISIBLE, // CBS_HASSTRINGS | WS_OVERLAPPED |
           xpos, ypos, nwidth, nheight, hwndParent, NULL, hInstance,
           NULL);
    
       // load the combobox with item list.  
       // Send a CB_ADDSTRING message to load each item
    
       TCHAR Planets[9][10] =
       {
           TEXT("Mercury"), TEXT("Venus"), TEXT("Terra"), TEXT("Mars"),
           TEXT("Jupiter"), TEXT("Saturn"), TEXT("Uranus"), TEXT("Neptune"),
           TEXT("Pluto??")
       };
    
       TCHAR A[16];
       int  k = 0;
    
       memset(&A, 0, sizeof(A));
       for (k = 0; k <= 8; k += 1)
       {
           wcscpy_s(A, sizeof(A) / sizeof(TCHAR), (TCHAR*)Planets[k]);
    
           // Add string to combobox.
           SendMessage(hWndComboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A);
       }
    
       // Send the CB_SETCURSEL message to display an initial item 
       //  in the selection field  
       SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)2, (LPARAM)0);

    这部分可以参考: How to Create a Simple Combo Box

    接下来处理窗口处理过程:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        
        case WM_CTLCOLORLISTBOX:
        {
            HDC dc = (HDC)wParam;
            SetBkMode(dc, OPAQUE);
            SetTextColor(dc, RGB(255, 255, 255));
            SetBkColor(dc, 0x383838); //0x383838
            HBRUSH comboBrush = CreateSolidBrush(0x383838); //global var
            return (LRESULT)comboBrush;      
        }
        case WM_CTLCOLOREDIT:
        {
            HDC dc = (HDC)wParam;
            SetBkMode(dc, OPAQUE);
            SetTextColor(dc, RGB(255, 255, 255));
            SetBkColor(dc, 0x383838); //0x383838
            HBRUSH comboBrush = CreateSolidBrush(0x383838); 
            return (LRESULT)comboBrush;
        }
        ...

    最后的调试结果:

    更新:

    如果有多个组合框控件,我们需要分别改变它们的背景颜色和文本颜色。那么我们需要通过判断各个控件的窗口句柄来实现。

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {    
        case WM_CTLCOLORLISTBOX:
        {       
            COMBOBOXINFO info;
            info.cbSize = sizeof(info);
            SendMessage(hWndComboBox, CB_GETCOMBOBOXINFO, 0, (LPARAM)&info);
            COMBOBOXINFO info1;
            info1.cbSize = sizeof(info1);
            SendMessage(hWndComboBox1, CB_GETCOMBOBOXINFO, 0, (LPARAM)&info1);
    
            if ((HWND)lParam == info.hwndList)
            {
                HDC dc = (HDC)wParam;
                SetBkMode(dc, OPAQUE);
                SetTextColor(dc, RGB(255, 255, 0));
                SetBkColor(dc, 0x383838); //0x383838
                HBRUSH comboBrush = CreateSolidBrush(0x383838); //global var
                return (LRESULT)comboBrush;
            } 
            if ((HWND)lParam == info1.hwndList)
            {
                HDC dc = (HDC)wParam;
                SetBkMode(dc, OPAQUE);
                SetTextColor(dc, RGB(255, 0, 0));
                SetBkColor(dc, RGB(0, 0, 255)); 
                HBRUSH comboBrush = CreateSolidBrush(RGB(0, 0, 255)); 
                return (LRESULT)comboBrush;
            }
        }
        case WM_CTLCOLOREDIT:
        {
            HWND hWnd = (HWND)lParam;
            HDC dc = (HDC)wParam;
            if (hWnd == hWndComboBox)
            {
                SetBkMode(dc, OPAQUE);
                SetTextColor(dc, RGB(255, 0, 255));
                SetBkColor(dc, 0x383838); //0x383838
                HBRUSH comboBrush = CreateSolidBrush(0x383838); //global var
                return (LRESULT)comboBrush;
            }
            else if (hWnd == hWndComboBox1)
            {
                SetBkMode(dc, OPAQUE);
                SetTextColor(dc, RGB(255, 255, 0));
                SetBkColor(dc, RGB(0, 255, 0)); 
                HBRUSH comboBrush = CreateSolidBrush(RGB(0, 255, 0)); 
                return (LRESULT)comboBrush;
            }
        }
        ...

  • 相关阅读:
    数学学习合集
    萌萌的网络流~~
    2014西安全国邀请赛
    好题、趣题、麻烦题
    单调栈与单调队列
    字符串习题
    计算几何
    summer 2014 校队训练 嗷嗷待补之题
    2014多校联合训练第一场(组队训练)
    summer 2014 Round 4 解题报告
  • 原文地址:https://www.cnblogs.com/strive-sun/p/13206712.html
Copyright © 2011-2022 走看看