0

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;
}
4

1 に答える 1