CMFCColorButton:如何限制颜色

时间:2018-07-18 09:53:55

标签: button mfc

有没有一种方法可以告诉CMFCColorButton要显示什么颜色。

例如,按下时,仅显示橙白色和黑色。

更新

我尝试通过定义:

PALETTEENTRY  palleteEntries[2] = 
{
    /*index 0 black*/
    {0,0,0,PC_EXPLICIT},
    /*index 1 white*/
    {0xFF,0xFF,0xFF,PC_EXPLICIT},
};

CPalette colorPalette;
colorPalette.SetPaletteEntries(0,2,palleteEntries);

然后我得到一个断言。

更新

我尝试执行以下操作:

LOGPALETTE lg;  
lg.palNumEntries = 1;
lg.palVersion = 1;
lg.palPalEntry->peGreen = 0xFF;
lg.palPalEntry->peBlue = 0xFF;
lg.palPalEntry->peRed = 0xFF;
lg.palPalEntry->peFlags = 0;  

CPalette colorPalette;

 bool isValid = colorPalette.CreatePalette(&lg);  

我将isValid设为false,当然我得到了断言

m_myColorBtn.SetPalette(&colorPalette);

我找不到任何正确的逻辑解释或简单的代码示例,了解如何正确执行此操作

更新

那行得通,谢谢。

最后一个问题。

是否可以通过颜色按钮了解所选颜色的索引?

2 个答案:

答案 0 :(得分:2)

只需创建一个CPalette对象。

使用空白CMFCColorButton::SetPalette(CPalette* pPalette)强制使用此调色板。

答案 1 :(得分:0)

CPalette colorPalette;
colorPalette.SetPaletteEntries(0,2,palleteEntries);

此时colorPalette只是一个C ++对象,而不是HPALETTE资源对象。 SetPaletteEntries使WinAPI调用不存在的HPALETTE并失败。这是MFC无法通过隐藏所有内容提供帮助的情况之一。但是调试器可以帮助指出问题。

LOGPALETTE开头。 LOGPALETTE::palVersion应该为0x0300,否则CreatePalette失败。改用它:

CPalette pal;
LOGPALETTE* lg = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) + 5 * sizeof(PALETTEENTRY));
lg->palNumEntries = 5;
lg->palVersion = 0x0300;
lg->palPalEntry[0] = { 255,0,0,0 };
lg->palPalEntry[1] = { 0,255,0,0 };
lg->palPalEntry[2] = { 0,0,255,0 };
lg->palPalEntry[3] = { 0,0,0,0 };
lg->palPalEntry[4] = { 255,255,255,0 };
if(pal.CreatePalette(lg))
{
    m_myColorBtn.SetPalette(&pal);
}
free(lg);