上次正好要做一個類似只有菜單一樣的程序,當然需要把顯示在任務欄上的隱藏起來。
查了下資料,下面三步,用的別人的話
第一、創建對話框時必須將它作爲某個不可見框架窗口的子窗口;
第二、這個不可見窗口的擴展式樣必須設置 WS_EX_TOOLWINDOW;
第三、保證對話框的擴展式樣沒有設置 WS_EX_APPWINDOW;
我總結出有兩部就ok。
代碼如下:
{
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了。
{
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
}
注意:對話框的擴展式樣必須關閉,此方法在切換程序時候,還可以看到,以後在慢慢改進。