点線の引き方

[戻る]
林泉水 2007/02/28(水) 16:57:36
開発環境はVC2005
MFCです。

赤い点線を引きたくて下記処理を行っているのですが、

CPen pen(PS_DOT, 1, RGB(255, 0, 0));

紅白の斑の点線になったしまいます。赤のみの点線を引く場合、
どのような手法になるのでしょうか。ご教授ください。
宜しくお願い致します。

Blue 2007/02/28(水) 17:13:17
どのように線を引く処理を入れていますか?
周辺のコードも載せれませんでしょうか?


私が実験してみたところ、赤白の線にはならなかったです。
一応試したコード。

ダイアログアプリでボタンクリックイベントに記述

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

isshi 2007/02/28(水) 17:17:06
SetBkMode() で TRANSPARENT を指定する。

林泉水 2007/02/28(水) 18:10:44
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);

林泉水 2007/02/28(水) 18:12:42
もともとは、*oldPen;を使用していませんでした。
でも結果は変わらないようです。
どこが、おかしいのでしょうか。
申し訳ありません。

isshi 2007/02/28(水) 21:12:22
林泉水さん
私のレスは見ましたか?試してみましたか?

Blueさん
FillSolidRect()を使うと、SetBkColor()でセットされている背景色がFillSolidRect()
で指定した色に置き換わります。よってBlueさんのコードでは再現しません。
http://msdn2.microsoft.com/ja-jp/library/wdxe16aw(VS.80).aspx

Blue 2007/02/28(水) 22:14:02
>FillSolidRect()を使うと、SetBkColor()でセットされている背景色がFillSolidRect()
>で指定した色に置き換わります。
そうなんですね。
ご指摘ありがとうございました。

林泉水 2007/03/01(木) 09:51:50
[[解決]]
isshiさん、Blueさん。
ありがとうございました。
SetBkMode() で TRANSPARENT を指定する。
でうまくいきました。

古いスレッドには追加発言できません。