您的位置:首页 > 其它

使用单文档多视图切换时的视图风格问题

2012-11-19 00:35 363 查看
视图切换代码:

void CMainFrame::OnMultiline()
{
ischecked=!ischecked;

CJNoteDoc* pDoc=(CJNoteDoc*)GetActiveDocument();

CString tempString;//用于视图间赋值

if(m_pNoMultiView==0)
{
m_pDefaultView=(CJNoteView*)GetActiveView();//获取默认视图
m_pNoMultiView=new NoMultiView;//创建新视图
m_pNoMultiView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1);//创建新视图窗口
}
if(ischecked)//允许自动换行
{
m_pNoMultiView->GetWindowTextA(tempString);

//添加视图
pDoc->AddView(m_pDefaultView);

//交换ID
m_pDefaultView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pNoMultiView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);

//显示视图
m_pDefaultView->ShowWindow(SW_SHOW);
m_pNoMultiView->ShowWindow(SW_HIDE);

//激活并且赋值
SetActiveView(m_pDefaultView);
m_pDefaultView->SetWindowTextA(tempString);

//为加快更新速度而使视图与文档暂时脱钩
pDoc->RemoveView(m_pNoMultiView);

//重新计算客户区尺寸且更新窗格
this->RecalcLayout();
}
else		//不允许自动换行
{
m_pDefaultView->GetWindowTextA(tempString);

pDoc->AddView(m_pNoMultiView);

m_pDefaultView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
m_pNoMultiView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

m_pDefaultView->ShowWindow(SW_HIDE);
m_pNoMultiView->ShowWindow(SW_SHOW);

SetActiveView(m_pNoMultiView);
m_pNoMultiView->SetWindowTextA(tempString);

pDoc->RemoveView(m_pDefaultView);

this->RecalcLayout();
}
}


在调试提示错误是0x01554d1c 处最可能的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突。

我在调试过程中发现到pDoc->AddView(m_pNoMultiView)这一行(见代码)就会出错,而且在出错之前有Warning: Window creation failed: GetLastError returns 0x00000579。那应该是m_pNoMultiView->Create有问题,导致创建不成功。同时我发现m_pNoMultiView的hWnd=0xfeeefeee。

0x00000579即ERROR_INVALID_MENU_HANDLE无效的菜单句柄。

再经过分析create函数中的各个参数,发现我指定了AFX_WS_DEFAULT_VIEW,同时在文件NoMultiView中的PreCreateWindow中我指定了cs.style
&= (ES_AUTOHSCROLL|WS_HSCROLL)为了实现不自动换行,后来把这行代码注释后,顺利编译通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: