微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(196)

PALETTE_Init函数是用来创建系统调色板。具体实现如下:

#001 HPALETTE FASTCALL PALETTE_Init(VOID)

#002 {

#003 int i;

#004 HPALETTE hpalette;

#005 PLOGPALETTE palPtr;

#006 #ifndef NO_MAPPING

#007 PALOBJ *palObj;

#008 #endif

#009

创建系统20种缺省的颜色。

#010 // create default palette (20 system colors)

分配20种颜色的调色板占用的内存空间。

#011 palPtr = ExAllocatePoolWithTag(PagedPool,

#012 sizeof(LOGPALETTE) +

#013 (NB_RESERVED_COLORS * sizeof(PALETTEENTRY)),

#014 TAG_PALETTE);

如果分配内存失败,就返回失败。

#015 if (!palPtr) return FALSE;

#016

设置调色板的版本号。

#017 palPtr->palVersion = 0x300;

设置调色板的颜色个数,这里设置为系统缺省值为20个。

#018 palPtr->palNumEntries = NB_RESERVED_COLORS;

初始化系统调色板。

#019 for (i=0; i<NB_RESERVED_COLORS; i++)

#020 {

#021 palPtr->palPalEntry[i].peRed = g_sysPalTemplate[i].peRed;

#022 palPtr->palPalEntry[i].peGreen = g_sysPalTemplate[i].peGreen;

#023 palPtr->palPalEntry[i].peBlue = g_sysPalTemplate[i].peBlue;

#024 palPtr->palPalEntry[i].peFlags = 0;

#025 }

#026

调用函数NtGdiCreatePaletteInternal创建系统调色板。

#027 hpalette = NtGdiCreatePaletteInternal(palPtr,NB_RESERVED_COLORS);

#028 ExFreePoolWithTag(palPtr,TAG_PALETTE);

#029

#030 #ifndef NO_MAPPING

#031 palObj = (PALOBJ*)PALETTE_LockPalette(hpalette);

#032 if (palObj)

#033 {

#034 if (!(palObj->mapping = ExAllocatePool(PagedPool,sizeof(int) * 20)))

#035 {

#036 DbgPrint("Win32k: Can not create palette mapping -- out of memory!");

#037 return FALSE;

#038 }

#039 PALETTE_UnlockPalette(palObj);

#040 }

#041 #endif

#042

#043 /* palette_size = visual->map_entries; */

#044

设置RGB/BGR/单色的调色板。

#045 gpalRGB.Mode = PAL_RGB;

#046 gpalRGB.RedMask = RGB(0xFF,0x00,0x00);

#047 gpalRGB.GreenMask = RGB(0x00,0xFF,0x00);

#048 gpalRGB.BlueMask = RGB(0x00,0xFF);

#049

#050 gpalBGR.Mode = PAL_BGR;

#051 gpalBGR.RedMask = RGB(0x00,0xFF);

#052 gpalBGR.GreenMask = RGB(0x00,0x00);

#053 gpalBGR.BlueMask = RGB(0xFF,0x00);

#054

#055 memset(&gpalMono,sizeof(PALETTE));

#056 gpalMono.Mode = PAL_MONOCHROME;

#057

#058 return hpalette;

#059}

原文地址:https://www.jb51.cc/react/308324.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