有没有一种方法可以告诉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);
我找不到任何正确的逻辑解释或简单的代码示例,了解如何正确执行此操作
那行得通,谢谢。
最后一个问题。
是否可以通过颜色按钮了解所选颜色的索引?
答案 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);