用VC开发的一个单文档程序用(不是MFC框架)怎么设置窗口的背景图片啊

cunzhangdaren 2015-07-14 04:29:36
我查了一有说是在 WM_ERASEBKGND消息响应里实现,具体怎么实现的那,我插入了一个bmp文件并且有了这个资源ID号IDB_BMP。下面怎么实现那
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cunzhangdaren 2015-07-15
  • 打赏
  • 举报
回复
引用 4 楼 pcradio 的回复:
void OnDraw(CDC* pDC)
{
	CTestBitBltDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CBitmap bmp;
	bmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	memDC.SelectObject(&bmp);
	BITMAP bitmap;
	bmp.GetBitmap(&bitmap);
	pDC->BitBlt(0, 0, bitmap.bmWidth, bitmap.bmHeight, &memDC, 0, 0, SRCCOPY);
}
不是用MFC写的程序,所以没有ondraw(CDC* pdc)。在消息里怎么写,下边是消息WM_ERASEBKGND你看怎么改那。。 LRESULT WYBWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_ERASEBKGND: { CBitmap bmBack; HDC m_dcBack; bmBack.LoadBitmap(IDB_BITMAP4); HDC hdc=GetDC(hWnd); m_dcBack=SelectObject(&bmBack); BitBlt(hdc,0,0,539,485,m_dcBack,0,0,SRCCOPY); return TRUE; } case WM_PAINT:
阿源是少年 2015-07-15
  • 打赏
  • 举报
回复
void OnDraw(CDC* pDC)
{
	CTestBitBltDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CBitmap bmp;
	bmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	memDC.SelectObject(&bmp);
	BITMAP bitmap;
	bmp.GetBitmap(&bitmap);
	pDC->BitBlt(0, 0, bitmap.bmWidth, bitmap.bmHeight, &memDC, 0, 0, SRCCOPY);
}
cunzhangdaren 2015-07-15
  • 打赏
  • 举报
回复
引用 2 楼 pcradio 的回复:
1.WM_ERASEBKGND和WM_PAINT的响应函数里都可以做,任选一。 如果在WM_PAINT里做,那么响应WM_ERASEBKGND并return FALSE 如果在WM_ERASEBKGND里做,那么OnDraw就什么也别做 2.CBitmap加载
CBitmap bitmap;
bitmap.LoadBitmap (MAKEINTRESOURCE(IDB_BMP));
然后BitBlt就可以了
这个bitblt怎么用的那
阿源是少年 2015-07-15
  • 打赏
  • 举报
回复
消息里写可以这样,WM_ERASEBKGND return TRUE,放到WM_PAINT里做:
case WM_PAINT:
		{
			PAINTSTRUCT ps = { 0 };
			BeginPaint(hWnd, &ps);
			HBITMAP hBmp = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
			BITMAP bitmap;
			GetObject(hBmp, sizeof(BITMAP), &bitmap);
			HDC memDC = CreateCompatibleDC(ps.hdc);
			SelectObject(memDC, hBmp);
			BitBlt(ps.hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, memDC, 0, 0, SRCCOPY);
			DeleteDC(memDC);
			EndPaint(hWnd, &ps);
		}
		return 0;
阿源是少年 2015-07-14
  • 打赏
  • 举报
回复
1.WM_ERASEBKGND和WM_PAINT的响应函数里都可以做,任选一。 如果在WM_PAINT里做,那么响应WM_ERASEBKGND并return FALSE 如果在WM_ERASEBKGND里做,那么OnDraw就什么也别做 2.CBitmap加载
CBitmap bitmap;
bitmap.LoadBitmap (MAKEINTRESOURCE(IDB_BMP));
然后BitBlt就可以了
赵4老师 2015-07-14
  • 打赏
  • 举报
回复
BitBlt ?

16,372

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