怎么实现点击菜单变换背景图片 我用VC做了个界面,有菜单項背景设置,在背景设置下有子菜单自然风景、云中峭壁,在资源视图中也导入了两张图片,下面怎么做实现点击自然风景菜单出现一背景图片,再点击云中峭壁又换成另一张背景图片 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样讲吧,你的project是基于SDI or dialog或者其他的哦.如果是sdi那就在定义一个成员变量保存你要保存的图像了,再ondraw中画,只需在需要的时候切换全局变量中得值就可以了。dialog则在onpaint中完成了. BOOL CMyView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CDC MemDC; BITMAP bm; CBitmap Bitmap; Bitmap.LoadBitmap(IDB_BITMAP1); Bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&Bitmap); pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC, 0,0,SRCCOPY); return TRUE; return CView::OnEraseBkgnd(pDC);}我在OnEraseBkgnd中加入上面代码出现窗口的背景图片了,我就是想点击实现点击自然风景菜单出现一背景图片,再点击云中峭壁又换成另一张背景图片 你说的应该是SDI吧 重写OnPaint();先在View里设置一个变量,单击菜单项时设置变量的值;比如自然风景对应1,云中峭壁设为2...void CCleanControlView::OnPaint(){ CBitmap bmp; switch(m_nPic)//m_nPic为对应变量 { case 0: bmp.LoadBitmap(IDB_BITMAP1); break; case 1: bmp.LoadBitmap(IDB_BITMAP6); break; case 2: bmp.LoadBitmap(IDB_BITMAP2); break; case 3: bmp.LoadBitmap(IDB_BITMAP3); break; case 4: bmp.LoadBitmap(IDB_BITMAP4); break; case 5: bmp.LoadBitmap(IDB_BITMAP5); break; default: bmp.LoadBitmap(IDB_BITMAP1); } CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc);//创建内存DC CBitmap *pOldbmp = memDC.SelectObject(&bmp); //将位图加载到内存DC CRect rc; GetClientRect(rc);//获取客户区大小 dc.BitBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY}}另外 单击菜单项的函数里,设置m_nPic后用Invalidate(true)刷新一下即可 楼上的方法可行 不过有几个问题1.不能用OnPaint画背景,否则画出来的背景会覆盖住其他控件,只能放在OnEraseBkgnd里画2.GDI对象没有释放,在函数结束时应该调用CBitmap对象的DeleteObject、CDC对象的DeleteDC。否则画的次数多了可能造成系统资源不足 xxrlily //赞一个 13楼的朋友,你说我想实现它,下面的代码怎么改?BOOL CMyView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CDC MemDC; BITMAP bm; CBitmap Bitmap; Bitmap.LoadBitmap(IDB_BITMAP1); Bitmap.GetObject(sizeof(BITMAP),&bm); MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(&Bitmap); pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC, 0,0,SRCCOPY); return TRUE; return CView::OnEraseBkgnd(pDC);} OnMenuitem()函数里设置 OnMenuitem1(){ m_nPic=1; Invalidate(true);} MAKEINTRESOURCE宏的问题 DoModal()是不是会受其它非模态对话框影响? 关于动态链接库的问题! 帮偶看下这个IPC编程的错怎么改 我安装vs2008后少文件,哪位大哥可以发给我的 在线,急!关于DLL服务程序的问题!换成建线程代码就无法正常!一启用就关闭! 有关数据库的问题,我怎么有不能取出一个datetime类型的字段该怎么办?很奇怪的问题!! 怎样得到进程的句柄?? ActiveX中的对话框按钮无响应,求救啊! 关于TCP/IP在发送数据时候数据被覆盖的问题 VC2005开发的DLL无法在CB6中调用 vc2005 加载动态库
{
// TODO: Add your message handler code here and/or call default
CDC MemDC;
BITMAP bm;
CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
Bitmap.GetObject(sizeof(BITMAP),&bm);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&Bitmap);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,
0,0,SRCCOPY);
return TRUE;
return CView::OnEraseBkgnd(pDC);}
我在OnEraseBkgnd中加入上面代码出现窗口的背景图片了,我就是想点击实现点击自然风景菜单出现一背景图片,再点击云中峭壁又换成另一张背景图片
先在View里设置一个变量,单击菜单项时设置变量的值;比如自然风景对应1,云中峭壁设为2...
void CCleanControlView::OnPaint()
{
CBitmap bmp;
switch(m_nPic)//m_nPic为对应变量
{
case 0:
bmp.LoadBitmap(IDB_BITMAP1);
break;
case 1:
bmp.LoadBitmap(IDB_BITMAP6);
break;
case 2:
bmp.LoadBitmap(IDB_BITMAP2);
break;
case 3:
bmp.LoadBitmap(IDB_BITMAP3);
break;
case 4:
bmp.LoadBitmap(IDB_BITMAP4);
break;
case 5:
bmp.LoadBitmap(IDB_BITMAP5);
break;
default:
bmp.LoadBitmap(IDB_BITMAP1);
} CPaintDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);//创建内存DC
CBitmap *pOldbmp = memDC.SelectObject(&bmp); //将位图加载到内存DC
CRect rc;
GetClientRect(rc);//获取客户区大小
dc.BitBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY}
}
另外 单击菜单项的函数里,设置m_nPic后用Invalidate(true)刷新一下即可
1.不能用OnPaint画背景,否则画出来的背景会覆盖住其他控件,只能放在OnEraseBkgnd里画
2.GDI对象没有释放,在函数结束时应该调用CBitmap对象的DeleteObject、CDC对象的DeleteDC。否则画的次数多了可能造成系统资源不足
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CDC MemDC;
BITMAP bm;
CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
Bitmap.GetObject(sizeof(BITMAP),&bm);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&Bitmap);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,
0,0,SRCCOPY);
return TRUE;
return CView::OnEraseBkgnd(pDC);}
{
m_nPic=1;
Invalidate(true);
}