读书笔记--MFC Windows程序设计(二)

Windows通过在适配器硬件调色板编制标准的供选颜色来处理调色板化的设备.这就是所谓的"静态颜色". 在256色适配器中,剩下的236颜色在GDI对象中,通常称为逻辑调色板

创建逻辑调色板: CPalette palette; palette.CreateHalftonePalette(pDC);

如果传递给CreateHalftonePalette的设备句柄为NULL,就可以创建与输出设备无关的256色半色调色板.但是不能用CPalette:: CreateHaletonePalette,因为该类函数具有有效性检测.所以使用 CPalette palette; palette.Attach(::CreateHalftonePalatte(NULL));

在调色板创建以后,可以使用CPalette::GetPaletteEntries检索单个调色板输入项或使用CPalette::SetPaletteEntries修改它们 还可以使用CPalette::ResizePalette调整调色板的大小 CDC::RealizePalette通过申请调色板管理器将逻辑调色板中的颜色映射到系统调色板上

创建COLORREF值有3个宏,分别是RGB,PALETTEINDEX和PALETTERGB 如果希望GDI使用所有调色板颜色,则使用PALETTERGB,如果忽略调色板给系统调色板添加的颜色而只使用静态颜色则使用RGB. PALETTEINDEX生成的COLORREF指定了逻辑调色板而不是RGB颜色值的索引号

WM_QUERYNEWPALETTE和WM_PALETTECHANGED消息 当顶层窗口的子窗口接收到输入焦点时,就会给顶层窗口发送一个WM_QUERYNEWPALETTE消息.当调色板的实现导致系统调色板改动时,就给系统中顶层窗口发送WM_PALETTECHANGED消息

在运行过程中可以确定逻辑调色板是否可以改善颜色输出,即系统颜色是否符合要求的方法 CClienDC dc(this); BOOL bUsePalette=FALSE; if( dc.GetDeviceCaps(RASTERCAPS)&RC_PALETTE ) {  bUsePalette=TRUE; }

你可能感兴趣的:(读书笔记--MFC Windows程序设计(二))