乞丐中的霸主(ぃ枫.net)(天行健,君子以自强不息;地势坤,君子以厚德载物! -《周易》)QQ讨论群(交流EVC++,VC++,USB驱动程序开发,上下机位通讯,无线网络通讯技术,Mobile开发)帮主QQ号:414885058

C#,C++ 学习

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::


#include "afxwin.h"
#include "MD5Checksum.h"


//class CMD5Checksum;


#ifndef _UICOMMON_H
#define _UICOMMON_H

//extern int x=0;
//extern int y=0;


static HBITMAP GXLoadBitmapFromFile(CString strFile)
{
 HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,strFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
 return hBitmap;
}

static HICON GXLoadIconFromFile(CString strFile)
{
 HICON hIcon = (HICON)LoadImage(NULL,strFile,IMAGE_ICON,0,0,LR_LOADFROMFILE);
 return hIcon;
}


static HBITMAP LoadBitmapFromFile(CString strFile)
{
 HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,strFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
 return hBitmap;
}

static void GGetBitmapInfo(HBITMAP hBitmap,int *w,int *h)
{
 if(hBitmap == NULL)return;
 CDC   dcImage;  
 CBitmap m_bitmap;
 m_bitmap.Attach(hBitmap);
 BITMAP bm;
 m_bitmap.GetBitmap(&bm);
 if((&bm) != NULL)
 {
  *w=bm.bmWidth;
  *h=bm.bmHeight;
 }
 else
 {
  *w=0;
  *h=0;
 }
 m_bitmap.Detach();
}

static HICON LoadIconFromFile(CString strFile)
{
 HICON hIcon = (HICON)LoadImage(NULL,strFile,IMAGE_ICON,0,0,LR_LOADFROMFILE);
 return hIcon;
}

static void GXTransparentBlt(HDC hdc,HBITMAP hBitmap,int x = 0, int y = 0, COLORREF clrTrans = RGB(255,0,255))
{
 if( NULL == hdc)return;
 BITMAP bmp;  
 COLORREF   clr;  
 HBITMAP bmpBack;  
 HBITMAP bmpBackOld,bmpMemOld;  
 HDC   hdcMem,hdcBack;  
 POINT   pt;  
 HBITMAP   m_bmpTrans;     
 m_bmpTrans = hBitmap;
 hdcMem=CreateCompatibleDC(hdc);  
 bmpMemOld=(HBITMAP)SelectObject(hdcMem,m_bmpTrans);     
 GetObject(m_bmpTrans,sizeof(BITMAP),(LPVOID)&bmp);  
 pt.x=bmp.bmWidth;  
 pt.y=bmp.bmHeight;    
 hdcBack=CreateCompatibleDC(hdc);    
 bmpBack=CreateBitmap(pt.x,pt.y,1,1,NULL);  
 bmpBackOld=(HBITMAP)SelectObject(hdcBack,bmpBack);    
 clr=SetBkColor(hdcMem,   clrTrans);  
 BitBlt(hdcBack,   0,0,pt.x,   pt.y,hdcMem,0,0,SRCCOPY);  
 SetBkColor(hdcMem,clr);    
 BitBlt(hdc,x,y,pt.x,pt.y,hdcBack,0,0,SRCAND);  
 BitBlt(hdc,x,y,pt.x,pt.y,hdcMem,0,0,SRCPAINT);    
 DeleteObject(SelectObject(hdcBack,bmpBackOld));  
 SelectObject(hdcMem,bmpMemOld);    
 DeleteDC(hdcBack);  
 DeleteDC(hdcMem);
}

static void GXStretchBlt(CDC *pDC,HBITMAP hBitmap,CRect rect)
{
 if(!pDC)return;
 CDC  dcImage;  
    if(!dcImage.CreateCompatibleDC(pDC))   return;
 CBitmap m_bitmap;
 m_bitmap.Attach(hBitmap);
 BITMAP bm;
    m_bitmap.GetBitmap(&bm);
    CBitmap*   pOldBitmap   =   dcImage.SelectObject(&m_bitmap);  
    pDC->SetStretchBltMode(COLORONCOLOR);  
    pDC->StretchBlt(rect.left,rect.top,rect.right,rect.bottom,&dcImage,0,0,
  bm.bmWidth,bm.bmHeight,SRCCOPY);  
    dcImage.SelectObject(pOldBitmap);  
    dcImage.DeleteDC();
 m_bitmap.Detach();
}

