長方形

[戻る]
rect 2007/03/01(木) 18:30:21
長方形を10個並べるプログラムなんですが、
うまくいきません。
おそらくRectangle()の部分が間違いだと思いますが、

(width+=20) の設定は文法的に間違っているんでしょうか?
教えてください。


LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {

    HDC hdc;
    PAINTSTRUCT ps;
            int i,    width=0;
     
    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
        
    case WM_PAINT:
        hdc = BeginPaint(hwnd , &ps);
               for(i=0;i<10;i++)
        Rectangle(hdc , width, 0,  (width+=20)  , 180);
                
        EndPaint(hwnd , &ps);
        return 0;
    }
    return DefWindowProc(hwnd , msg , wp , lp);
}

Blue 2007/03/01(木) 18:57:58
おそらく、第2引数と第4引数でwidthという同じ変数を使っているから不味いのではな
いでしょうか?
未定義動作なのかな。

確認用サンプル
#include <iostream>

void test(int n) { std::cout << n << std::endl; }
void test(int n, int m) { std::cout << n << ":" << m << std::endl; }

int main()
{
    int n = 0;
    test((n += 10));

    n = 0;
    test(n, (n += 10)); // VC6 だと 10:10 になる

    return 0;
}

Borrel 2007/03/01(木) 22:29:32
for(i=0;i<10;i++)
        Rectangle(hdc , width, 0,  (width+=20)  , 180);

 この部分ですが、for文でループをまわしていますが、肝心の変数iがどこにもないような気
がするのですが、いかがでしょう? width+=20は問題ないと思います。
 たとえば、

for(i=0;i<10;i++)
        Rectangle(hdc , width, 0,  (width+=20*i)  , 180);

としたら、どうでしょうか?

Borrel 2007/03/01(木) 22:35:17
↑for(i=0;i<10;i++)
        Rectangle(hdc , width, 0,  (width+=20i)*i  , 180);
の間違いでした。

Borrel 2007/03/01(木) 22:37:14
あれ、なんか頭がおかしくなってたみたいです。
的外れなことを申してすいません。(反省)

wclrp ( 'o') [HomePage] 2007/03/01(木) 22:51:03
Rectangle(hdc , width, 0,  (width+=20)  , 180);
こういうのはよくないよ。
コンパイラが引数を評価する順序は決められていない(確かそんなことだった)。

> うまくいきません。
あなたが、どういう動作を期待していて
実際にどうやったらどうなってしまったのか言ってもらわないと
回答に困ると思うけど。

wclrp ( 'o') [HomePage] 2007/03/01(木) 23:04:06
これで一応四角は出るよ。

for(i=0;i<10;i++)
{
  Rectangle(hdc , width, 0, width + 20, 180);
  width += 20;
}

rect 2007/03/02(金) 19:03:45
皆様回答どうもありがとうございます!
いろいろな回答ありがとうございます!
>コンパイラが引数を評価する順序は決められていない(確かそんなことだった)。

勉強になりました!
どうもありがとございます。

rect 2007/03/02(金) 19:04:07
[[解決]]
解決!

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