0

私は以下のようなコードを持っています。私の質問は、なぜセル A[0][0] setWindowText に何も入れないのですか?

if(LOWORD( wParam ) == 104){
    int td;
    int td_width=80;
    int tr = 0;
    int tr_height=20; 

    for (tr=0;tr<2;tr++) {
        for (td=0;td<10;td++) {
            HWND A[tr][td];

            A[tr][td] = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL,
td*td_width, tr*tr_height+50, td_width+1, tr_height+1, hwnd, NULL, hInstance, NULL );
        }
        SetWindowText(A[0][0], "MK" );
    }

}
4

2 に答える 2

4

最も内側のループ内で A[tr][td] を定義しています。これにより、スコープがそのループのみに制限されます。つまり、反復ごとに、まったく新しい配列を作成し、その要素の 1 つだけを割り当てます。

これでもコンパイルできるのは少し驚くべきことです。別の A 配列がの場所で定義されていると思いますが、それは SetWindowText 呼び出しで参照しているものです。

于 2012-12-05T18:42:10.300 に答える
1

ピーターが言ったように、配列を間違った場所で宣言しています。しかしそれ以上に、配列を固定長として宣言していますが、実行時の値を使用してその境界を指定しています。それは機能せず、コンパイルすることさえできません。固定長配列の境界は、実行時ではなくコンパイル時に認識されている必要があります。

代わりにこれを試してください:

if (LOWORD(wParam) == 104)
{
    const int td_width = 80;
    const int tr_height = 20; 

    HWND A[2][10];

    for (int tr = 0; tr < 2; ++tr)
    {
        for (int td = 0; td < 10; ++td)
        {
            A[tr][td] = CreateWindowEx( 0, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL, td*td_width, tr*tr_height+50, td_width+1, tr_height+1, hwnd, NULL, hInstance, NULL );
        }
    }

    SetWindowText(A[0][0], TEXT("MK") );
}
于 2012-12-05T19:25:26.717 に答える