WEB开发网
开发学院软件开发VC 让你的软件界面更漂亮(六)-- 仿QQ主界面之ListC... 阅读

让你的软件界面更漂亮(六)-- 仿QQ主界面之ListCtrl

 2007-12-30 21:37:45 来源:WEB开发网   
核心提示: 显示灰色图片的方法可用图像处理软件处理成单色位图文件后使用,也可用软件代码实现转换,让你的软件界面更漂亮(六)-- 仿QQ主界面之ListCtrl(2),前者的方法处理位图文件个数不多是还行,否则就显得麻烦了,效果好,但运行时间稍长HBITMAP BitmapColorToGray(CDC

显示灰色图片的方法可用图像处理软件处理成单色位图文件后使用,也可用软件代码实现转换,前者的方法处理位图文件个数不多是还行,否则就显得麻烦了,其优点运行速度快。用软件代码转换的方法也是可行的,象LoadImage ()或CopyImage()API都可实现,但要占用很多CUP时间。对比两种方法,我选择后者,原因不用说我想大家也清楚。

实现彩色图片到单色位图转换的方法是先获取CMyListCtrl的ImageList 并提取ListCtrl中的Item 对应的图像后,用代码转换成单色位图并在原位置显示。转换过程如下:

CImageList* pImageList=NULL;
pImageList = GetImageList(LVSIL_SMALL);
if(pImageList !=NULL)
{
  HICON hIcon=NULL;         
  hIcon = pImageList->ExtractIcon(nItem);
  HBITMAP hbitmap,hBitmapMask; 
  ICONINFO* iconinfo = new ICONINFO;          
  if(::GetIconInfo(hIcon, iconinfo))
  {
    hbitmap  =  iconinfo->hbmColor;          
    hBitmapMask = iconinfo->hbmMask;
    if (!(nStyle & TVS_ONLINEUSER))
      //hbitmap = BitmapColorToGray(m_hDll,&memDC,hbitmap);            
      hbitmap = (HBITMAP) CopyImage(hbitmap, IMAGE_BITMAP,0, 0,LR_COPYDELETEORG|LR_MONOCHROME);
    DrawBitmap(m_hDll, &memDC,hbitmap,rcIcon);
    DeleteObject(hbitmap);
    DeleteObject(hBitmapMask);
  }
  delete iconinfo;
  ::DestroyIcon(hIcon);
}
实现彩色图片到单色位图转换的语句为:hbitmap = (HBITMAP) CopyImage(hbitmap, IMAGE_BITMAP,0, 0,LR_COPYDELETEORG|LR_MONOCHROME);我也写了一个实现彩色图片到单色位图转换算法,其代码如下://这是本人写的一个转换算法。效果好,但运行时间稍长
HBITMAP BitmapColorToGray(CDC* pDC,HBITMAP hBitmap)
{
   BITMAP bmpInfo;
   ::GetObject(hBitmap,sizeof(BITMAP),&bmpInfo);
   if(pDC)
   {
      CDC memDC;
      if( !memDC.CreateCompatibleDC(pDC) )
      {
         return NULL;
      }
      HBITMAP oldBitmap = (HBITMAP)memDC.SelectObject(hBitmap);
      DWORD  r,g,b; 
      for (int H =0; H <= bmpInfo.bmHeight; H++) 
      {
         for(int W = 0; W <= bmpInfo.bmWidth; W ++) 
         { 
            r = GetRValue(memDC.GetPixel(W,H)); 
            g = GetGValue(memDC.GetPixel(W,H)); 
            b = GetBValue(memDC.GetPixel(W,H)); 
            r = (r * 3 + g * 6 + g) / 10; 
            g  =  r; 
            b  =  g; 
            memDC.SetPixel(CPoint(W,H),RGB(r,g,b));
         }
      }
      hBitmap = (HBITMAP)memDC.SelectObject(oldBitmap);
      memDC.DeleteDC();
   }
  return hBitmap;     
}

3.MyListCtrl 要包含丰富的用户信息(如 ID,NAME 、IP Address 、视频可用 ,手机短消息等用户信息)

上一页  1 2 3 4  下一页

Tags:软件 界面 漂亮

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接