icon.cpp

来自「大量windows shell编程例子」· C++ 代码 · 共 59 行

CPP
59
字号
// Icon.cpp : Implementation of CIcon
#include "stdafx.h"
#include "BmpIcons.h"
#include "Icon.h"

/////////////////////////////////////////////////////////////////////////////
// CIcon

HRESULT CIcon::GetIconLocation(
        UINT uFlags, LPSTR szIconFile, UINT cchMax, LPINT piIndex, UINT* pwFlags)
{
   // We store ourselves the icons
   ::GetModuleFileName(_Module.GetModuleInstance(), szIconFile, cchMax);

   // Analyze the bitmap color table
   int iBitCount = GetBitmapColorDepth();
   if(iBitCount < 0)
      return S_FALSE;

   switch(iBitCount)
   {
   case 1:
      *piIndex = 0;              // Monochrome
      break;

   case 4:
      *piIndex = 1;              // 16 colors
      break;

   case 8:
      *piIndex = 2;              // 256 colors
      break;

   default:
      *piIndex = 3;              // True color
   }

   *pwFlags |= GIL_PERINSTANCE | GIL_DONTCACHE;
   return S_OK;
};

int CIcon::GetBitmapColorDepth()
{
   // Read file header
   HFILE fh = _lopen(m_szFile, OF_READ);
   if(fh == HFILE_ERROR)
      return -1;

   BITMAPFILEHEADER bf;
   _lread(fh, &bf, sizeof(BITMAPFILEHEADER));

   BITMAPINFOHEADER bi;
   _lread(fh, &bi, sizeof(BITMAPINFOHEADER));
   _lclose(fh);

   // Returns
   return bi.biBitCount;
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?