我想在基于 MFC 对话框的对话框中显示某些内容,但在我的主对话框中没有显示任何内容!

Posted

技术标签:

【中文标题】我想在基于 MFC 对话框的对话框中显示某些内容,但在我的主对话框中没有显示任何内容!【英文标题】:I want to display something in a dialog in MFC Dialog-Based but it doesnt display anything in my main dialog ! 【发布时间】:2011-07-07 08:21:16 【问题描述】:

这是我在对话框中显示某些内容的代码,我将它们放在 OnPaint() 中,但是当我构建它时,我的主对话框中没有任何内容。 如果有人能告诉我代码错误,我真的很感激。

CmyDlg::OnPaint()


  CPaintDC dc(this); // device context for painting

  // TODO: Add your message handler code here
  dc.MoveTo ( 10, 10 ) ;
  dc.LineTo ( 200, 10 ) ;

  CPen mypen ( PS_SOLID, 3, RGB( 0, 0, 255)) ;
  CPen *oldpen = dc.SelectObject ( &mypen ) ;
  dc.Rectangle ( 10, 20, 200, 100 ) ;
  dc.SelectObject ( oldpen ) ;

  mypen.DeleteObject( ) ;
  mypen.CreatePen ( PS_DOT, 1, RGB ( 0, 0, 255));
  oldpen = dc.SelectObject ( &mypen ) ;
  CBrush mybrush ( RGB( 255,0,0)) ;
  CBrush *oldbrush = dc.SelectObject ( &mybrush ) ;
  dc.RoundRect ( 10, 120, 200, 220, 20, 20 ) ;
  dc.SelectObject ( oldbrush ) ;
  dc.SelectObject ( oldpen ) ;

  mypen.DeleteObject( ) ;
  mypen.CreatePen ( PS_DASH, 1, RGB(0,0,255)) ;
  oldpen = dc.SelectObject ( &mypen ) ;
  mybrush.DeleteObject( ) ;
  mybrush.CreateHatchBrush ( HS_CROSS, RGB ( 255, 0, 255 ) ) ;
  oldbrush = dc.SelectObject ( &mybrush ) ;
  dc.Ellipse ( 10, 240, 200, 340 ) ;
  dc.SelectObject ( oldbrush ) ;
  dc.SelectObject ( oldpen ) ;

  mypen.DeleteObject( ) ;
  mypen.CreatePen ( PS_DOT, 1, RGB (0, 0, 255)) ;
  oldpen = dc.SelectObject ( &mypen ) ;
  CBitmap mybitmap ;
  mybitmap.LoadBitmap ( IDB_BITMAP1 ) ;
  mybrush.DeleteObject( ) ;
  mybrush.CreatePatternBrush ( &mybitmap ) ;
  oldbrush = dc.SelectObject ( &mybrush ) ;
  dc.Pie ( 250, 10, 350, 110, 350, 110, 350, 10 ) ;

  oldpen = ( CPen* ) dc.SelectStockObject ( WHITE_PEN ) ;
  oldbrush = ( CBrush* ) dc.SelectStockObject ( NULL_BRUSH ) ;

  POINT pt[5] =  250, 150, 250, 300, 300, 350, 400, 300, 320, 190  ;  
  dc.Polygon ( pt, 5 ) ;
  dc.SelectObject ( oldpen ) ;
  dc.SelectObject ( oldbrush ) ;

  CRect r ;
  GetClientRect ( &r ) ;
  dc.TextOut ( 100, 200, "Raindrops on roses & whiskers on kittens", strlen ( "Raindrop on roses & whiskers on kittens" ) ) ;
  dc.DrawText ( "Of Words'n Figures", -1, &r, DT_SINGLELINE | DT_VCENTER | DT_CENTER ) ;

【问题讨论】:

我记得 OnPaint 默认情况下不为 MFC 对话框调用。您可以添加必要的机器(我记得我做过),或使用控件来显示内容。 @alf:我不记得必须在 MFC 对话框中执行任何特殊操作才能处理 WM_PAINT。 @Jörgen:嗯,也许那时是别的东西。也许 OP 只需要 InvalidateRect 或其他东西,例如在 OnDialogInit 中。 我认为他只是忘记将 ON_WM_PAINT() 添加到他的消息映射中...... 你是如何显示对话框的? DoModal、ShowDialog - 向我们展示代码。 【参考方案1】:

将 ON_WM_PAINT() 添加到您的消息映射中。

【讨论】:

感谢乔根!我的 .cpp 文件中也有这个:BEGIN_MESSAGE_MAP(Ctest4Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &Ctest4Dlg::OnBnClickedOk) END_MESSAGE_MAP() 但我的对话框仍然没有向我显示任何内容! 如果您在 OnPaint 中设置断点,如果您调试应用程序,它会中断执行吗? 我猜这个问题已经结束了,但是你上面写的MESSAGE_MAP是针对Ctest4Dlg的类,你问题中的类是CmyDlg。将 ON_WM_PAINT() 添加到具有该方法的类的 MESSAGE_MAP 中。

以上是关于我想在基于 MFC 对话框的对话框中显示某些内容,但在我的主对话框中没有显示任何内容!的主要内容,如果未能解决你的问题,请参考以下文章

我想在MFC的对话框中添加静态图片,请问该怎么办?

急急急!mfc中怎么在基于对话框的主界面中显示proppage属性页?最好有例子

MFC的基本对话框怎么画图?

我们可以在基于对话框的 mfc Visual Studio 2010 中绘制形状(线、圆等)吗?

怎么在基于对话框的MFC程序中实现多线程?

如何初始化模态对话框? (C++/MFC)