使用单文档多视图切换时的视图风格问题
2012-11-19 00:35
363 查看
视图切换代码:
在调试提示错误是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)为了实现不自动换行,后来把这行代码注释后,顺利编译通过。
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)为了实现不自动换行,后来把这行代码注释后,顺利编译通过。
相关文章推荐
- 使用VC创建单文档,并实现视图切换
- C#.NET常见问题(FAQ)-使用SharpDevelop开发 如何切换设计视图和代码视图
- Android视图切换库的使用
- VC的MDI中实现动态切换文档视图
- Jquery(Ajax)load使用方法 结合radio切换视图
- 使用apidoc 生成Restful web Api文档——新手问题与解决方法
- 常见问题:如何使用AWR报告来诊断数据库性能问题 (文档 ID 1523048.1)
- Visual C++ 2010 使用心得 和帮助文档问题
- 使用AppDelegate单例,解决子视图无法给父视图发送消息的问题
- 关于VS2005 无法使用切换到设计视图的解决方法(转)
- iOS学习之Tab Bar的使用和视图切换
- MFC单文档视图切换
- ios开发入门- TabBarController使用和多视图切换
- 使用Sandcastle Help File Builder建立MSDN风格的代码文档
- 单文档多视图切换的解决办法
- 使用视图解决在报表中的多表关联问题(转)
- jQuery使用ajax传输xml文档在IE中无法正确解析的问题
- 关于4.X系统使用安卓5.0Material风格AlertDialog全屏问题
- 使用RNSwipeViewController类库进行视图切换
- BeX5开发中MySQL视图使用的一个小问题 推荐