当我运行我的Win32应用程序时,Windows (在所有其他应用程序中都是可见的)在大约5秒后消失。如果我退出应用程序或alt选项卡到另一个应用程序,它将重新出现。如果我选择选项卡返回到我的应用程序,它将在5秒后再次消失。开关键也不起作用。
似乎系统已经得出结论,我的应用程序不“支持”语言栏。
为了启用语言栏,我需要做些什么吗?或者我不该做的事会让它消失?
应用程序只有一个自定义窗口(我在其中绘制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;
}发布于 2013-11-05 18:16:37
这个片段是过滤消息:它将只处理发送到您刚刚创建的窗口的消息,而不是您的程序需要或使用的任何其他消息。在http://blogs.msdn.com/b/oldnewthing/archive/2005/02/09/369804.aspx上查看雷蒙德·陈的“过滤窗口消息的危险”
https://stackoverflow.com/questions/19793026
复制相似问题