開発環境はVC2005
MFCです。
赤い点線を引きたくて下記処理を行っているのですが、
CPen pen(PS_DOT, 1, RGB(255, 0, 0));
紅白の斑の点線になったしまいます。赤のみの点線を引く場合、
どのような手法になるのでしょうか。ご教授ください。
宜しくお願い致します。
どのように線を引く処理を入れていますか?
周辺のコードも載せれませんでしょうか?
私が実験してみたところ、赤白の線にはならなかったです。
一応試したコード。
ダイアログアプリでボタンクリックイベントに記述
CClientDC dc(this);
CPen pen(PS_DOT, 1, RGB(255, 0, 0)), *oldPen;
oldPen = dc.SelectObject(&pen);
// 見やすいように黒で下地を塗っておく
dc.FillSolidRect(10, 10, 110, 110, RGB(0, 0, 0));
dc.MoveTo(10, 60);
dc.LineTo(120, 60);
dc.SelectObject(oldPen);
SetBkMode() で TRANSPARENT を指定する。
Blueさんの処理を追記して記述しましたが、やはり紅白の斑になってます。
//変数定義
CClientDC dc(this);
CPen pen(PS_DOT, 1, RGB(255, 0, 0)), *oldPen;
oldPen = dc.SelectObject(&pen);
long whidth;
long height;
long haba = m_grid_haba;
long i;
long lin_x;
long lin_y;
CRect rect;
CString Str;
this->GetClientRect(&rect);
whidth = rect.right ;
height = rect.bottom ;
//TOP始点位置
lin_x = 0;
lin_y = 0;
if(m_grid == TRUE)
{
//縦線描画
for(i = 0; i < whidth /haba +1; i++)
{
dc.MoveTo(lin_x , lin_y);
lin_y = height;
dc.LineTo(lin_x, lin_y);
//移動処理
lin_x += haba;
lin_y = 0;
}
//LEFT始点位置
lin_x = 0;
lin_y = 0;
//横線描画
for(i = 0; i < height /haba +1; i++)
{
dc.MoveTo(lin_x , lin_y);
lin_x = whidth;
dc.LineTo(lin_x, lin_y);
//移動処理
lin_y += haba;
lin_x = 0;
}
}
dc.SelectObject(oldPen);
もともとは、*oldPen;を使用していませんでした。
でも結果は変わらないようです。
どこが、おかしいのでしょうか。
申し訳ありません。
林泉水さん
私のレスは見ましたか?試してみましたか?
Blueさん
FillSolidRect()を使うと、SetBkColor()でセットされている背景色がFillSolidRect()
で指定した色に置き換わります。よってBlueさんのコードでは再現しません。
http://msdn2.microsoft.com/ja-jp/library/wdxe16aw(VS.80).aspx
>FillSolidRect()を使うと、SetBkColor()でセットされている背景色がFillSolidRect()
>で指定した色に置き換わります。
そうなんですね。
ご指摘ありがとうございました。
isshiさん、Blueさん。
ありがとうございました。
SetBkMode() で TRANSPARENT を指定する。
でうまくいきました。