私はMFCを学んでいますが、MFCダイアログベースのアプリケーションのメインウィンドウにいくつかの線を描こうとしていますが、それはむしろ単純な作業ですが、実行中はダイアログに線が表示されません。CDC :: LineTo()がVisual C++ 2015 MFCダイアログで描画されないのはなぜですか?
// draw corner of a rectangle on specified device context
void CTestDrawCornerDlg::DrawCorner(
CDC* pDC,
const CornerType& type,
const CPoint& position,
const unsigned int& size
)
{
CPen pen(PS_SOLID, 5, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&pen);
CPoint pH, pV;
// I could make following lines simply with a 2-lines block,
// but I'd leave it as it was to make it easier to understand.
switch (type)
{
case LEFT_TOP:
pH.x = position.x + size;
pH.y = position.y;
pV.x = position.x;
pV.y = position.y + size;
break;
case LEFT_BOTTOM:
pH.x = position.x - size;
pH.y = position.y;
pV.x = position.x;
pV.y = position.y + size;
break;
case RIGHT_TOP:
pH.x = position.x + size;
pH.y = position.y;
pV.x = position.x;
pV.y = position.y - size;
break;
case RIGHT_BOTTOM:
pH.x = position.x - size;
pH.y = position.y;
pV.x = position.x;
pV.y = position.y - size;
break;
default: break;
}
pDC->MoveTo(position);
pDC->LineTo(pH);
pDC->MoveTo(position);
pDC->LineTo(pV);
pDC->SelectObject(pOldPen);
}
をそして、私はダイアログクラスののOnPaintメソッドでこのメソッドを呼び出した:
void CTestDrawCornerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
// lines generated automatically when creating
// MFC project are truncated for brevity
}
else
{
CDialogEx::OnPaint();
}
CPaintDC pDC(this);
DrawCorner(&pDC, LEFT_TOP, CPoint(50, 50), 50);
}
私はそれが初心者の間違いだと思うけど、私はただ知らない後
は、私が書いた方法であり、間違いは何ですか?手伝ってくれてありがとう!
P.S.再作成し、この問題には次のリンクからMFCプロジェクトをダウンロードしてください: https://www.dropbox.com/s/exeehci9kopvgsn/TestDrawCorner.zip?dl=0
コードは問題ありません。 ON_WM_PAINTを持っていない可能性があります –
ON_WM_PAINTは、ダイアログプロジェクトの作成時にデフォルトで宣言されています。私はこのポストに小さなデモプロジェクトをアップロードしようとしていましたが、今はその方法を理解していませんでした... –
私は、DrawCornerコールをOnPaint()メソッド、すなわちCDialogEx :: OnPaint()を呼び出す前に呼び出されます。そして、私はダイアログで期待される線を得ることができます。理由が誰にでも答えられるようにまだ開いています... –