MFC的窗口分割显示图片出现问题
我是将一个单文档应用程序分成左右两栏,打开图片文件后在左栏显示,左栏这个视图类CViewLeft没有与文档绑定,而我在文档中使用一个CImage来操作图片。现在问题是一运行图片的m_hBitmap==0中断,好像是m_hBitmap无效,两天了还是找不到头绪,求解救啊
MFC 窗口分割
这是CMainFrame的分割窗口代码,很简单分成了左右两栏
m_mySplitterWnd.CreateStatic(this,1,2);
CRect rect;
GetClientRect(&rect);
m_mySplitterWnd.CreateView(0,0,RUNTIME_CLASS(CViewLeft),CSize(0,0),pContext);
m_mySplitterWnd.CreateView(0,1,RUNTIME_CLASS(CViewRight),CSize(0,0),pContext);
m_mySplitterWnd.SetColumnInfo(0, rect.Width()/2,0);
然后Doc里面定义一个CImage对象
CImage m_myImage;
这是响应文件-打开的菜单操作
BOOL CSplitterTestDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: 在此添加您专用的创建代码
if(lpszPathName!=(_T("")))
{
if(!m_myImage.IsNull())
{
m_myImage.Destroy();
}
m_myImage.Load(lpszPathName);
}
return TRUE;
}
然后是直接在CViewLeft里的OnDraw添加绘图过程
void CViewLeft::OnDraw(CDC* pDC)
{
//CDocument* pDoc = GetDocument();
// TODO: 在此添加绘制代码
CMainFrame* pMainFrm=(CMainFrame*)this->GetParent()->GetParent();
CSplitterTestDoc* pDoc=(CSplitterTestDoc*)pMainFrm->GetActiveDocument();
//CImage tempImage=pDoc->m_myImage;
if(!pDoc->m_myImage.IsNull());
pDoc->m_myImage.Draw(pDC->m_hDC,0,0);
可以生成解决方案,但是运行的时候IsNULL()出现中断。
//CImage tempImage=pDoc->m_myImage;
这一行如果不注释掉的话也会出现中断,位置如下
inline bool CImage::IsNull() const throw()
{
return( m_hBitmap == NULL );
}
我怀疑OnDraw里面是不是没有正确得到CImage对象,请大家帮帮忙
[解决办法]
你自己调试看值啊 指针是不是有效的 或者用iskindof检测下是不是CDocument的子类...
[解决办法]
怎么会“视图没有与文档类相关联”?
没与 文档类 关联 的 视图 Create 时,会 有 一个 提示 “产生 无 Doc 的 view”
你 在 MainFrame 的 OnCreateClient 产生 View 时,view 已经 和 doc 关联 了。
那个 context 里 m_pCurrentDoc 就是。
所以 View 中取 Doc 要按 MFC 标准搞法。 GetDocument (自己 仿 MFC 写 一个)