首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Win32 實現類輸入法狀態欄:無焦點切換窗口交互技術

     編輯:程式設計綜合問答

需求分析

實現類似輸入法候選窗/狀態欄的行為:主輸入窗口 (A) 保持輸入焦點,用戶可用鼠標點擊懸浮工具窗 (B) 進行設置,焦點不離開 A 窗口。

核心技術:WS_EX_NOACTIVATE 風格


// 創建工具窗口時指定擴展風格
HWND hToolWnd = CreateWindowEx(
    WS_EX_NOACTIVATE | WS_EX_TOPMOST | WS_EX_TOOLWINDOW, // 關鍵組合
    L"ToolWindowClass", L"輸入法狀態欄",
    WS_POPUP | WS_VISIBLE,
    x, y, width, height,
    NULL, NULL, hInstance, NULL
);

關鍵風格標誌詳解

完整實現步驟

  1. 註冊窗口類:WNDCLASSEX 設置 hCursor = LoadCursor(NULL, IDC_ARROW)
  2. 創建窗口:組合上述三個擴展風格
  3. 消息處理:WM_MOUSEACTIVATE 返回 MA_NOACTIVATE (雙重保險)
  4. 通信機制:向主窗口發送自定義消息 WM_USER+XXX 或使用共享內存

WM_MOUSEACTIVATE 處理

case WM_MOUSEACTIVATE:
    // 防止某些情況下仍獲取焦點
    return MA_NOACTIVATE; 

參考資源

CSDN 下載鏈接提供的示例項目演示了完整實現:輸入法狀態欄示例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
標誌作用
WS_EX_NOACTIVATE點擊窗口不激活、不獲取焦點、不改變前台窗口
WS_EX_TOPMOST窗口始終置頂顯示
WS_EX_TOOLWINDOW不在任務欄顯示、Alt+Tab 不切換、邊框較薄