CreatePenで四角のペンを作成し、i位置を一点指定で描画させたい

解決


ryo  2007-11-13 23:16:21  No: 66840

条件:XP+VS2005sp1

主な作業は、CreatePenでペンを作成し、MoveToExとLineToで描画しています。
目的は、作成したペンで一点を指定し描画したいと考えています。

MoveToExとLineToで、同じ位置を指定した場合、
ペンが、PS_ENDCAP_ROUNDを指定した丸いペンの場合は描画されるのですが
PS_ENDCAP_SQUAREを指定すると、描画されません。

LineToは指定した点を描画しないとMSDNに書いてあるので
LineToで指定する位置をx+1して描画してみると、距離が2で描画されてしまいます
#描画したものを拡大すると、正方形ではなく横に1大きい長方形になってしまいます

PS_ENDCAP_SQUAREで、一点だけ指定して描画するにはどうした良いのでしょうか?

よろしくお願いいたします


ゴン  2007-11-16 04:11:10  No: 66841

この辺りを追求しだすとデバイスの種類やドライバによって微妙に結果が変わってくるので、四角の点を描きたいのであれば素直にRectangleを使ったほうが無難だと思います。


仲澤@失業者  2007-11-20 03:46:05  No: 66842

おつかれさまです。

LOGBRUSH  brs = { BS_SOLID, RGB( 255, 0, 0), 0};
HPEN  pen = ExtCreatePen( PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, 10, &brs, 0, NULL);
::SelectObject( hdc, pen);
MoveToEx( hdc, 10, 10, NULL);
LineTo( hdc, 10, 11);

で、赤い四角が表示されますが、これではだめなのでしょうか。


ゴン  2007-11-23 00:55:06  No: 66843

> 仲澤さん
それでは微妙に正方形ではないということですよね。

> ryoさん
まだ見ているかわかりませんが、DCのペンを使った描画はデバイスによって微妙に変化してきます。例えばプリンタで印刷するとメーカーやドライバのバージョンによってPS_ENDCAP_SQUAREを指定していても端部が丸で表現されたりすることがあります。
なので細かい部分での表現が必要なのであれば、デバイスに依存しにくいRectangleやPolygonなどを使う方が無難ですよ。


ryo  2007-11-23 12:27:14  No: 66844

>ゴンさん
返答ありがとうございます。
アドバイスどおり、一点指定の場合は四角形を直接書くことにしました

>仲澤さん
返答ありがとうございます。

最初にも書いたのですが(私はX方向でしたが)、1ずらした場合
ずらした方向に1ドット分伸びた長方形になってしまいます
#私の環境だけかもしれませんが

今回の質問では要点を絞るために一点指定についてのみ書いていますが
実際は、一点だけではなく、線を書いたりもしてします。
一点をおき、そこからずらした方向とは別の方向に線を引いたときに、
長方形に伸びた分が目立ってしまいました(¬  こんな感じ)


ryo  2007-11-23 12:28:16  No: 66845

すいません、解決をつけ忘れました。


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

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






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