当我运行Win32应用程序时,Windows语言栏(在所有其他应用程序中可见)在大约5秒钟后消失。如果我退出应用程序或使用alt-tab转到其他应用程序,它会重新出现。如果我按Alt键重新进入应用程序,则五秒钟后它会再次消失。切换键也不起作用。
好像系统以某种方式得出结论,我的应用程序不“支持”语言栏。
要启用语言栏,我需要做些什么吗?还是我不应该做的事情会导致它消失?
该应用程序有一个自定义窗口(我在其中绘制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;
}
该代码段正在过滤消息:它将仅处理发送到刚创建的窗口的消息,而不处理发送到程序需要或使用的其他消息的消息。在http://blogs.msdn.com/b/oldnewthing/archive/2005/02/09/369804.aspx上查看Raymond Chen的“过滤窗口消息的危险”
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句