当我运行我的 Win32 应用程序时,Windows 语言栏(在所有其他应用程序中可见)在大约 5 秒后消失。如果我退出我的应用程序或 alt-tab 到另一个应用程序,它会重新出现。如果我 alt-tab 回到我的应用程序,它会在五秒钟后再次消失。切换键也不起作用。
似乎系统以某种方式得出结论认为我的应用程序不“支持”语言栏。
我需要做些什么来启用语言栏吗?或者我不应该做的事情会导致它消失?
该应用程序有一个自定义窗口(我在其中绘制 DirectX 图形)。我查看了我处理的参数CreateWindow
和RegisterClass
窗口消息(而不是传递给DefWindowProc
),但似乎没有任何内容与语言栏直接相关。
我只在 Windows 7 上测试过。
[更新]
这是一个简约的例子。当我编译并运行它时,语言栏会在五秒钟后消失:
#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;
}