また、こちらのフォーラムで質問させていただきます。
さて、本題ですがタイトル通りメニューバーのデザインがちょっとした書き方の違いで変わることが分かりその原因を知りたいのです。
もともと以下のソースで付加していて、この時は立体的なデザインでした(メニューのリソース名をIDR_MENUとします)。
// 立体的なメニューバーになる場合(ウィンドウプロシージャ部分のみ)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static HMENU hMenu;
switch(msg)
{
case WM_CREATE:
hMenu = LoadMenu(NULL, _T("IDR_MENU"));
SetMenu(hWnd, hMenu);
break;
case WM_DESTROY:
DestroyMenu(hMenu);
SetMenu(hWnd, NULL);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
return 0;
}
で、上のソースを見ていてメニュー付加の部分だけを関数化できそうだったので
BOOL CreateMenuBar(HWND hWnd)
{
HMENU hMenu;
hMenu = LoadMenu(NULL, _T("IDR_MENU"));
SetMenu(hWnd,hMenu);
return DestroyMenu(hMenu);
}
のようにして、CreateWindow()の直後に呼んでみたのですが、その結果メニューバーのスタイルがフラットになってしまいました。また、WNDCLSSEX構造体で直接指定した場合は立体的なスタイルでした。
自分の考えとしては
CreateWindow()→WM_CREATEメッセージ送信(一度しか呼ばれない)→メニューセット→…
という流れだと思っているのでやってることは一緒じゃないのかなぁと思うのですが、どうなのでしょう?
もし原因のわかる方がいらっしゃいましたら、ご回答いただけたらと思います。
また、もしあとからCreateMenuBar()のようにして付加する場合で立体的なメニューバーを作成する方法があるのならば、その方法も教えていただけたらと思います。
よろしくお願いします。