在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Linux上實現將檔案隱藏到影像中Linux
- FloatingActionButton在RecycleView中滑動隱藏顯示View
- 在 Laravel 中動態 隱藏 / 顯示 API 欄位LaravelAPI
- 隱藏域在Ajax中的應用
- 在 Visual Studio Code 中開啟 macOS 裡的隱藏資料夾Mac
- 通過Behavior在RecycleView中隱藏顯示FABView
- chrome,firfox,IE實現隱藏滾動條但是可以正常滾動(瀏覽器自帶隱藏屬性實現)Chrome瀏覽器
- Vue實現浮動按鈕元件 - 頁面滾動時自動隱藏 - 可拖拽Vue元件
- 手機直播原始碼,滾動條在滑動時顯示,靜止時恢復隱藏狀態原始碼
- 在小程式中實現 Mixins 方案
- 在WPF程式中實現PropertyGrid功能
- 隱藏驚喜!在Mac終端上開啟經典小遊戲Mac遊戲
- 在報表中錄入資料時如何實現行列轉換
- 在 Python 程式中啟動 mitmproxy 並控制 addonPythonMIT
- 直播系統程式碼,輸入時實現密碼顯示與隱藏密碼
- 用VC在區域網實現IP多播通訊
- 在Spring Boot中實現WebSocket實時通訊Spring BootWeb
- 在 Docker 中啟動 JupyterDocker
- 在java和Scenebuilder隱藏核取方塊JavaUI
- 在Linux上啟動程式時會發生什麼?Linux
- Mac隱藏驚喜!在Mac終端上開啟經典小遊戲Mac遊戲
- css實現隱藏滾動條並可以滾動內容CSS
- 啟動按ctrl鍵 遮蔽自動隱藏功能
- CodeSysV3.5 在封裝靜態庫時,隱藏全域性變數。封裝變數
- 【轉載】SAP 系統中STO+VC 技術實現
- 在Flask程式中實現GitHub登入和GitHub資源互動FlaskGithub
- Java開發中POJO和JSON互轉時如何忽略隱藏欄位JavaPOJOJSON
- 小程式tabBar跳轉頁面並隱藏tabBartabBar
- Linux 6.7 將允許在啟動時啟用/禁用 32 位程式支援Linux
- 如何自動實現本地AD中禁用的使用者從地址列表中隱藏掉?
- 解決自定義可拖動View在軟鍵盤彈出和隱藏時位置重置問題View
- jQuery 實現顯示與隱藏效果jQuery
- 在Spring Boot應用啟動時如何執行程式碼? -DukesletterSpring Boot行程
- 在 GPUImage 中實現 ColorConversionGPUUI
- 在 Zig 中實現介面
- .net ocre 程式崩潰自動dump在多平臺中的實現
- ATMS中去拉起新的程式,並在新程式啟動後呼叫attachApplication時,resume待啟動的ActivityAPP
- 3種方法實現CSS隱藏滾動條並可以滾動內容CSS
- vc實現ping