我只是想在项目中(单文档或多文档都可以)点击菜单项“打开”,弹出一个选择文件的对话框,选择一张图片,并在文档中打开。
我的代码是这样的,可以通过编译,但是运行报错(在打开文件选择框,选择完文件后,点击“打开”,出错,也没有显示出图片)
void CYtrytView::OnFileReopen()
{
char szFilter[] = "Bitmap(*.BMP)|*.BMP||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
if(dlg.DoModal() == IDOK)
{
CString filename = dlg.GetPathName();
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pBmp = new CBitmap();
m_pBmp->Attach(hBitmap);
}
CDC* pDC;
OnDraw1(pDC);
}
void CYtrytView::OnDraw(CDC* pDC)
{
CYtrytDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dcMemory;
CBitmap* pOldBmp;
dcMemory.CreateCompatibleDC(pDC);
pOldBmp = dcMemory.SelectObject(m_pBmp);
pDC->BitBlt(0,0,100,100,
&dcMemory,0,0,SRCCOPY);
dcMemory.SelectObject(pOldBmp);
}
我的代码是这样的,可以通过编译,但是运行报错(在打开文件选择框,选择完文件后,点击“打开”,出错,也没有显示出图片)
void CYtrytView::OnFileReopen()
{
char szFilter[] = "Bitmap(*.BMP)|*.BMP||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
if(dlg.DoModal() == IDOK)
{
CString filename = dlg.GetPathName();
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pBmp = new CBitmap();
m_pBmp->Attach(hBitmap);
}
CDC* pDC;
OnDraw1(pDC);
}
void CYtrytView::OnDraw(CDC* pDC)
{
CYtrytDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dcMemory;
CBitmap* pOldBmp;
dcMemory.CreateCompatibleDC(pDC);
pOldBmp = dcMemory.SelectObject(m_pBmp);
pDC->BitBlt(0,0,100,100,
&dcMemory,0,0,SRCCOPY);
dcMemory.SelectObject(pOldBmp);
}
解决方案 »
- 用MFC编一个测试界面,输出为16进制的信号,用什么方法编比较方便??
- 继续等高手!
- VC 画坐标图??????
- IUpdate ::MaxDownloadSize 这玩意取不出来DECIMAL是为啥?
- 已知一个WEB服务,xml接口已定义好,请问用VC如何去调用和获取这个数据呢?
- 关于“文件夹拷贝显示进度条问题”
- 谁能给小弟个Vc和Access相连的程序设计步骤或例子,不胜感激
- 为什么说我的_beginthread和_endthread没有定义啊
- ado : 为什么update没有写入数据库呢?
- 一个由#define _WIN32_WINNT 0x0500引出的问题
- 输出字体的一个程序中遇到的问题
- VC中 ADO 如何从一个数据库中读取一个表的名称?如何读取系统表除外的所有表名
{
Invalidate();
UpdateWindow();
CDC *dc = GetDC();
CDC THDC;
HBITMAP THBM;
BITMAP bmp;
CFileDialog dlg(TRUE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL);
if(dlg.DoModal() == IDOK)
{
OldFile = dlg.GetPathName();
THBM=(HBITMAP)LoadImage(NULL,OldFile,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);//载入位图
GetObject(THBM,sizeof(bmp),&bmp);
if(THDC == NULL)
{
THDC.CreateCompatibleDC(dc);
}
else
{
AfxMessageBox("图像处理出错,请关闭程序重新打开!");
}
GetObject(THBM,sizeof(bmp),&bmp);//取得位图信息
SelectObject(THDC,THBM);//选入位图至内存DC
dc->BitBlt(0,0,bmp.bmWidth, bmp.bmHeight,&THDC,0,0,SRCCOPY);
DeleteObject(THBM);//删除位图
}
ReleaseDC(dc);
DeleteDC(THDC);
}
可以重复打开.
MemDC.CreateCompatibleDC(&ClientDC);
if(m_cs_path.GetLength() != 0)
{
m_Bitmap.m_hObject = ::LoadImage(AfxGetInstanceHandle(),m_cs_path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
MemDC.SelectObject(m_Bitmap.m_hObject);
::GetObject(m_Bitmap.m_hObject,sizeof(m_BM),&m_BM);
ClientDC.PlgBlt(p,&MemDC,0,0,m_BM.bmWidth,m_BM.bmHeight,m_Bitmap1,0,0);
}
MemDC.DeleteDC();
m_Bitmap.DeleteObject();
p是这样定义的
p[0].x = 0;
p[0].y = 0;
p[1].x = 宽值;
p[1].y = 0;
p[2].x = 0;
p[2].y = 高值;
point p