隱藏顯示在任務欄中的對話框程序

上次正好要做一個類似只有菜單一樣的程序,當然需要把顯示在任務欄上的隱藏起來。

查了下資料,下面三步,用的別人的話

第一、創建對話框時必須將它作爲某個不可見框架窗口的子窗口;
第二、這個不可見窗口的擴展式樣必須設置 WS_EX_TOOLWINDOW;
第三、保證對話框的擴展式樣沒有設置 WS_EX_APPWINDOW;

我總結出有兩部就ok。

代碼如下:

BOOL CSSO_AGentApp::InitInstance()
{
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize 
= sizeof(InitCtrls);
   

    InitCtrls.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(
&InitCtrls);

    CWinApp::InitInstance();

    AfxEnableControlContainer();

    SetRegistryKey(_T("SSO AGent"));


    
//創建對話框時,把它作爲不可見主框架窗口的子窗口對待 
    CSSO_AGentDlg dlgParent;
    dlgParent.Create(IDD_SSO_AGENT_DIALOG);
    dlgParent.ShowWindow(SW_HIDE);
    CSSO_AGentDlg dlg(
&dlgParent); 
    m_pMainWnd 
= &dlg; 
    dlg.DoModal(); 
    dlgParent.DestroyWindow(); 
    
return FALSE;
}

上面那部分改寫一下就ok了。

BOOL CSSO_AGentDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    
// 將“關於...”菜單項添加到系統菜單中。

    
//  去掉註釋設置對話框的 WS_EX_APPWINDOW 擴展式樣
    this->ModifyStyleEx(WS_EX_APPWINDOW,0);


    
// IDM_ABOUTBOX 必須在系統命令範圍內。
    ASSERT((IDM_ABOUTBOX & 0xFFF0== IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX 
< 0xF000);

    CMenu
* pSysMenu = GetSystemMenu(FALSE);
    
if (pSysMenu != NULL)
    
{
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        
if (!strAboutMenu.IsEmpty())
        
{
            pSysMenu
->AppendMenu(MF_SEPARATOR);
            pSysMenu
->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }

    }


    
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
    
//  執行此操作
    SetIcon(m_hIcon, TRUE);            // 設置大圖標
    SetIcon(m_hIcon, FALSE);        // 設置小圖標

    
// TODO: 在此添加額外的初始化代碼

    
///////////////////自己的代碼////////////////////////////

    
return TRUE;  // 除非將焦點設置到控件,否則返回 TRUE
}

注意:對話框的擴展式樣必須關閉,此方法在切換程序時候,還可以看到,以後在慢慢改進。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章