1

だから、私はあらゆる種類のWindows関連プログラミングの初心者です。で遊んでいて、Windows API作成ウィンドウなどを初期化する方法に関するいくつかの例に出くわしました。

1 つの例では、通常のウィンドウを作成します (コードの一部を省略しました)。

int WINAPI WinMain( [...] )
{

    [...]

    // Windows Class setup
    wndClass.cbSize = sizeof( wndClass );
    wndClass.style  = CS_HREDRAW | CS_VREDRAW;
    [...]    

    // Register class
    RegisterClassEx( &wndClass );

    // Create window
    hWnd = CreateWindow( szAppName, "Win32 App",
                         WS_OVERLAPPEDWINDOW,
                         0, 0, 512, 384,
                         NULL, NULL, hInstance, NULL );
    [...]
}

2 番目の例では、ダイアログ ボックスを作成します (WinMain 引数以外の省略形はありません)。

int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}

2 番目の例には、register 関数の呼び出しが含まれていません。DialogProc プロセスがアタッチされた DialogBox を作成するだけです。

これは正常に動作しますが、ウィンドウ クラスを登録してからダイアログ ボックスを作成する利点があるかどうか疑問に思っています (これが可能な場合)。

4

3 に答える 3

2

ダイアログ ボックスを登録する必要はありません。

ダイアログボックスは事前定義されているため、(ご指摘のとおり) ダイアログを作成するときにウィンドウクラスへの参照はありません。ダイアログをより詳細に制御したい場合 (独自のウィンドウ クラスを作成したときのように)、ダイアログ ウィンドウ プロシージャを独自のものに置き換えるメソッドであるダイアログをサブクラス化します。プロシージャが呼び出されると、ダイアログ ウィンドウの動作が変更されます。その後、何をしようとしているのかによって、元のウィンドウ プロシージャを呼び出す場合と呼び出さない場合があります。

于 2008-08-31T18:12:07.443 に答える
2

これを行ってからしばらく経ちましたが、IIRC の最初のケースは、メモリ内のテンプレートから動的にダイアログを作成する場合です。2 番目の例は、リソースを使用してダイアログを作成する、はるかに一般的なケースです。Win32 の動的ダイアログはかなり複雑でしたが、真のデータ駆動型インターフェイスを作成し、リソースを DLL にバンドルする際の問題を回避することができました。

Win32 を使用する理由については、Windows アプリが必要で、MFC や .NET ランタイムに依存したくない場合は、それを使用します。

于 2008-08-31T19:10:09.427 に答える
-1

これは質問とは関係がありませんが、Windows プログラミングが初めての場合、なぜ Win32 を使用しているのですか? 大量のローエンド コード (GUI とは別のものにする必要があります) がない限り、おそらく .NET を使用する方が理にかなっており、頭部への損傷もはるかに少ないはずです。

于 2008-08-31T18:19:19.190 に答える