MFC用OnFileOpen打开图片后不马上调用onDraw函数刷新,只有改变窗口后才刷新看到图片显示,为什么?高分
在MFC用菜单资源添加事件处理程序CxxxxDoc::OnFileOpen()打开图片,不马上调用onDraw函数刷新,移动窗口后才能看到图片显示。怎么才能调用Cxxxx...
在MFC用菜单资源添加事件处理程序CxxxxDoc::OnFileOpen()打开图片,不马上调用onDraw函数刷新,移动窗口后才能看到图片显示。怎么才能调用CxxxxView::OnDraw()函数,选择打开对话框后立即显示图片。
利用菜单资源添加事件处理程序CxxxxDoc::OnFileOpen()
代码如下
void CImagePCBDoc::OnFileOpen()
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrFilter=LPCTSTR(_T("JPEG(*.jpg)\0*.jpg\0BMP(*.bmp)\0*.bmp\0PNG(*.png)\0*.png\0ImagePCB Files(*.ipcb)\0*.ipcb\0Protel 99SE Files(*.pcb)\0*.pcb\0All Files(*.*)\0*.*\0\0"));
//定义打开对话框的标题
fileDlg.m_ofn.lpstrTitle=LPCTSTR(_T("打开文件"));
char szchar[20];
memset(szchar,0,20);
if (fileDlg.DoModal()==IDOK)
{
if (m_dib.Read(fileDlg.m_ofn.lpstrFile) == TRUE)
{
SetModifiedFlag(FALSE); // start off with unmodified
// 添加刷新程序
File.close();
}
}
}
我用一下几种方法都不行
第一种,在“添加刷新程序”处添加
((CImagePCBView*)((CMainFrame*)AfxGetMainWnd())-> GetActiveView())->Invalidate();
第二种,在“添加刷新程序”处添加
UpdateAllViews(NULL);
第三种,在“添加刷新程序”处添加
OnOpenDocument(fileDlg.m_ofn.lpstrFile);
其余的代码也写上供参考
void CxxxxView::OnDraw(CDC* pDC)
{
// 获取文档类指针
CImagePCBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
//返回m_dib的指针
ImageProcessing *pDib=pDoc->GetPDib();
//获取DIB的尺寸
CSize sizeFileDib = pDib->GetDimensions();
//显示DIB
pDib->Draw(pDC, CPoint(0, 0), sizeFileDib);
}
doc头文件
。。。。。
// 实现
public:
virtual ~CImagePCBDoc();
//返回m_dib的指针
ImageProcessing *GetPDib()
{
return &m_dib;
}
。。。。。
private:
//mageProcessing类的对象
ImageProcessing m_dib;
。。。。。
CImageProcessing类是一个标准图像处理类。
如果能调试过去再加100分
我可以将源代码发过去然后帮我调试,或其他方式。 VS2010的程序。
我的问题解决了,是新建立一个项目运行通过了、加的是“UpdateAllViews(NULL);”为什么 展开
利用菜单资源添加事件处理程序CxxxxDoc::OnFileOpen()
代码如下
void CImagePCBDoc::OnFileOpen()
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrFilter=LPCTSTR(_T("JPEG(*.jpg)\0*.jpg\0BMP(*.bmp)\0*.bmp\0PNG(*.png)\0*.png\0ImagePCB Files(*.ipcb)\0*.ipcb\0Protel 99SE Files(*.pcb)\0*.pcb\0All Files(*.*)\0*.*\0\0"));
//定义打开对话框的标题
fileDlg.m_ofn.lpstrTitle=LPCTSTR(_T("打开文件"));
char szchar[20];
memset(szchar,0,20);
if (fileDlg.DoModal()==IDOK)
{
if (m_dib.Read(fileDlg.m_ofn.lpstrFile) == TRUE)
{
SetModifiedFlag(FALSE); // start off with unmodified
// 添加刷新程序
File.close();
}
}
}
我用一下几种方法都不行
第一种,在“添加刷新程序”处添加
((CImagePCBView*)((CMainFrame*)AfxGetMainWnd())-> GetActiveView())->Invalidate();
第二种,在“添加刷新程序”处添加
UpdateAllViews(NULL);
第三种,在“添加刷新程序”处添加
OnOpenDocument(fileDlg.m_ofn.lpstrFile);
其余的代码也写上供参考
void CxxxxView::OnDraw(CDC* pDC)
{
// 获取文档类指针
CImagePCBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
//返回m_dib的指针
ImageProcessing *pDib=pDoc->GetPDib();
//获取DIB的尺寸
CSize sizeFileDib = pDib->GetDimensions();
//显示DIB
pDib->Draw(pDC, CPoint(0, 0), sizeFileDib);
}
doc头文件
。。。。。
// 实现
public:
virtual ~CImagePCBDoc();
//返回m_dib的指针
ImageProcessing *GetPDib()
{
return &m_dib;
}
。。。。。
private:
//mageProcessing类的对象
ImageProcessing m_dib;
。。。。。
CImageProcessing类是一个标准图像处理类。
如果能调试过去再加100分
我可以将源代码发过去然后帮我调试,或其他方式。 VS2010的程序。
我的问题解决了,是新建立一个项目运行通过了、加的是“UpdateAllViews(NULL);”为什么 展开
4个回答
展开全部
手动刷新一下,用Invalidate(FALSE);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在view中的oncreate函数中添加图片显示的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在OnDraw里面绘图试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询