下のバーもちゃんと出そう
■アプリケーションが動作してるとき、キーボードを押せる部分のバーをちゃんと設定しておかないと。
「main.cpp」
#include <windows.h> #include <aygshell.h> #pragma comment( lib, "aygshell.lib" ) LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); #define PROC_NAME L"ProcSample02" //---------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreInst, LPWSTR lpszCmdLine, int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS myProg; if (!hPreInst) { myProg.style = CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc = WndProc; myProg.cbClsExtra = 0; myProg.cbWndExtra = 0; myProg.hInstance = hInstance; myProg.hIcon = NULL; myProg.hCursor = NULL; myProg.hbrBackground = (HBRUSH)COLOR_WINDOW; myProg.lpszMenuName = NULL; myProg.lpszClassName = PROC_NAME; if (!RegisterClass( &myProg )){ return FALSE; } } hwnd = CreateWindow( PROC_NAME, L"Sample02", WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); do{ if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } while(msg.message != WM_QUIT); return (int)( msg.wParam ); } //---------------------------------------------------------------- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { HDC hdc; PAINTSTRUCT paintSt; size_t size; LPTSTR str = _T("TestSample02"); switch (msg) { case WM_PAINT: hdc = BeginPaint( hwnd, &paintSt ); StringCchLength( str, STRSAFE_MAX_CCH, &size ); ExtTextOut( hdc, 0, 0, NULL, NULL, str, size, NULL ); EndPaint( hwnd, &paintSt ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_CREATE: { SHMENUBARINFO smi = {sizeof(SHMENUBARINFO),hwnd,SHCMBF_EMPTYBAR}; SHCreateMenuBar(&smi); } break; default: return(DefWindowProc( hwnd, msg, wParam, lParam )); } return (0L); }
■DLLを登録します。
#include <aygshell.h> #pragma comment( lib, "aygshell.lib" )
■初期化の所でバーの登録
SHMENUBARINFO smi = {sizeof(SHMENUBARINFO),hwnd,SHCMBF_EMPTYBAR};
SHCreateMenuBar(&smi);