塗りつぶし無しで四角形を描画するには?

解決


メグロ  2007-08-08 13:23:13  No: 66007  IP: 192.*.*.*

Visual C++ 6.0 MFC DIALOGベース  で作成しています。

ピクチャボックスにビットマップ表示を行い、任意の指定エリアに
四角形(塗りつぶし無し)を描画したいのですが、わかりません。
よろしくお願い致します。

現状の線、四角形の描画部分を記載します。

GetDlgItem(IDC_PICTURE)->InvalidateRect(NULL);
GetDlgItem(IDC_PICTURE)->UpdateWindow();
m_CDC = GetDlgItem(IDC_PICTURE)->GetDC();

CPen    lPen( PS_SOLID, 10, RGB(255,255,255) );
m_CDC->SelectObject( &lPen );

// 塗りつぶされてしまいます。
m_CDC->Rectangle(100,100,150,150);

// 線を太くした場合、角が丸く...
m_CDC->MoveTo(10, 10);
m_CDC->LineTo(100, 10);
m_CDC->LineTo(100, 100);
m_CDC->LineTo(10, 100);
m_CDC->LineTo(10, 10);

編集 削除
Blue  2007-08-08 13:30:06  No: 66008  IP: 192.*.*.*

NULL_BRUSHを使ってみるとか。

編集 削除
Blue  2007-08-08 14:14:59  No: 66009  IP: 192.*.*.*

もしくは、FrameRectで描画するとか。

編集 削除
メグロ  2007-08-08 17:44:38  No: 66010  IP: 192.*.*.*

CDC::FrameRectでの四角の描画はできたのですが、線の太さは
変更できるのでしょうか。

GetDlgItem(IDC_STATIC_BITMAP)->InvalidateRect(NULL);
GetDlgItem(IDC_STATIC_BITMAP)->UpdateWindow();
m_CDC = GetDlgItem(IDC_STATIC_BITMAP)->GetDC();

CBrush  lCBrush;
CRect  lCRect;
lCBrush.CreateSolidBrush(RGB(255,255,255));
lCRect.SetRect(200, 200, 300, 300);
m_CDC->FrameRect(lCRect, &lCBrush);

編集 削除
Blue  2007-08-08 17:49:31  No: 66011  IP: 192.*.*.*

>CDC::FrameRectでの四角の描画はできたのですが、線の太さは
>変更できるのでしょうか。
ヘルプにはっきりと書いてありますよ。
(質問するまでもないですよね?)

http://msdn2.microsoft.com/ja-jp/library/c05d02b8(VS.80).aspx
>関数は指定されたブラシを使って境界線を描きます。境界線の幅と高さは常に 1 論理単位です。 


太さを変えたいならRactangleでSelectObjectでNULL_BRUSHを指定するのが一般的でしょう。

編集 削除
メグロ  2007-08-09 10:18:24  No: 66012  IP: 192.*.*.*

理解・調査不足で申し訳ありません。
以下の内容で解決しました。
ありがとうございました。

CPen    lPen( PS_SOLID, 5, RGB(255,255,255) );
m_CDC->SelectObject( &lPen );
m_CDC->SelectStockObject(NULL_BRUSH);
m_CDC->Rectangle(0,0,200,200);

編集 削除