条件:XP+VS2005sp1
主な作業は、CreatePenでペンを作成し、MoveToExとLineToで描画しています。
目的は、作成したペンで一点を指定し描画したいと考えています。
MoveToExとLineToで、同じ位置を指定した場合、
ペンが、PS_ENDCAP_ROUNDを指定した丸いペンの場合は描画されるのですが
PS_ENDCAP_SQUAREを指定すると、描画されません。
LineToは指定した点を描画しないとMSDNに書いてあるので
LineToで指定する位置をx+1して描画してみると、距離が2で描画されてしまいます
#描画したものを拡大すると、正方形ではなく横に1大きい長方形になってしまいます
PS_ENDCAP_SQUAREで、一点だけ指定して描画するにはどうした良いのでしょうか?
よろしくお願いいたします
この辺りを追求しだすとデバイスの種類やドライバによって微妙に結果が変わってくるので、四角の点を描きたいのであれば素直にRectangleを使ったほうが無難だと思います。
おつかれさまです。
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);
で、赤い四角が表示されますが、これではだめなのでしょうか。
> 仲澤さん
それでは微妙に正方形ではないということですよね。
> ryoさん
まだ見ているかわかりませんが、DCのペンを使った描画はデバイスによって微妙に変化してきます。例えばプリンタで印刷するとメーカーやドライバのバージョンによってPS_ENDCAP_SQUAREを指定していても端部が丸で表現されたりすることがあります。
なので細かい部分での表現が必要なのであれば、デバイスに依存しにくいRectangleやPolygonなどを使う方が無難ですよ。
>ゴンさん
返答ありがとうございます。
アドバイスどおり、一点指定の場合は四角形を直接書くことにしました
>仲澤さん
返答ありがとうございます。
最初にも書いたのですが(私はX方向でしたが)、1ずらした場合
ずらした方向に1ドット分伸びた長方形になってしまいます
#私の環境だけかもしれませんが
今回の質問では要点を絞るために一点指定についてのみ書いていますが
実際は、一点だけではなく、線を書いたりもしてします。
一点をおき、そこからずらした方向とは別の方向に線を引いたときに、
長方形に伸びた分が目立ってしまいました(¬ こんな感じ)
すいません、解決をつけ忘れました。
ツイート | ![]() |