您的位置:首页 > 编程语言 > C语言/C++

用C++实现半透明按钮控件(PNG,GDI+)

2011-04-09 14:28 369 查看
View Code

#pragma once
#include "stdafx.h"
using namespace Gdiplus;

static bool ImageFromIDResource(UINT nID, LPCTSTR sTR,Image * &pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}


平铺图片的代码

CPaintDC dc(this);
CRect rect;
GetClientRect(rect);
CBrush bs(RGB(240,240,240));//窗口背景色
dc.FillRect(&rect,&bs);        //窗口着色
//填充背景图片:平铺
Graphics g(dc.m_hDC);
if(has_bg) g.DrawImage(this->bg,0,0);
Gdiplus::TextureBrush bbs(this->img);
g.FillRectangle(&bbs,0,0,rect.Width(),this->img->GetHeight());
g.ReleaseHDC(dc.m_hDC);
//TRACE(L"CMainFrame::OnPaint\r\n");


附:PNGButton类代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: