Window API始めたての頃、ウィンドウ作成する時によくわからなかった事

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmndShow)
{
	const wchar_t className[] = L"main_window";
	const wchar_t title[]     = L"test";
	MSG msg;
	BOOL bRet;

	WNDCLASSEXW wcex;

	wcex.cbSize        = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW; // | CS_DROPSHADOW;
	wcex.lpfnWndProc   = MainProc;
	wcex.cbClsExtra    = 0;
	wcex.cbWndExtra    = 0;
	wcex.hInstance     = GetModuleHandle(nullptr);
	wcex.hIcon         = LoadIcon(wcex.hInstance, nullptr);
	wcex.hCursor       = LoadCursor(nullptr, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wcex.lpszMenuName  = nullptr;
	wcex.lpszClassName = className;
	wcex.hIconSm       = LoadIcon(wcex.hInstance, nullptr);

	if (!RegisterClassExW(&wcex))
		return FALSE;

	HWND hWnd = CreateWindowExW
	(
		w_style_ex.at(i),
		className,
		ex_style_n[i],
		w_style.at(k),
		500,
		300,
		300,    //幅 
		200,    //高さ
		nullptr,
		nullptr,
		GetModuleHandle(nullptr),
		nullptr
	);

	if (!hWnd)
		return FALSE;

	//if (!SetLayeredWindowAttributes                        //レイヤー時に使用
	//(/*_In_ HWND hwnd      */ hWnd
	//	,/*_In_ COLORREF crKey */ RGB(0xff, 0xff, 0xff)
	//	,/*_In_ BYTE bAlpha    */ 150
	//	,/*_In_ DWORD dwFlags  */ LWA_ALPHA
	//))
	//	return false;

	ShowWindow(hWnd, nCmndShow);
	UpdateWindow(hWnd);

	while ((bRet = GetMessage(&msg, nullptr, 0, 0)) != 0)
	{
		if (bRet == -1)
			break;

		else
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	return 0;//(int)msg.wParam;
}

よくあるwindow作成時にあるコードですが(ウィンドウSS撮影に使ったコードの一部)、
8行目から21行目までの記述はただの構造体です。
win32は主に構造体メンバに型を合わせてセットして関数で呼び出すのが基本のようです。
なので構造体をググると何をメンバにセットするかはMicrosoft Learnで”ある程度”あたりを付けることが出来ます。

基礎をしっかりやってれば構造体であることはわかることなのですが、ウィンドウを早く作りたくて見様見真似でやって結局それすらわからず時間をかなり使ったのでw

自分と似たようなせっかちさんの助けになれば幸いです。

コメント

タイトルとURLをコピーしました