static void GXBitBlt(CDC * pDC,HBITMAP hBitmap,int nLeft = 0,int nTop = 0,int *pNWidth = NULL,int *pNHeight = NULL)
{
 CDC dcImage;  
    if(!dcImage.CreateCompatibleDC(pDC))return;
 CBitmap m_bitmap;
 m_bitmap.Attach(hBitmap);
 BITMAP bm;
    m_bitmap.GetBitmap(&bm);
 if((&bm) == NULL )
 {
  TRACE(_T("Get Bitmap Info Error!\n"));
  return;
 }
 if(pNHeight != NULL)
  *pNHeight = bm.bmHeight;
 if(pNWidth  != NULL)
  *pNWidth  = bm.bmWidth; 
    CBitmap*   pOldBitmap   =   dcImage.SelectObject(&m_bitmap);  
    pDC->SetStretchBltMode(STRETCH_HALFTONE|STRETCH_ORSCANS|COLORONCOLOR);  
    pDC->StretchBlt(nLeft,nTop,bm.bmWidth,bm.bmHeight,&dcImage,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);  
    dcImage.SelectObject(pOldBitmap);  
    dcImage.DeleteDC();
 m_bitmap.Detach();
}

static void  GXSetRgnFromBitmap(CWnd * pWnd,HBITMAP hBmp,COLORREF color = RGB(255,0,255),const int offset = 5)  
{  
 int x;
 int y;
 if(pWnd == NULL)
  return;
 if(hBmp == NULL)
  return;
 CDC *pDC = pWnd->GetWindowDC();
 ASSERT_VALID(pDC);
 BITMAP bm;  
 GetObject(hBmp, sizeof(BITMAP), &bm);     
 CDC dcBmp;  
 dcBmp.CreateCompatibleDC(pDC); 
 dcBmp.SelectObject(hBmp);   
 CRgn hrgnTotal;
 hrgnTotal.CreateRectRgn(0,0,bm.bmWidth,bm.bmHeight); 
 int nWidth = bm.bmWidth;
 int nHeight = bm.bmHeight;
 int i = offset;
 for (int y = 0; y<i; y++)
 {
  for (int x=0; x<i; x++)
  {
   if (dcBmp.GetPixel(x,y) == color)
   {
    CRgn rgnAdd;
    rgnAdd.CreateRectRgn (x,
     y, x+1, y+1);
    hrgnTotal.CombineRgn(&hrgnTotal,&rgnAdd, RGN_DIFF);
   }
  }
  for (x=nWidth-i; x<nWidth; x++)
  {
   if (dcBmp.GetPixel(x,y) == color)
   {
    CRgn rgnAdd;
    rgnAdd.CreateRectRgn (x,
     y, x+1, y+1);
    hrgnTotal.CombineRgn(&hrgnTotal,&rgnAdd, RGN_DIFF);
   }
  }
 }   
 for (y=nHeight-i; y<nHeight; y++)
 {
  for (int x=0; x<i; x++)
  {
   if (dcBmp.GetPixel(x,y) == color)
   {
    CRgn rgnAdd;
    rgnAdd.CreateRectRgn (x,
     y, x+1, y+1);
    hrgnTotal.CombineRgn(&hrgnTotal,&rgnAdd, RGN_DIFF);
   }
  }
  for (x=nWidth-i; x<nWidth; x++)
  {
   if (dcBmp.GetPixel(x,y) == color)
   {
    CRgn rgnAdd;
    rgnAdd.CreateRectRgn (x,
     y, x+1, y+1);
    hrgnTotal.CombineRgn(&hrgnTotal,&rgnAdd, RGN_DIFF);
   }
  }
 }
 dcBmp.DeleteDC();
 ::SetWindowRgn(pWnd->GetSafeHwnd(),(HRGN)hrgnTotal,TRUE);
}

static CString getPath()
{
 CString sPath;
 GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
 sPath.ReleaseBuffer();
 int nPos;
 nPos = sPath.ReverseFind('\\');
 sPath = sPath.Left(nPos);
 return sPath; 
}

