WinMain とは異なる cpp ファイルにある関数があり、呼び出されるとウィンドウが作成されます。ただし、その新しいウィンドウのウィンドウ クラスは、WinMain 内で宣言および登録されています。ここで、別の関数でウィンドウを作成すると、CreateWindowEx 関数の 2 番目と 3 番目の変数を再宣言する必要があります。
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
実際に作成を行っている関数の場所は、WinMain で作成された変数にアクセスできないためです。さて... 私の疑問は、私のプログラムが WinMain に登録したウィンドウ クラスを実際に使用しているのかということです。私が知っている限りでは、これらの変数を再宣言し、WinMain 関数から離れた場所に関数を作成すると、コンパイラが他の標準ウィンドウ クラスを採用する可能性があります。私のプログラムは、WinMain に登録したウィンドウ クラスを実際に使用していますか?
編集: もう少しコードを与える
//++++++++++++++++++++++++++++++++++++++ win main の cpp ファイル:
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
...//previous code made the main window of the program and so forth
const char g_szClassName2[] = "windowClass2";//name of the window class
WNDCLASSEX winClass2;
HWND invisHWnd;
winClass2.cbSize = sizeof(WNDCLASSEX);
winClass2.style = 0;
winClass2.lpfnWndProc = WndProcedure2;
winClass2.cbClsExtra = 0;
winClass2.cbWndExtra = 0;
winClass2.hInstance = hInstance;
winClass2.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winClass2.hCursor = LoadCursor(NULL, IDC_ARROW);
winClass2.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
winClass2.lpszMenuName = NULL;
winClass2.lpszClassName = g_szClassName2;
winClass2.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&winClass2);
... //other code irrelevant to issue
}
//++++++++++++++++++++++++++++++++++++++ その他の cpp ファイル:
void otherCppFile::creatingWindow()
{
const char g_szClassName2[] = "windowClass2";//name of the window class
const char WndName2[] = "winClass2";//name of the window class
HWND windowHandle = CreateWindowEx(0,
g_szClassName2,
WndName2,
WS_OVERLAPPEDWINDOW,
0,
0,
800,
500,
NULL,
NULL,
NULL,
NULL);
}
この最後の関数は、WinMain に配置されておらず、一部の変数が関数で再宣言されていますが、WinMain に登録されているウィンドウ クラスを使用していますか?