设置颜色时,如何使组合框显示像 VS' 这样的选项卡控件?

Posted

技术标签:

【中文标题】设置颜色时,如何使组合框显示像 VS\' 这样的选项卡控件?【英文标题】:How do I make a combobox show a tab control like VS' when setting a color?设置颜色时,如何使组合框显示像 VS' 这样的选项卡控件? 【发布时间】:2021-02-19 04:43:40 【问题描述】:

我的意思是这个控件:

当您单击此选项时,将显示一个带有颜色的选项卡控件,而不是常规选项。我怎样才能做到这一点?这是所有者绘制的组合框还是其他?我知道如何使用所有者绘制组合框绘制文本、矩形、图像等,但我不知道如何在那里添加控件。我还没有要显示的代码,因为我不知道该怎么做。我已经尝试使用DRAWITEMSTRUCT.rcItem 中的值在WM_DRAWITEM 中调用CreateWindow() 之类的方法,但我无法在组框的客户区域内进行控件,按钮位于控件后面。

【问题讨论】:

你的意思是Color Dialog Box?当然可以Customizing the Color Dialog Box 不,我的意思是当您单击该组合框时显示该颜色对话框而不是组合框的项目(我猜它是一个) 不知道你在看什么,但这可能是 .NET 的 ColorEditor docs.microsoft.com/en-us/dotnet/api/… 来源在这里 github.com/dotnet/winforms/blob/main/src/… 使用常规 .NET TabControl。 【参考方案1】:

看起来你正在寻找CBN_DROPDOWN。

当组合框的列表框即将显示时发送。这 组合框的父窗口通过 WM_COMMAND 消息。

一些代码:

HWND hWndComboBox = CreateWindow(
       WC_COMBOBOX,
       TEXT(""),
       WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
       10, 20, 70, 17,
       hWnd, (HMENU)IDB_COMBOX, hInstance, NULL);

...
 case WM_COMMAND:
        
            int wmId = LOWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
                     
            case IDB_COMBOX:
            
                switch (HIWORD(wParam))
                
                case CBN_DROPDOWN:
                
                    CHOOSECOLOR cc;                 // common dialog box structure 
                    static COLORREF acrCustClr[16]; // array of custom colors                
                    static DWORD rgbCurrent;        // initial color selection

                    // Initialize CHOOSECOLOR 
                    ZeroMemory(&cc, sizeof(cc));
                    cc.lStructSize = sizeof(cc);
                    cc.hwndOwner = hWnd;
                    cc.lpCustColors = (LPDWORD)acrCustClr;
                    cc.rgbResult = rgbCurrent;
                    cc.Flags = CC_FULLOPEN | CC_RGBINIT;
                    ChooseColor(&cc);
            
                
                    break;
                ...

调试:

【讨论】:

不完全是,那里的颜色框似乎是一个选项卡控件,带有“Personalizar”、“Web”、“Sistema”选项卡。我可以显示来自CBN_DROPDOWN 的控制,这似乎是一个选项卡控件吗? @Jack 我认为答案是肯定的。请阅读About Tab Controls 和Add Controls To Specific Tab Page in TabControl in C++ Win32。 CBN_DROPDOWN事件下的调用标签控件。 我知道CBN_DROPDOWN 事件,但我无法在组合框区域下方显示选项卡控件。看来你不能让一个控件放在另一个之上,因为 windows vista 所以我在 SO 上问了这个问题 @Jack 我没有尝试过这样的事情。需要的话,我一会儿测试一下,在这里更新一下。 感激不尽,我还没有成功。

以上是关于设置颜色时,如何使组合框显示像 VS' 这样的选项卡控件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥VS2008下用MFC使用COMBOX时单击不能显示所有项

WORD,怎样使我创建的表格的所有框线变成无色透明?

为啥这个组合框看起来像这样?

(Qt)使组合框代表作为选项显示模型的整个列

VS2010和选中代码相同的代码的颜色设置,修改高亮颜色

用于组合框模板的 WPF 高亮画笔