Ellipse( )

[戻る]
kep 2007/01/24(水) 22:06:58
なぜ x が -10 , yが-10(負数)で初期化されているんでしょうか?

まずWM_PAINTメッセージが処理されると思いますが、
Ellipse(hdc , -10 - 2 , -10- 2 , -10+ 2 ,-10 + 2); 

で座標が負数になると思いますが負数の座標ってあるんでしょうか?

教えてください。




LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
    HDC hdc;
    PAINTSTRUCT ps;
    static signed short int x = -10 , y = -10;

    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_MOUSEMOVE:
        if(wp & MK_LBUTTON) {
            x = LOWORD(lp);
            y = HIWORD(lp);
            InvalidateRect(hwnd , NULL , FALSE);
        }
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hwnd , &ps);
        SelectObject(hdc , GetStockObject(BLACK_BRUSH));
        Ellipse(hdc , x - 2 , y - 2 , x + 2 , y + 2);
        EndPaint(hwnd , &ps);
        return 0;
    }
    return DefWindowProc(hwnd , msg , wp , lp);
}

しま 2007/01/24(水) 22:59:24
中学校で第一象限、第二象限、第三象限、第四象限という事柄は教えないのでしょう
か?
ひょっとすると小学生なのでそんなことはご存じないのかもしれません

>負数の座標ってあるんでしょうか?
あります。Windows では SetMapMode() などで調べてみてください
MM_TEXT MM_LOMETRICS MM_HIMETRICS など色々あることが分かるでしょう

>なぜ x が -10 , yが-10(負数)で初期化されているんでしょうか?
提示のコードはあなたが書いたものではないのですか?
あなたが書いたものでなければ、そのコードを書いた方に訊くのが筋だと思います

PATIO 2007/01/25(木) 13:24:46
実際にウインドウに表示されている範囲と実際の座標空間の範囲は
必ずしも同じではありません。設定によって色々変える事ができます。
特に設定しない状態ではウインドウのクライアント部の左上隅に
原点(0,0)がくるような設定で覗き込んでいるから負の値だと
ウインドウの外に出てしまうだけです。

少なくとも中学程度の数学の知識はあるとしますが、
X軸もY軸もマイナスまである大きな空間があって小さな窓から
その大きな空間を覗き込んでいるようなイメージと言ったらわかるでしょうか。

>なぜ x が -10 , yが-10(負数)で初期化されているんでしょうか?
については、しまさんが言われている通り、コードを書いた人にしか
意図はわかりません。逆に言うと一般論から言うと(-10,-10)で
初期化する必要性と言うのは特に無いと思います。

kep 2007/01/25(木) 17:08:23
[[解決]]
皆さん回答ありがとうございます!
>SetMapMode() などで調べてみてください
情報どうも!ヒントになりました!

>実際にウインドウに表示されている範囲と実際の座標空間の範囲は
必ずしも同じではありません。

どうも!考え方がわかりました!
解り易く教えていただいてありがとうございます!

皆様ありがとうございました!

超初心者 2007/01/25(木) 22:56:08
推測だけど
プログラム起動時でウィンドウ上にマウスカーソルがないときは
Ellipseで描画されないようにするためのものだろうね。

古いスレッドには追加発言できません。