私は一般的にMFCとWindowsプログラミングに不慣れで、これは私が理解していないものです
.OnPaintでCClientDCを使用せず、CPaintDCのみを使用するように読んでいるどこでも
、私のコードでは、長方形の描画関数をデフォルトのOnPaintに追加します() ウィザードを使用してダイアログ ベースの MFC アプリケーションを作成するときに作成されるハンドラー
void Cgraph_on_dlgboxDlg::OnPaint()
{
CPaintDC dc(this); // ----------------------------> LINE 1
if (IsIconic())
{
// CPaintDC dc(this); // device context for painting // ----------------------------> LINE 2
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 = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
COLORREF pencolour = RGB(0, 0, 0);
COLORREF brushcolour = RGB(0, 0, 255);
CPen pen(PS_SOLID, 5, pencolour);
CBrush brush(HS_CROSS, brushcolour);
// CPaintDC Dc(this); // ----------------------------> LINE 3
// CClientDC Dc(this); // ----------------------------> LINE 4
dc.SetBkMode(TRANSPARENT);
/****
get rectangle coordinates and properties
****/
dc.Rectangle(CRect(point1, point2));
}
このコードでは、もともとLINE 1
存在しません。この場合、CClientDC
が で宣言されている場合、プログラムは四角形を描画しますが、が有効LINE 4
になっている では何も描画しません。の CPaintDC を削除し、LINE 3 と 4 をコメントアウトすると機能します。なぜこうなった?私が理解したことから、ここでは CClientDC はまったく機能しないはずですか、それとも何か不足していますか?
繰り返しますが、 in は if ブロック内のみにスコープを持つべきではありませんか? CPaintDC を 2 回宣言すると出力がまったく作成されないのはなぜですか?CPaintDC
LINE 3
LINE 2
LINE 1
CPaintDC
LINE 2