SetGraphicsModeでの弧描画について – プログラミング – Home

通知
すべてクリア

[解決済] SetGraphicsModeでの弧描画について


ぶいしー
 ぶいしー
(@ぶいしー)
ゲスト
結合: 17年前
投稿: 19
Topic starter  

環境は、VC++6.0sp6 WindowsXPです。

長方形の右下座標を描画する必要があり、詳細グラフィックスモードにする
ようにしたのですが、(SetGraphicsModeを使用)

以下のように弧を描画した場合に、ヘルプでは、SetGraphicsMode
の所で、GM_ADVANCEDを指定した場合は弧は常に反時計回りで描画される
とあるのですが、実行してみると、どうも時計回りで描画されているようなのです。
何か、考え方が違うのでしょうか?

すいませんが、誰か教えてください。お願いします。

void CTESTView::OnDraw(CDC* pDC)
{
CTESTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。

CRect rect;
GetClientRect(&rect);
pDC->SetViewportOrg(rect.CenterPoint());

pDC->SetMapMode(MM_HIMETRIC);
::SetGraphicsMode(pDC->GetSafeHdc(), GM_ADVANCED);

CRect rect1(0, 1000, 1000, 0);
pDC->Arc(rect1, CPoint(500, 0), CPoint(1000, 500));
}


引用未解決
トピックタグ
かもねぎ
 かもねぎ
(@かもねぎ)
ゲスト
結合: 17年前
投稿: 61
 

// x の正の値は右方向、y の正の値は上方向を指します。
pDC->SetMapMode(MM_HIMETRIC);

なので時計回りになるのでないでしょうか?


返信引用
ぶいしー
 ぶいしー
(@ぶいしー)
ゲスト
結合: 17年前
投稿: 19
Topic starter  

GM_ADVANCEDを指定した場合は弧は常に反時計回りで描画されると
あるので、マッピングモードに依存しないと思ってたのですが、

MM_HIMETRICの場合は、時計回りとなるのでしょうか?


返信引用
かもねぎ
 かもねぎ
(@かもねぎ)
ゲスト
結合: 17年前
投稿: 61
 

もしかしたら・・
GDI+ と GDI のことでしょうか

たとえばSDK(Win32プロジェクト)で描画原点を中央に移動します。
図形などは中央より右下に描画されます。
当然ですよね。

その状態でGDI+を使うと設定した描画原点ではなく
画面の左上隅を原点に描画してしまいます。

見当ちがいでしょうか?


返信引用
ぶいしー
 ぶいしー
(@ぶいしー)
ゲスト
結合: 17年前
投稿: 19
Topic starter  

GDI+は使ってなく、GDIでやってるのですが、
上記のコードで、SetGrahpicsMode関数をコール
しない場合は、反時計回りで円弧が描画されるのですが、
(円弧の長さで言えば、短いものになる。)
SetGraphicsMode関数でGM_ADVANCEDを指定してコール
すると、時計回りで円弧が描画されてしまう。
(円弧の長さで言えば、長いものになる。)

ヘルプでは、常に反時計となっているので、どうしてかな
と思い、ここに記載した訳です。

もし、詳しい方がおられたら、教えて頂きたいです。

わかりにくい表現ですみません。


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

GDIではどうやら、X軸の正方向からY軸の正方向に向って回る方向を
時計回りとしているような気がします。

MM_TEXTで描画してみれば納得がいく結果になると思います。
MM_HIMETRICの場合はデバイス座標系に対してY軸が反転しているので、
見た目に反する結果になるのだと思います。


返信引用
かもねぎ
 かもねぎ
(@かもねぎ)
ゲスト
結合: 17年前
投稿: 61
 

MFCは内部でGDI+ 使ってますかね?


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

> MFCは内部でGDI+ 使ってますかね?

使ってないと思いますよ。
少なくともVC++6に関しては。


返信引用
かもねぎ
 かもねぎ
(@かもねぎ)
ゲスト
結合: 17年前
投稿: 61
 

必要ならSetArcDirectionで調整されてはいかがでしょうか?


返信引用
ぶいしー
 ぶいしー
(@ぶいしー)
ゲスト
結合: 17年前
投稿: 19
Topic starter  

かもねぎさん、ありがとうございました。

SetArcDirectionで調整することにしました。

皆さん、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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