首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC的窗口分割显示图片出现有关问题

2013-11-21 
MFC的窗口分割显示图片出现问题我是将一个单文档应用程序分成左右两栏,打开图片文件后在左栏显示,左栏这个

MFC的窗口分割显示图片出现问题
我是将一个单文档应用程序分成左右两栏,打开图片文件后在左栏显示,左栏这个视图类CViewLeft没有与文档绑定,而我在文档中使用一个CImage来操作图片。现在问题是一运行图片的m_hBitmap==0中断,好像是m_hBitmap无效,两天了还是找不到头绪,求解救啊


这是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对象,请大家帮帮忙

MFC 窗口分割
[解决办法]
引用:
Quote: 引用:

 CMainFrame* pMainFrm=(CMainFrame*)this->GetParent()->GetParent();
    CSplitterTestDoc* pDoc=(CSplitterTestDoc*)pMainFrm->GetActiveDocument();

检查下这里获得的pDoc是不是正确的吧...

我也觉得这里比较可疑,那请教下MFC里面有没有什么函数能检查这个呢?


你自己调试看值啊  指针是不是有效的 或者用iskindof检测下是不是CDocument的子类...
[解决办法]
怎么会“视图没有与文档类相关联”?
没与 文档类 关联 的 视图 Create 时,会 有 一个 提示 “产生 无 Doc 的 view”

你 在 MainFrame 的 OnCreateClient 产生 View 时,view 已经 和 doc 关联 了。
那个 context 里 m_pCurrentDoc 就是。

所以 View 中取 Doc 要按 MFC 标准搞法。 GetDocument (自己 仿 MFC 写 一个)   

热点排行