在VC中實現程式在啟動時隱藏 (轉)
最近經常見論壇上有人問,在啟動時如何隱藏。以下是我總結的一些方法,歡迎大家討論,找出更好的方法。
對於這類問題,大家最容易想到的可能就是在PreCreateWindow中新增cs.style &=~WS_VISIBLE;這是不可行的。程式仍可使用ShowWindow()將窗體顯示出來.
1.基於對話方塊的程式
我在論壇上看到有人說在OnInitDialog()中加上ShowWindow(SW_H)對話方塊便不出現了,其實是不可行的。至於原因,我認為是是在OnInitDialog()後ShowWindow(SW_SHOW)讓對話方塊顯示的.可以新增下面程式碼:
CXXDlg::OnInitDialog()
{
...
Sleep(5000);
return TRUE;
}
可以發現5秒後對話方塊才顯示出來.至於在何時呼叫的我也不清楚,但是我們可以在OnPaint()中加上ShowWindow(SW_HIDE),來達到隱藏的目的.不過使用的這種方法,會有一點閃爍.另外一種方法就是在OnInitDialog()中使用SetWindowPlacement()
GetWindowPlacement(&m_wp); //恢復時用
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//從工作列中去掉.
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);
還有一種更簡單的方法:在OnInitDialog()中呼叫下面程式碼.
SetWindowPos(&wndTop,0,0,0,0,NULL);
2.基於單文件的程式
我們一般採用的方法就是將InitInstance()中的:
CXXApp::InitInstance()
{
//m_pMainWnd->ShowWindow(SW_SHOW);
}
但是這樣窗體還會有閃爍。
因為MFC還要在ActiveFrame顯示,所以我們還需要新增下面程式碼:
void CMainFrame::ActivateFrame(int nCmdShow)
{
nCmdShow=SW_HIDE;
CFrameWnd::ActivateFrame(nCmdShow);
}
或者:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
AfxGetApp()->m_nCmdShow=SW_HIDE;
}
順便說一下,上面透過ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW)的方法來實現從工作列去掉按鈕,這樣當顯示時還要切換顯示的,其實還可以透過呼叫TaskbarList直接刪除和新增:
ITaskbarList的定義在shobjidl.h(vs)中。
也可以手動定義:
DECLARE_INTERFACE_(ITaskbarList,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(ActivateTab)(HWND) PURE;
STDMETHOD(AddTab)(HWND) PURE;
STDMETHOD(DeleteTab)(HWND) PURE;
STDMETHOD(HrInit)(void) PURE;
};
BOOL CMy2App::InitInstance()
{
CoInitialize(0);
ITaskbarList *pObj;
CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&pObj);
pObj->DeleteTab(m_pMainWnd->m_hWnd); //從工作列上刪除
//pObj->AddTab(m_pMainWnd->m_hWnd); //新增
pObj->Release();
CoUninitialize();
}
所以我們還可以用將窗體最小化,並從任備欄上刪除按鈕的方法來實現隱藏.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992248/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VB中實現窗體自動隱藏 (轉)
- 利用VC++程式設計實現程式自動啟動 (轉)C++程式設計
- 在Linux上實現將檔案隱藏到影像中Linux
- “黑屏”隱藏實現 (轉)
- 在VC++6.0開發中實現全屏顯示 (轉)C++
- FloatingActionButton在RecycleView中滑動隱藏顯示View
- 在 Laravel 中動態 隱藏 / 顯示 API 欄位LaravelAPI
- 在Excel中貼上時怎樣跳過隱藏行Excel
- 在Linux中從隱藏密碼遷移至tcb(轉)Linux密碼
- 隱藏域在Ajax中的應用
- 在Director中實現文字滾動 (轉)
- css實現隱藏滾動條CSS
- VC++中實現程式互斥執行 (轉)C++
- Win32全域性鉤子在VC5中的實現 (轉)Win32
- 在VC 5.0中實現基於MFC的元件的本地化 (轉)元件
- 在VC++ 6.0下利用訊息實現內部程式通訊 (轉)C++
- 在Windows中怎樣尋找自啟動程式(轉)Windows
- 在執行時顯示或隱藏窗體的標題欄 (轉)
- 讓VisualBasic實現隱藏Mouse (轉)
- 通過Behavior在RecycleView中隱藏顯示FABView
- 在VC中所見即所得列印的簡易實現 (轉)
- 在應用程式中實現RAS撥號 (轉)
- 在 Visual Studio Code 中開啟 macOS 裡的隱藏資料夾Mac
- 在Oracle中實現定時操作Oracle
- WinNT&Win2K下實現程式的完全隱藏(轉)
- 在win8系統中如何隱藏分割槽?
- 在Linux中從隱藏密碼遷移至tcbLinux密碼
- 在VB中實現窗體的動態效果 (轉)
- Windows系統中巧妙隱藏驅動器(轉)Windows
- 在vim中實現批次加密(轉)加密
- 在linux環境下啟動時開啟numlock(轉)Linux
- 用VC 實現圖象漸顯和漸隱 (轉)
- 隱藏驚喜!在Mac終端上開啟經典小遊戲Mac遊戲
- 在vc中實現獲取漢字拼音的首字母
- 在jboss啟動時載入class方法(定時操作) (轉)
- Vue實現浮動按鈕元件 - 頁面滾動時自動隱藏 - 可拖拽Vue元件
- 手機直播原始碼,滾動條在滑動時顯示,靜止時恢復隱藏狀態原始碼
- 啟用Windows Vista中幾項隱藏功能(轉)Windows