对话框背景图六种方法-PictureEx类实现对话框背景图和xSkinButton类实现按钮样式

PictureEx类下载 ;   xSkinButton类

一、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));

SetBackgroundImage


注:以上均不能实现PNG图片
加载png见  GDI+实现png图片加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值