首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

建立不在工作列顯示按鈕的應用程式:隱藏父視窗技巧

     編輯:關於VC++

許多應用程式使用系統托盤圖示,此時工作列按鈕顯得多餘。對於已採用文檔/視圖架構的成熟專案,大幅重構不現實。本文提供簡單技巧:建立隱藏父視窗,使框架視窗不出現在工作列。

核心原理

工作列只顯示無擁有者(Owner)的最上層視窗。若框架視窗擁有隱藏的父視窗,系統視其為子視窗,不在工作列顯示。

實作步驟

1. 框架類別新增隱藏父視窗成員


class CMainFrame : public CFrameWnd {
protected:
    CWnd m_wndParent;  // 隱藏父視窗
    // ...
};

2. 覆寫 PreCreateWindow 建立隱藏父視窗


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    if (!CFrameWnd::PreCreateWindow(cs)) return FALSE;

    // 建立隱藏 POPUP 視窗作為父視窗
    if (!::IsWindow(m_wndParent.m_hWnd)) {
        LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
        if (!m_wndParent.CreateEx(0, pstrOwnerClass, _T(""),
            WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT, NULL, 0))
            return FALSE;
    }
    cs.hwndParent = m_wndParent.m_hWnd;  // 設定框架視窗父視窗
    return TRUE;
}

關鍵點解析

  • WS_POPUP:建立無標題列、無邊框的彈出式視窗
  • CW_USEDEFAULT:位置尺寸由系統決定(隱藏視窗不重要)
  • cs.hwndParent:關鍵步驟,將框架視窗的建立父視窗設為隱藏視窗
  • AfxRegisterWndClass(0):註冊簡單視窗類別,無額外樣式

適用場景與注意事項

  • 適用於 MDI/SDI 框架應用程式
  • 配合系統托盤圖示(Shell_NotifyIcon)使用效果最佳
  • 不影響 Alt+Tab 切換行為(框架視窗仍為最上層視窗)
  • 若需完全隱藏任務切換器項目,需額外設定 WS_EX_TOOLWINDOW 擴充樣式

替代方案比較

方法優點缺點
隱藏父視窗(本文)改動最小,相容現有架構Alt+Tab 仍可見
建立對話方塊應用原生無工作列按鈕需重構文檔/視圖架構
WS_EX_TOOLWINDOW完全隱藏任務切換器視窗外觀改變(無系統選單)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved