BeginPathについて – プログラミング – Home

通知
すべてクリア

[解決済] BeginPathについて


あお
 あお
(@あお)
ゲスト
結合: 21年前
投稿: 45
Topic starter  

いつもお世話になっています。

線や円弧で書かれる自由曲線のリージョンを取得しようと
しています。
BeginPath、PathToRegionを使ってリージョンを
作成しようと思っています。

HDCをSetMapModeでMM_LOMETRICに設定してあります。
(曲線の情報がmm単位であるので)
BeginPathで作成したパスに各描画関数でいろいろ描画して
実行するとSetMapModeの設定が無効になっているみたいです。
SetMapModeの設定を保持する方法はないのでしょうか?

おわかりになる方がいらっしゃいましたら教えてください。

環境
Win2000 VS6SP5 MFCではありません


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

どの時点でMapModeが変わってしまっているか検証してみましたか?
GetMapModeでその時点のMapModeが取れると思うのでBeginPathの呼び出し前から
はじめて関数をコールするごとにチェックしてみてはどうでしょうか?

それともGetMapModeすると設定されているのに描画結果にMapModeが反映されていない
と言う意味なんでしょうか?


返信引用
あお
 あお
(@あお)
ゲスト
結合: 21年前
投稿: 45
Topic starter  

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は描画ブラシ
}
---------コード------------------


返信引用
あお
 あお
(@あお)
ゲスト
結合: 21年前
投稿: 45
Topic starter  

すみません。
PathToRegionは
”作成されたリージョンは、デバイス座標を使います。”
とあります。
そおゆう仕様でした。
お騒がせしました。
リージョンに変更せずパスのまま実行していこうと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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