いつもお世話になっています。
線や円弧で書かれる自由曲線のリージョンを取得しようと
しています。
BeginPath、PathToRegionを使ってリージョンを
作成しようと思っています。
HDCをSetMapModeでMM_LOMETRICに設定してあります。
(曲線の情報がmm単位であるので)
BeginPathで作成したパスに各描画関数でいろいろ描画して
実行するとSetMapModeの設定が無効になっているみたいです。
SetMapModeの設定を保持する方法はないのでしょうか?
おわかりになる方がいらっしゃいましたら教えてください。
環境
Win2000 VS6SP5 MFCではありません
どの時点でMapModeが変わってしまっているか検証してみましたか?
GetMapModeでその時点のMapModeが取れると思うのでBeginPathの呼び出し前から
はじめて関数をコールするごとにチェックしてみてはどうでしょうか?
それともGetMapModeすると設定されているのに描画結果にMapModeが反映されていない
と言う意味なんでしょうか?
PATIO 様返信ありがとうございます。
言葉が足りなくて申し訳ありません。
>それともGetMapModeすると設定されているのに描画結果にMapModeが反映されていない
>と言う意味なんでしょうか?
という意味です。
以下のコードを実行すると設定しているモードも返ってきます。
ですが、以下のコードで四角形のリージョンを作成して塗りつぶしてみると
描画されます。
MM_LOMETRICを設定しているので
MoveToEx(hDC, 100, 100, NULL);は
MoveToEx(hDC, 100, -100, NULL);
が正しいコードだと思うのですが違うのでしょうか?
---------コード------------------
HRGN all;
BeginPath(hDC);
// ここでGetMapModeを実行すると設定しているモードが返ってくる
if (GetMapMode(hDC) == MM_LOMETRIC){
MoveToEx(hDC, 100, 100, NULL);
LineTo(hDC, 100, 200);
LineTo(hDC, 200, 200);
LineTo(hDC, 200, 100);
LineTo(hDC, 100, 100); // 設定しているモードでは描画されないはずの関数
EndPath(hDC);
all = PathToRegion(hDC);
FillRgn(hDC, all, hBrush); // hBrushは描画ブラシ
}
---------コード------------------
すみません。
PathToRegionは
”作成されたリージョンは、デバイス座標を使います。”
とあります。
そおゆう仕様でした。
お騒がせしました。
リージョンに変更せずパスのまま実行していこうと思います。