在一个单文档里显示一副bmp图,为什么窗体放大或缩小是图像不见了? 在一个单文档里显示了一副bmp图,为什么窗体放大或缩小时显示的图像不见了?怎样可以不管窗体的大小怎么改变,图像都存在? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的显示代码放在OnPaint里面了吗? 那当然不行了,当有WM_PAINT消息来时,窗体一刷新就没有了,一般情况下输出或是画图的代码放在OnPaint 中,如果你想在菜单中加入控制功能的话,可以在菜单事件中用Invalidate来要求重绘 void CMainFrame::OnViewBitmap() { // TODO: Add your command handler code here CFileDialog dlg(TRUE, "*.BMP", NULL, NULL,"位图文件(*.BMP)|*.bmp;*.BMP|"); CString strFileName; //CClientDC dc(this); dc = new CClientDC(this); if (dlg.DoModal() == IDOK) { strFileName = dlg.GetPathName(); HBITMAP h_map; h_map = (HBITMAP)LoadImage(AfxGetInstanceHandle(), strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); CBitmap Bitmap; Bitmap.DeleteObject(); if (!Bitmap.Attach(h_map)) { AfxMessageBox("导入背景图失败!"); return; } BITMAP bm; Bitmap.GetObject(sizeof(BITMAP),&bm); CDC MemDC; MemDC.CreateCompatibleDC(dc); MemDC.SelectObject(&Bitmap); dc->BitBlt(2, 0, bm.bmWidth ,bm.bmHeight, &MemDC, 0, 0, SRCCOPY); }}ps:dc是CMainFrame类的成员 看了一下你的代码,你的代码能显示,但是由于不是写在OnPaint中的,一出现无效区显示就没了。因为你的代码中显示的图片是从打开文件对话框中选的,所以建议采取以下的方法来处理:第一:在CXXXView类中加一个CString变量保存要打开的图片文件的文件名。第二:在CXXXView类中加入菜单处理函数,在函数调用CFileDialog打开文件,但是不LoadImage,只将获取的文件名给上面的CString变量。同时调用Invalidate引发OnPaint执行。第三:给CXXXView类加OnPaint函数,在函数中用LoadImage装入CString变量中的图片文件,然后用BitBlt显示。另外,你上面代码是写在CMainFrame类中的,一般显示等工作都是写在CView类中的。 _set_invalid_parameter_handler没有起作用,为什么? 在vc中怎么启动一个带参数的console程序 求《WTL Makes UI Programming a Joy》的中文购买或下载地址 如何用完成端口实现不阻塞的accept messagebox()中如何加入回车换行符? MFC ActiveX控件大小 菜鸟求助 进程间相互通信的问题,高手请进 InterlockedIncrement怎么用? 一个作图的问题,请高手指点一二! 字幕的问题:如何实现一段文字的滚动效果 clock_gettime是不是linux下独有的函数? malloc后 free时的问题。
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE, "*.BMP", NULL, NULL,"位图文件(*.BMP)|*.bmp;*.BMP|");
CString strFileName;
//CClientDC dc(this);
dc = new CClientDC(this); if (dlg.DoModal() == IDOK)
{
strFileName = dlg.GetPathName(); HBITMAP h_map;
h_map = (HBITMAP)LoadImage(AfxGetInstanceHandle(), strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); CBitmap Bitmap;
Bitmap.DeleteObject();
if (!Bitmap.Attach(h_map))
{
AfxMessageBox("导入背景图失败!");
return;
} BITMAP bm;
Bitmap.GetObject(sizeof(BITMAP),&bm); CDC MemDC;
MemDC.CreateCompatibleDC(dc); MemDC.SelectObject(&Bitmap);
dc->BitBlt(2, 0, bm.bmWidth ,bm.bmHeight, &MemDC, 0, 0, SRCCOPY); }}
ps:dc是CMainFrame类的成员
第一:在CXXXView类中加一个CString变量保存要打开的图片文件的文件名。
第二:在CXXXView类中加入菜单处理函数,在函数调用CFileDialog打开文件,但是不LoadImage,只将获取的文件名给上面的CString变量。同时调用Invalidate引发OnPaint执行。
第三:给CXXXView类加OnPaint函数,在函数中用LoadImage装入CString变量中的图片文件,然后用BitBlt显示。
另外,你上面代码是写在CMainFrame类中的,一般显示等工作都是写在CView类中的。