3个MFC隐藏窗口在任务栏上的方法

Home / Hackintosh MrLee 2016-6-8 3436

方法一:这种方法实际上是利用COM提供的ITaskbarList接口来实现的,在这里写个函数来完成这项工作
BOOL ShowInTaskbar(HWND hWnd, BOOL bShow)
{
	if (!SUCCEEDED(CoInitialize(NULL)))
		return FALSE;
	HRESULT hr; 
	ITaskbarList* pTaskbarList;
	hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,  
		IID_ITaskbarList, (void**)&pTaskbarList );
	if(SUCCEEDED(hr))
	{
		pTaskbarList->HrInit();
		if(bShow)
			pTaskbarList->AddTab(hWnd);
		else
			pTaskbarList->DeleteTab(hWnd);
		pTaskbarList->Release();
		// 卸载不用的COM服务.
		CoFreeUnusedLibraries();
		return TRUE;
	}
	// 卸载不用的COM服务.
	CoFreeUnusedLibraries();
	return FALSE;
}
方法二:在主对话框domodal之前生成一个隐藏的对话框
BOOL   CTestDlgApp::InitInstance()   
  {    
  ...    
  CFrameWnd   a;   //生成一个框架窗口对象    
  a.Create(NULL,"aa");//生成窗口,不带ws_visible,也就是说不会显示出来   
    
  CTestDlgDlg   dlg;    
  m_pMainWnd   =   &a;//将这个隐藏窗口设为主窗口      
  int   nResponse   =   dlg.DoModal();   
  ...   
   }
CFrameWnd是关键
方法三:移除对话框WS_EX_APPWINDOW风格,但是影响风格
在对话框的oninitdialog里加入
ModifyStyleEx(WS_EX_APPWINDOW,0);

本文链接:https://www.it72.com/9443.htm

推荐阅读
最新回复 (0)
返回