2011-07-09 20 views
0

このコードを使用してダイアログ内に単純な矩形を描画し、メッセージマップにON_WM_PAINT()を追加しました。それは私にダイアログに何も表示されませんでした!MFCで単純な矩形を描画するダイアログベースの

void Ctest4Dlg::OnPaint() 
{ 
    if (IsIconic()) 
    { 
     CPaintDC dc(this); // device context for painting 
     // TODO: Add your message handler code here 

     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 

     // Center icon in client rectangle 
     int cxIcon = GetSystemMetrics(SM_CXICON); 
     int cyIcon = GetSystemMetrics(SM_CYICON); 
     CRect rect; 
     GetClientRect(&rect); 
     int x = 2; 
     int y = 2; 

     // Draw the icon 
     dc.DrawIcon(x, y, m_hIcon); 

     //I want to draw a rectangle 
     dc.Rectangle(10,10,50,50); 
    } 
    else 
    { 
     CDialogEx::OnPaint(); 
    } 
} 

答えて

0

あなたの第一および最大の過ちは、ダイアログで直接描画しようとしている:誰もがコードで私の過ちを伝えることができれば、私はそれを本当に感謝しています。 ですが、ほとんど常に悪い考えです。ダイアログは、通常、コントロールのコンテナとして扱われるべきです。

+0

ダイアログの有用性は、主にコントロールを含む能力に基づいています。しかし、それを直接描画するのは悪い考えです。それが必要な場合、それはどのような問題を引き起こしますか? –

+0

@Jonathon:ダイアログに直接描画すると、描画を確実に行う上で問題が発生するようです。私はそれを見る唯一の人ではない。たとえば、Joseph Newcomerの[posts](http://groups.google.com/group/microsoft.public.vc.mfc/browse_frm/thread/88e61b2d5ae82e0a/ed8fe4997e4878e3?hl=en#ed8fe4997e4878e3)を参照してください主題 –

+0

うーん...私は時々これをやっただけで何の問題もなかった。ジョセフにも具体的な例があるようには見えません。いずれにしても、描画が集中する状況では、自分の子ウィンドウに配置します。 –

5

あなたのペイントコードは、ウィンドウが象徴的であるときにのみ実行されるように見えますか?どうしてそんなことをするのか?

CDialogEx::OnPaint()の呼び出しの後にブロックelseに入れます。