【发布时间】: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 - 向我们展示代码。
标签: c++ visual-c++ mfc dialog