visual-c++ - CMFCColorButton::SetPalette

标签 visual-c++ mfc mfc-feature-pack color-palette

最近,我开始在应用程序中使用CMFCColorButtons替换旧的自定义控件。现在,我要限制可选择的颜色。

因此,我找到了“SetPalette”方法。我在OnInitDialog方法中创建如下的CPalette:

// CArray<COLORREF, COLORREF> arrColors is an array of COLORREFS coming
// from my helper class
if (arrColors.GetCount() > 0)
{
    LOGPALETTE* pLogPalette = (LOGPALETTE*) new BYTE[sizeof(LOGPALETTE) + 
                              (arrColors.GetCount() * sizeof(PALETTEENTRY))];
    pLogPalette->palNumEntries = arrColors.GetCount();

    for (int i = 0; i < arrColors.GetCount(); i++)
    {
        COLORREF currentColor = arrColors.GetAt(i);
        pLogPalette->palPalEntry[i].peRed = GetRValue(currentColor);
        pLogPalette->palPalEntry[i].peGreen = GetGValue(currentColor);
        pLogPalette->palPalEntry[i].peBlue = GetBValue(currentColor);
    }

    m_pPalette = new CPalette();
    m_pPalette->CreatePalette(pLogPalette);
    delete []pLogPalette;
}

之后,在代码中,将创建CMFCColorButtons,并且还将在OnInitDialog中调用调色板(在此对话框中总共设置了六个颜色按钮):
void CMyColorPopUp::InitColorButton(CMFCColorButton* pColorButton, int iColor)
{
    pColorButton->SetPalette(m_pPalette);
    pColorButton->SetColor(iColor);
    pColorButton->SetColumnsNumber(8);
}

该行为不符合预期。当我单击该按钮时,调色板会覆盖整个显示屏,并且每个条目仅包含一种颜色(例如100行和8列)...

也许您可以为我的ColorButton问题提供帮助,但我在网络上找不到任何其他帮助。先感谢您!

--
克里斯

最佳答案

好的,我找到了答案。我只是忘了设置LOGPALETTE的系统版本。这只是一行代码:

pLogPalette->palVersion = 0x300;

关于visual-c++ - CMFCColorButton::SetPalette,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330458/

相关文章:

c++11 - 错误 E0146 : Too many initializer values C++

windows - vcvarsall.bat 和 bin/vcvars32.bat 有什么区别?

visual-c++ - 金字塔中的错误意味着某些尺寸图像的平移过滤?

mfc - 如何确定鼠标是顺时针还是逆时针移动?

c++ - 如何复制 CString 功能

c++ - 跟踪 MFC 消息处理

c++ - 不同的编译结果 : Mac vs Windows

c++ - 在 MFC 计算器应用程序中连接 CString 时遇到问题

c++ - 我可以删除 CDockablePane 中的标题吗

c++ - 如何让 CMFCToolBar 识别图像 mask ?