VC++工作第一天Dialog对话框加载静态背景图片之一BITMAP。

1.首先创建个工程,选对话框然后一直下一步就可以了。

2.添加资源bitmap

3.加载图片,重点来了。搜索了下网上的说法。首先自己在资源中手动添加导入一个位图(也可以根据路径然后make)。

①在类中声明:

CBrush m_brush;
然后在OnInitDialog()中加上

	CBitmap bmp;
	bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加
	m_brush.CreatePatternBrush(&bmp);
最后在OnCtlColor()(这个函数可以在消息中添加)中改写返回值:

return (HBRUSH)m_brush;
效果:

VC++工作第一天Dialog对话框加载静态背景图片之一BITMAP。_第1张图片

②在OnPaint()中

一定要注意这段代码的位置,放到其他地方都是不行的(if的第一个分支不走,第二个分支为什么放到OnPaint后面不行呢?)。

if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文


		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);


		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;


		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CPaintDC dc(this); // 用于绘制的设备上下文
		CBitmap   bitmap;
		bitmap.LoadBitmap(IDB_BITMAP1);    //这个IDB_BITMAP1要自己添加
		CBrush   brush;
		brush.CreatePatternBrush(&bitmap);
		CBrush*   pOldBrush   =   dc.SelectObject(&brush);
		dc.Rectangle(0,0,200,200);   // 这些参数可以调整图片添加位置和大小
		dc.SelectObject(pOldBrush);


		CDialogEx::OnPaint();
	}
下面是效果图片:哈哈,温柔的妹子。

VC++工作第一天Dialog对话框加载静态背景图片之一BITMAP。_第2张图片

③可以把上步的代码替换成:


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);
效果:这个伸缩性很好。

VC++工作第一天Dialog对话框加载静态背景图片之一BITMAP。_第3张图片




流程是这个样子滴,但是有很多问题,写出来之后却觉得没啥问题,就该这么做。

最后还有就是,PNG,jpg,等静态图片,动态图片的加载还没做。再搞搞。

MFC,虽然不似以前那么火了,但是,还是有很多应用离不开他。

你可能感兴趣的:(VC++)