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

解決


メグロ  2007-08-08 22:23:13  No: 66007

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 22:30:06  No: 66008

NULL_BRUSHを使ってみるとか。


Blue  2007-08-08 23:14:59  No: 66009

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


メグロ  2007-08-09 02:44:38  No: 66010

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-09 02:49:31  No: 66011

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

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

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


メグロ  2007-08-09 19:18:24  No: 66012

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

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);


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加