一、PictureEx类对话框背景图
1.新建对话框,Border设置None
2.声明
CxSkinButton m_Button1;
CxSkinButton m_Button2;
CPictureEx m_BG;
3.定义OnInitDialog()函数加入
m_BG.Load(_T("res\\Main_background.bmp"));
m_BG.Draw();//加载背景图
m_Button1.SetSkin(_T("res\\1.bmp"), _T("res\\2.bmp"), _T("res\\3.bmp"));//加载按钮图
m_Button1.SetToolTipText(_T("这是按钮1"));//鼠标移动上面显示的提示
m_Button1.SizeToContent();//自动适应大小
//m_Button1.SetWindowText(_T(""));//屏蔽按钮上的文字
m_Button2.SetSkin(_T("res\\1.bmp"), _T("res\\2.bmp"), _T("res\\3.bmp"));//
m_Button2.SetToolTipText(_T("这是按钮2"));
m_Button2.SizeToContent();
//m_Button1.SetWindowText(_T(""));
4.加入Picture control,以左上角放置自动覆盖全对话框
5.改变Picture control Tab顺序为1
6.效果
7.vs2015 代码
http://download.csdn.net/detail/greless/9780372
二、其他方法
对话框位图 http://blog.csdn.net/u010679895/article/details/9381835方法1重载OnCtlColor
1、声明成员变量CBrush m_brush;
2、在InitDialog中添加代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加?m_brush.CreatePatternBrush(&bmp);
3、重载对话框的OnCtlColor,改最后的返回值:
return (HBRUSH)m_brush;
方法2画刷Brush
void CMFCApplication3Dlg::OnPaint()
{
CBrush m_brBk;
CPaintDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);//这个IDB_BITMAP1要自己添加;
m_brBk.CreatePatternBrush(&bitmap);
CBrush* pOldBrush= dc.SelectObject(&m_brBk);
dc.Rectangle(0, 0, 200, 200);//?这些参数可以调整图片添加位置和大小??dc.SelectObject(pOldBrush);??
方法3StretchBlt函数,可调整位图
void CMFCApplication3Dlg::OnPaint()
{
CPaintDC dc(this);
CBitmap m_bmpBK;
m_bmpBK.LoadBitmap(IDB_BITMAP1);
CRect rect;
GetClientRect(&rect);//获得目标尺寸即窗口客户区的坐标
BITMAP bitMap;//位图结构体
m_bmpBK.GetBitmap(&bitMap);//获得原图片尺寸
CDC dcMem; //目标DC
dcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DC
dcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DC
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bitMap.bmWidth, bitMap.bmHeight, SRCCOPY);
方法4磁盘加载Loadimage
void CMFCApplication3Dlg::OnPaint()
{
HANDLE m_hBmp;
CPaintDC dc(this); // 用于绘制的设备上下文
m_hBmp = LoadImage(NULL, _T("Demo.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
CBitmap bmp;//定义位图对象
bmp.Attach(m_hBmp);//将位图关联到位图句柄
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(&dc);//创建兼容性的设备上下文
memDC.SelectObject(&bmp);//选中位图对象
BITMAP BitInfo; //定义位图结构
bmp.GetBitmap(&BitInfo);//获取位图信息 //获取位图信息
int x = BitInfo.bmWidth; //获取位图宽度
int y = BitInfo.bmHeight; //获取位图高度
dc.BitBlt(0, 0, x, y, &memDC, 0, 0, SRCCOPY);//绘制位图
bmp.Detach();//分离位图句柄
memDC.DeleteDC();//释放设备上下文
bmp.DeleteObject();//释放位图对象
方法5根据位图数据直接绘图(数据流)
1.定义变量
IStream *m_pStream; //定义流对象IPicture *m_pPicture; //定义接口对象
OLE_XSIZE_HIMETRIC m_JPGWidth; //图像宽度
OLE_YSIZE_HIMETRIC m_JPGHeight; //图像高度
HGLOBAL hMem; //堆句柄
2.初始化
CMFCApplication3Dlg::CMFCApplication3Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_MFCAPPLICATION3_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
CFile file;
file.Open(_T("angell.jpg"), CFile::modeReadWrite);
DWORD len = file.GetLength();
hMem = GlobalAlloc(GMEM_MOVEABLE, len);//在堆中分配内存
LPVOID pData = NULL;
pData = GlobalLock(hMem);//锁定内存区域
//file.ReadHuge(pData,len);//
file.Read(pData, len);//读取数据到堆中
file.Close();
GlobalUnlock(hMem);//解除对堆的锁定
CreateStreamOnHGlobal(hMem, TRUE, &m_pStream);//在堆中创建流
OleLoadPicture(m_pStream, len, TRUE, IID_IPicture, (LPVOID*)&m_pPicture);//加载图像
m_pPicture->get_Height(&m_JPGHeight);
m_pPicture->get_Width(&m_JPGWidth);
}
3.实现
void CMFCApplication3Dlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
m_pPicture->Render(dc.m_hDC, 0, 0, (int)(m_JPGWidth / 26.45), (int)(m_JPGHeight / 26.45)
, 0, m_JPGHeight, m_JPGWidth, -m_JPGHeight, NULL);
4.源码
方法6系统对话框函数
设置对话框背景色
SetBackgroundColor(RGB(0,0,255));
SetBackgroundColor(RGB(0,0,255));
SetBackgroundImage
注:以上均不能实现PNG图片
加载png见
GDI+实现png图片加载