MFC bug: MDI + CHtmlView + splitter + Windows 7 Aero Peek = error?

 

再现步骤

  1. 用VS2010新建一个MFC Application项目。
  2. 在生成向导(wizard)中做以下设置:
  3. Application Type页:选择Multiple Documents(缺省)
  4. User Interface页:勾上Split window
  5. Generated Classes页:View的Base class选择CHtmlView
  6. 完成生成向导
  7. 编译Debug版本生成MFC应用程序
  8. 启动程序,用菜单File/New生成两个以上的文档窗口
  9. 在Windows 7环境下使用任务栏的Aero Peek功能预览该程序的文档窗口
  10. 程序报错
 

出错原因

 
1.
void CScrollView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { //... #ifdef _DEBUG if (m_nMapMode == MM_NONE) { TRACE(traceAppMsg, 0, "Error: must call SetScrollSizes() or SetScaleToFitSize()"); TRACE(traceAppMsg, 0, "/tbefore painting scroll view./n"); ASSERT(FALSE); return; } #endif //_DEBUG // }
2.
void CHtmlView::OnDraw(CDC* /* pDC */) { // this class should never do its own drawing; // the browser control should handle everything ASSERT(FALSE); }

解决方案

 
1. 在OnInitialUpdate方法中调用SetScrollSizes
void CXXView::OnInitialUpdate() { CHtmlView::OnInitialUpdate(); SetScrollSizes ( MM_TEXT,CSize (0 , 0 ) ); Navigate2(_T("http://www.msdn.microsoft.com/visualc/"),NULL,NULL); }
2. 覆盖CHtmlView的OnDraw方法
void CXXView::OnDraw(CDC* /*pDC*/) { }

你可能感兴趣的:(windows,application,mfc,interface,scroll,wizard)