Win32 アプリケーションを実行すると、Windows 言語バー (他のすべてのアプリケーションで表示されます) が約 5 秒後に消えます。アプリケーションを終了するか、alt-tab を別のアプリケーションに移動すると、再び表示されます。Alt-Tab を押してアプリケーションに戻ると、5 秒後に再び消えます。スイッチキーも効きません。
私のアプリケーションが言語バーを「サポート」していないとシステムがどういうわけか結論付けたようです。
言語バーを有効にするために必要なことはありますか? または、私がすべきではないことで、それが消える可能性がありますか?
このアプリケーションには、1 つのカスタム ウィンドウ (DirectX グラフィックスを描画する場所) があります。CreateWindow
およびへの引数とRegisterClass
、( に渡す代わりに) 処理するウィンドウ メッセージを調べましたがDefWindowProc
、言語バーに直接関連するものはないようです。
これは Windows 7 でのみテストしました。
[アップデート]
これは最小限の例です。これをコンパイルして実行すると、5 秒後に言語バーが消えます。
#include <windows.h>
LRESULT CALLBACK wndproc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
{
return DefWindowProcW(hwnd, umsg, wparam, lparam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSW wc;
wc.style = CS_DBLCLKS;
wc.lpfnWndProc = wndproc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetModuleHandle(nullptr);
wc.hIcon = 0;
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = 0;
wc.lpszMenuName = 0;
wc.lpszClassName = L"main_window";
ATOM atom = RegisterClassW(&wc);
DWORD win_style = WS_OVERLAPPEDWINDOW;
RECT winrect;
winrect.top = 100; winrect.bottom = 200; winrect.left = 100; winrect.right = 200;
AdjustWindowRect(&winrect, win_style, false);
HWND _hwnd = CreateWindowW(L"main_window", L"Application", win_style,
winrect.left, winrect.top, winrect.right-winrect.left, winrect.bottom - winrect.top,
0, 0, GetModuleHandle(0), 0);
SetFocus(_hwnd);
ShowWindow(_hwnd, SW_SHOW);
UpdateWindow(_hwnd);
MSG msg;
while (true) {
PeekMessage(&msg, _hwnd, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}