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

视图切换代码:

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)为了实现不自动换行,后来把这行代码注释后,顺利编译通过。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值