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, 0x00, 0xFF);

#049 

#050      gpalBGR.Mode = PAL_BGR;

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

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

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

#054 

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

#056      gpalMono.Mode = PAL_MONOCHROME;

#057 

#058      return hpalette;

#059  }

转载于:https://www.cnblogs.com/ajuanabc/archive/2010/02/09/2463445.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值