質問
なので、私は何に関しても全くの初心者です 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 を作成するだけです。
これは正常に機能しますが、ウィンドウ クラスを登録してからダイアログ ボックスを作成する利点があるかどうか疑問に思っています (これが可能な場合)。
解決
ダイアログボックスを登録する必要はありません。
ダイアログ ボックスは事前定義されているため、(お気づきのように) ダイアログを作成するときにウィンドウ クラスへの参照はありません。ダイアログをさらに制御したい場合 (独自のウィンドウ クラスを作成する場合のように)、ダイアログをサブクラス化します。これは、ダイアログ ウィンドウ プロシージャを独自のものに置き換えるメソッドです。プロシージャが呼び出されるときに、ダイアログ ウィンドウの動作を変更します。その後、何をしようとしているかに応じて、元のウィンドウ プロシージャを呼び出す場合と呼び出さない場合があります。
他のヒント
これを行うのは久しぶりですが、IIRC、最初のケースは、メモリ内のテンプレートから動的にダイアログを作成する場合です。2 番目の例は、リソースを使用してダイアログを作成する、より一般的なケースです。Win32 の動的ダイアログ機能はかなり複雑でしたが、これにより真のデータ駆動型インターフェイスを作成でき、リソースを DLL にバンドルする際の問題を回避できました。
Win32 を使用する理由については、Windows アプリが必要で、MFC や .NET ランタイムに依存したくない場合は、それを使用します。
これは質問と少しだけ関係しますが、Windows プログラミングが初めての場合、なぜ Win32 を使用するのでしょうか?大量のローエンド コード (とにかく GUI とは別個にする必要がある) がない限り、おそらく .NET を使用する方が理にかなっており、頭部への損傷もはるかに少なくなるはずです。