#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