[MFC]CPaintDCとCClientDC
ダイアログベースアプリで以下を試してみた。
※ 1/15訂正
■CPaintDC
void CSampleDlg::OnPaint()
{
if (IsIconic())
{
・・・中略
}
else
{
// CDialog::OnPaint();
// ↑を削除すればOK
CPaintDC dc(this);
// 太さ2の赤色実線
CPen pen(PS_SOLID, 2, RGB(255,0,0));
CPen *old = dc.SelectObject(&pen);
dc.MoveTo(10,10);
dc.LineTo(100,100);
dc.SelectObject(old);
pen.DeleteObject();
}
}
■CClientDC
void CSampleDlg::OnPaint()
{
if (IsIconic())
{
・・・中略
}
else
{
CDialog::OnPaint();
CClientDC dc(this);
// 太さ2の赤色実線
CPen pen(PS_SOLID, 2, RGB(255,0,0));
CPen *old = dc.SelectObject(&pen);
dc.MoveTo(10,10);
dc.LineTo(100,100);
dc.SelectObject(old);
pen.DeleteObject();
}
}
結果、CPaintDCは描画されず、CClientDCは描画された。
CPaintDCはWM_PAINTメッセージをハンドルする関数のはずだけどわけがわからん。
ダイアログだから?SDIとかでOnPaint内に書けばいける?未確認。
<1/15追記>
ダイアログの基底クラスのOnPaintを呼んでいるらしく、削除したら
CPaintDCもいけた。
そもそもBeginPaintとEndPaintはきらい。
たとえコンストラクタとデストラクタでカプセル化しようとも。
CDCクラスを使うのが個人的に一番美しいと思う。