static BOOL GXSetWindowRgn(CWnd* pWnd,int offset = 3, BOOL bReDraw = FALSE)
{
 if(!pWnd)return FALSE;
 CRgn MyRgn; 
 CRect rect;
 pWnd->GetClientRect(&rect);
 int w = rect.Width();
 int h = rect.Height();
 
 POINT Points[8];
 
 Points[0].x=offset;
 Points[0].y=0;
 
 Points[1].x=w-offset;
 Points[1].y=0;
 
 Points[2].x=w;
 Points[2].y=offset;
 
 Points[3].x=w;
 Points[3].y=h-offset;
 
 Points[4].x=w-offset;
 Points[4].y=h;
 
 Points[5].x=offset;
 Points[5].y=h;
 
 Points[6].x=0;
 Points[6].y=h-offset;
 
 Points[7].x=0;
 Points[7].y=offset;
 
 MyRgn.CreatePolygonRgn(Points, 8, ALTERNATE);
 pWnd->SetWindowRgn((HRGN)MyRgn,bReDraw);
 return TRUE;
}

static HRGN  GXCreateRgnFromBitmap(CDC * pDC, HBITMAP hBmp, COLORREF color = RGB(255,0,255))  
{  
 if(!hBmp)return NULL;  
 BITMAP bm;  
 GetObject(hBmp, sizeof(BITMAP), &bm);  
 CDC dcBmp;  
 dcBmp.CreateCompatibleDC(pDC);
 dcBmp.SelectObject(hBmp);     
 const DWORD RDHDR = sizeof(RGNDATAHEADER);  
 const DWORD MAXBUF = 40;  
 LPRECT pRects;  
 DWORD cBlocks = 0;     
 INT i, j;
 INT first = 0;  
 bool wasfirst = false;   
 bool ismask;    
 RGNDATAHEADER* pRgnData = (RGNDATAHEADER*)new BYTE[RDHDR + ++cBlocks * MAXBUF * sizeof(RECT)];  
 memset(pRgnData, 0, RDHDR + cBlocks * MAXBUF * sizeof(RECT));    
 pRgnData->dwSize =   RDHDR;  
 pRgnData->iType =   RDH_RECTANGLES;  
 pRgnData->nCount =   0;  
 for( i = 0; i < bm.bmHeight; i++)  
  for( j = 0; j < bm.bmWidth; j++)
  {  
   ismask=(dcBmp.GetPixel(j,bm.bmHeight-i-1)!=color);  
   if(wasfirst && ((ismask && (j==(bm.bmWidth-1)))||(ismask ^ (j<bm.bmWidth))))
   {   
    pRects = (LPRECT)((LPBYTE)pRgnData + RDHDR);   
    pRects[pRgnData->nCount++] = CRect(first, bm.bmHeight - i - 1, j+(j==(bm.bmWidth-1)),bm.bmHeight - i);  
    if(pRgnData->nCount >= cBlocks * MAXBUF)
    {  
     LPBYTE pRgnDataNew = new BYTE[RDHDR + ++cBlocks * MAXBUF * sizeof(RECT)];  
     memcpy(pRgnDataNew, pRgnData, RDHDR + (cBlocks - 1) * MAXBUF * sizeof(RECT));  
     delete  pRgnData;  
     pRgnData =  (RGNDATAHEADER*)pRgnDataNew;  
    }  
    wasfirst = false;  
   }  
   else if (!wasfirst && ismask)
   {   
    first = j;  
    wasfirst = true;  
   }  
  }  
  dcBmp.DeleteDC();
  HRGN hRgn=CreateRectRgn(0, 0, 0, 0);  
  ASSERT( hRgn!=NULL );  
  pRects = (LPRECT)((LPBYTE)pRgnData + RDHDR);  
  for(i=0;i<(int)pRgnData->nCount;i++)  
  {  
   HRGN   hr=CreateRectRgn(pRects[i].left, pRects[i].top, pRects[i].right, pRects[i].bottom);  
   VERIFY(CombineRgn(hRgn, hRgn, hr, RGN_OR)!=ERROR);  
   if (hr)DeleteObject(hr);  
  }  
  ASSERT( hRgn!=NULL );  
  delete  pRgnData; 
  return  hRgn;  
}

