0

これは些細な質問のように思えるかもしれませんし、その答えが明確な目的を果たさない質問のように思えるかもしれませんが、私は純粋に知識と好奇心のために質問しています.

Win32 API を使用してプログラミングの知識を広げること以外に実際の目的のない Win32 GUI アプリケーションを作成しています。プログラムが起動されて WM_CREATE になった後、コントロール (特にテキスト フィールドとボタン) を作成する方法を考えています。呼ばれました。

UpdateWindow を使用すると WM_CREATE メッセージがウィンドウに送信されることはわかっていますが、正しく理解すれば、ソース内の WM_CREATE に既に記述されているものを更新するだけですか?

私が求めているのは、クリックすると別のボタンを追加するボタンと、クリックするとテキスト フィールドを追加するボタンです。

そして、コントロールではありませんが、クリック時に TextOut() または何かでテキストをペイントする別のボタン。

私はこれを探して過去2時間Googleを精査してきましたが、運がありませんUpdateWindow()でしRedrawWindow()た.

私はあなたたちに私のためにコードを書くように頼んでいませんが、それは素晴らしいことです:P

前もってありがとう、ティミー

また、私は VS10 で C++ を使用しており、.NET や MFC は使用していません。純粋な C++ のみです:D

編集:

main.cpp、メッセージ ループ:

case WM_CREATE:
hedit = ctrls->createTextArea(100, 50, 100, 20, ghInstance, hWnd, hEdit1);
hedit2 = ctrls->createBtn(200, 50, 100, 20, ghInstance, hWnd, "button", btn1);
return 0;

ctrls はコントロール クラス オブジェクトを参照し、このクラスの createTextArea と createBtn は次のようになります。

HWND controls::createTextArea(int x, int y, int width, int height, HINSTANCE hInst, HWND parent, int id)
{
return CreateWindowEx(NULL,
            "Edit",
            "",
            WS_CHILD | WS_VISIBLE | ES_PASSWORD | WS_BORDER,
            x, y,
            width,height,
            parent, (HBRUSH)id,
            hInst,
            NULL);
}



HWND controls::createBtn(int x, int y, int width, int height, HINSTANCE hInst, HWND parent, LPCSTR btnText, int id)
{
    return CreateWindowEx(NULL,
            "Button",
            btnText,
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            x, y,
            width, height,
            parent, (HBRUSH)id,
            hInst,
            NULL);
}

編集2:

WM_COMMAND

    case WM_COMMAND:

        if( LOWORD(wParam) == btn1) // btn1 click
        {
            hBtn = CreateWindowEx(NULL,
                "Button",
                "Button2",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                400,50,100,20,
                hWnd, NULL,
                ghInstance,
                NULL);
            ShowWindow(hBtn, SW_SHOW);
            UpdateWindow(hWnd);
        }
            return 0;

の「btn1」は、if( LOWORD(wParam) == btn1)関数を介して呼び出される次のコードによって効果的に作成される別のボタンを作成するためにクリックするボタンの ID を参照します。

CreateWindowEx(NULL,
            "Button",
            btnText,
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            x, y,
            width, height,
            parent, (HMENU)id,
            hInst,
            NULL);
4

1 に答える 1

2

UpdateWindow を使用すると WM_CREATE メッセージがウィンドウに送信されることを知っています

いいえ、CreateWindow/Ex() はそのメッセージを送信します。UpdateWindow は、WM_PAINT メッセージのディスパッチと処理のみを強制します。メイン ウィンドウが表示されない場合は、ShowWindow() を呼び出すのを忘れている可能性があります。

Win32 プロジェクト テンプレートによって生成された既定のコードをガイドとして使用します。最初に動作することを確認し、変更を段階的に追加します。64 ビット オペレーティング システムで 32 ビット コードを記述する場合は、飲み込まれた SEH 例外に注意してください。Debug + Exceptions、「Win32 Exceptions」のThrownチェックボックスにチェックを入れます。

于 2012-06-09T22:29:05.640 に答える