CMFCColorButton ::调用SetPalette

时间:2012-04-26 09:13:53

标签: 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问题,我还没有在网上找到任何其他帮助。提前谢谢!

- 克里斯

1 个答案:

答案 0 :(得分:0)

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

pLogPalette->palVersion = 0x300;