点線の引き方 – プログラミング – Home

通知
すべてクリア

[解決済] 点線の引き方


林泉水
 林泉水
(@林泉水)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

開発環境はVC2005
MFCです。

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

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

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


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

どのように線を引く処理を入れていますか?
周辺のコードも載せれませんでしょうか?

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

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

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
 isshi
(@isshi)
ゲスト
結合: 21年前
投稿: 41
 

SetBkMode() で TRANSPARENT を指定する。


返信引用
林泉水
 林泉水
(@林泉水)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

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


返信引用
林泉水
 林泉水
(@林泉水)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

もともとは、*oldPen;を使用していませんでした。
でも結果は変わらないようです。
どこが、おかしいのでしょうか。
申し訳ありません。


返信引用
isshi
 isshi
(@isshi)
ゲスト
結合: 21年前
投稿: 41
 

林泉水さん
私のレスは見ましたか?試してみましたか?

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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


返信引用
林泉水
 林泉水
(@林泉水)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

isshiさん、Blueさん。
ありがとうございました。
SetBkMode() で TRANSPARENT を指定する。
でうまくいきました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました