有没有办法告诉CMFCColorButton哪些颜色不可以显示

有没有办法告诉CMFCColorButton哪些颜色不可以显示,button,mfc,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.SetPalet

有没有办法告诉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);
然后我得到一个断言。

只需创建一个CPalette对象

使用void CMFCColorButton::SetPaletteCPalette*pPalette强制使用此调色板

在此,COLLPALET只是一个C++对象,而不是HPaltEt资源对象。SetPaletteEntries对不存在的HPALETTE进行WinAPI调用,但失败。这是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);
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);