15,979
社区成员
发帖
与我相关
我的任务
分享
LRESULT CSkinButton::OnPaint(HWND hWnd)
{
HDC hDC, hMemDC, hMemDCBuf;
RECT rtRect;
HBITMAP hBitmap, hSkinBmp;
PAINTSTRUCT psPaint;
hDC = BeginPaint(hWnd, &psPaint); //目的DC
GetClientRect(hWnd, &rtRect);
hMemDC = CreateCompatibleDC(NULL);
hBitmap = CreateCompatibleBitmap(hDC, rtRect.right - rtRect.left, rtRect.bottom - rtRect.top); //这里的背景是黑色,不知道怎么弄成透明的?
hMemDCBuf = CreateCompatibleDC(NULL); //创建第二个内存DC
SelectObject(hMemDC, hBitmap); //将空白位图选进第一缓冲区
hSkinBmp = (HBITMAP)LoadImage(NULL, "Skin.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
SelectObject(hMemDCBuf, hSkinBmp);
TransparentBlt(hMemDC, 0, 0, 3, 4, hMemDCBuf, 0, 43, 3, 4, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, 3, 0, rtRect.right - 6, 4, hMemDCBuf, 3, 43, 7, 4, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, rtRect.right -3, 0, 3, 4, hMemDCBuf, 10, 43, 3, 4, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, 0, rtRect.top + 4, 3, rtRect.bottom - 7, hMemDCBuf, 0, 47, 3, 14, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, 3, rtRect.top + 4, rtRect.right - 6, rtRect.bottom - 7, hMemDCBuf, 3, 47, 7, 14, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, rtRect.right - 3, 4, 3, rtRect.bottom - 7, hMemDCBuf, 10, 47, 3, 14, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, 0, rtRect.bottom - 3, 3, 3, hMemDCBuf, 0, 61, 3, 3, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, 3, rtRect.bottom - 3, rtRect.right - 6, 3, hMemDCBuf, 3, 61, 7, 3, RGB(0xFF, 0, 0xFF));
TransparentBlt(hMemDC, rtRect.right - 3, rtRect.bottom - 3, 3, 3, hMemDCBuf, 10, 61, 3, 3, RGB(0xFF, 0, 0xFF));
BitBlt(hDC, 0, 0, rtRect.right - rtRect.left, rtRect.bottom - rtRect.top, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDCBuf);
DeleteDC(hMemDC);
DeleteObject(hSkinBmp);
DeleteObject(hBitmap);
EndPaint(hWnd, &psPaint);
return TRUE;
}