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;
效果:
②在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();
}
下面是效果图片:哈哈,温柔的妹子。
③可以把上步的代码替换成:
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);
效果:这个伸缩性很好。
流程是这个样子滴,但是有很多问题,写出来之后却觉得没啥问题,就该这么做。
最后还有就是,PNG,jpg,等静态图片,动态图片的加载还没做。再搞搞。
MFC,虽然不似以前那么火了,但是,还是有很多应用离不开他。