加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(196)

发布时间:2020-12-15 04:58:21 所属栏目:百科 来源:网络整理
导读: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

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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读