static void GXGetBitmapInfo(HBITMAP hBitmap,int *w,int *h)
{
 if(hBitmap == NULL)return;
    CDC  dcImage;  
 CBitmap m_bitmap;
 m_bitmap.Attach(hBitmap);
 BITMAP bm;
    m_bitmap.GetBitmap(&bm);
 if((&bm) != NULL)
 {
  *w=bm.bmWidth;
  *h=bm.bmHeight;
 }
 else
 {
  *w=0;
  *h=0;
 }
    m_bitmap.Detach();
 dcImage.DeleteDC();
}

struct ButtonUI
{
 CString strName;
 int x;
 int y;
 CButton PNGButton;
};

struct BitmapUI
{
 CString   strName;
 int width;
 int height;
 HBITMAP  hBitmap;
 void Delete()
 {
  DeleteObject(hBitmap);
 };
 void Draw(CDC * pDC,int x, int y ,BOOL bStretch = FALSE)
 {
  if(bStretch == FALSE)
   GXBitBlt(pDC,hBitmap,x,y,&width,&height);
  else
   GXStretchBlt(pDC,hBitmap,CRect(x,y,width,height));
 };
};

struct FrameUI
{
 HBITMAP hLBitmap;;
 HBITMAP hRBitmap;
 HBITMAP hMBitmap;
 int width;
 int height;
 int lw;
 int rw;
 CRect rect;
 void Delete()
 {
  DeleteObject(hLBitmap);
  DeleteObject(hMBitmap);
  DeleteObject(hRBitmap);
 };
 void Draw(CDC* pDC,int x, int y)
 {
  GXBitBlt(pDC,hLBitmap,x,y);
  GXBitBlt(pDC,hRBitmap,x + width - rw,y);
        GXStretchBlt(pDC,hMBitmap,CRect(x + lw , y,width - lw - rw,height));
 }
};


static void GDrawBitmap(CDC * pDC,HBITMAP hBitmap,int nLeft,int nTop,int *pNWidth = NULL,int *pNHeight = NULL)
{
 CDC dcImage;  
 if(!dcImage.CreateCompatibleDC(pDC))return;
 CBitmap m_bitmap;
 m_bitmap.Attach(hBitmap);
 BITMAP bm;
 m_bitmap.GetBitmap(&bm);
 if((&bm) == NULL )
 {
  TRACE(_T("\n------Get Bitmap Info Error!-----\n"));
  return;
 }

 if(pNHeight != NULL) *pNHeight = bm.bmHeight;
 if(pNWidth  != NULL) *pNWidth  = bm.bmWidth;

 CBitmap*   pOldBitmap   =   dcImage.SelectObject(&m_bitmap);  
 pDC->SetStretchBltMode(STRETCH_HALFTONE|STRETCH_ORSCANS|COLORONCOLOR);  
 pDC->StretchBlt(nLeft,nTop,bm.bmWidth,bm.bmHeight,&dcImage,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);  
 dcImage.SelectObject(pOldBitmap);  
 dcImage.DeleteDC();
 m_bitmap.Detach();
}

//void GXSetTransparent(HWND   hwnd,UINT   alpha)  
//{  
// typedef   BOOL(FAR   PASCAL*LAYERFUNC)(HWND,COLORREF,BYTE,DWORD);  
// LAYERFUNC   SetLayer;  
// HMODULE   hmod=LoadLibrary(_T("user32.dll"));  
// SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE)|0x80000L);  
// SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");  
// SetLayer(hwnd,0,alpha,0x2);    
// FreeLibrary(hmod);  
//}
//
//CString CharToString(const char p[])    //
//{  
// int count=strlen(p) + 1;
// CString result;
// wchar_t *temp;       
// DWORD dwNum = MultiByteToWideChar(CP_ACP,0,p,count,NULL,0); 
// temp = new wchar_t[dwNum];
// dwNum = MultiByteToWideChar(CP_ACP,0,p,count,temp,dwNum);
// result.Format(_T("%s"),temp);
// if (temp)
// {
//  delete []temp;
//  temp =NULL;
// }
// result= result.Left(dwNum);
// return result;
//}

#endif;

查看原文进入汇视招聘网http://www.spzhaopin.com

posted on 2011-03-25 18:02  arvin2012  阅读(338)  评论(0编辑  收藏  举报