Window verstecken



  • Hallo,

    habe folgendes Problem:
    Habe eine Anwendung die bei Bedarf im Systray verschwinden soll. Die Anwendung ist ein SDI mit Splitterwindow. Das mit dem Trayicon funktioniert auch wunderbar. Wenn ich nun aber mein SDI mit "ShowWindow(SW_HIDE)" ausblenden will, so dass es nur als Trayicon sichtbar ist, dann geht das nicht. Es Kommt kein Fehler, es geht nur einfach nicht.
    Hat vielleicht jemand eine Idee?



  • Zeig mal Code. Bei mir klappt das hervorragend. 😕



  • Versuch mal:

    // Button in der Taskbar verschwinden lassen
    pMainFrame->ModifyStyleEx(0, WS_EX_TOOLWINDOW);
    pMainFrame->ModifyStyleEx(WS_EX_APPWINDOW, 0);
    pMainFrame->ModifyStyle(WS_SYSMENU, 0);
    


  • decoder71 schrieb:

    Versuch mal:

    // Button in der Taskbar verschwinden lassen
    pMainFrame->ModifyStyleEx(0, WS_EX_TOOLWINDOW);
    pMainFrame->ModifyStyleEx(WS_EX_APPWINDOW, 0);
    pMainFrame->ModifyStyle(WS_SYSMENU, 0);
    

    Das klappt zwar halbwegs, ist aber ein Workaround. Das MainFrame Fenster ist zwar nichtmehr in der Taskleiste zu sehen aber immernoch auf dem Desktop, wenn ich es mit "ShowWindow(SW_MINIMIZE)" verschwinden lasse geht das auch nicht lange gut, spätestens mit öffnen des Taskmanagers ist das Fenster dann wieder sichtbar.

    Aber vielen Dank für den Lösungsvorschlag!

    estartu_de schrieb:

    Zeig mal Code. Bei mir klappt das hervorragend. 😕

    Guckst du hier:

    void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus) 
    {
    INIFILE *pIni =	(INIFILE *)m_pcMainFrameCtrl->GetIni();
    
    	CFrameWnd::OnShowWindow(bShow, nStatus);
    
    	//TRAYICON ANFANG
            m_nID.cbSize = sizeof ( NOTIFYICONDATA ) ;
    	m_nID.hWnd = this->m_hWnd ;
    	m_nID.uID = 1 ;
    	m_nID.hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance,
    				  MAKEINTRESOURCE(IDR_MAINFRAME),
    				  IMAGE_ICON,16,16,LR_SHARED|LR_DEFAULTCOLOR);
    
    	m_nID.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    	m_nID.uCallbackMessage = WM_USER+1; 
    	strcpy(m_nID.szTip, _T("Testprog")) ;
    	Shell_NotifyIcon ( NIM_ADD, &m_nID );
    	//TRAYICON ENDE
    
    	switch(pIni->nStartupType)
    	{
    	case 2:
    		{
    		        ShowWindow(SW_MINIMIZE);
    	 		break;
    		}
    	case 3:
    		{
    			ShowWindow(SW_HIDE);
    			break;		
    		}
    	default:
    		{
    			ShowWindow(SW_NORMAL);
    		}
    	}
    
    	CSplashWnd::ShowSplashScreen(this);
    }
    


  • Hast du auf

    ShowWindow(SW_HIDE);
    

    mal einen Breakpoint gesetzt und geguckt, ob du da auch langkommst?

    Irgendwie habe ich den Verdacht, dass du dir da durch einen rekursiven Aufruf ein Bein gestellt hast. 🙄



  • estartu_de schrieb:

    Hast du auf

    ShowWindow(SW_HIDE);
    

    mal einen Breakpoint gesetzt und geguckt, ob du da auch langkommst?

    Irgendwie habe ich den Verdacht, dass du dir da durch einen rekursiven Aufruf ein Bein gestellt hast. 🙄

    Huhu! 😃
    Also das ist nicht das Problem (gewesen).
    Das Problem war einfach dass "OnShowWindow" noch ein bisschen zu früh war um "ShowWindow(SW_HIDE)" aufzurufen. "ShowWindow(SW_MINIMIZE)" geht an der stelle lustigerweise! 😃

    Vielen dank allen die sich mit mir den Kopf darüber zerbrochen haben! 😃



  • Falls die Anwendung versteckt gestartet werden soll, bietet sich die InitInstance an. 😉



  • estartu_de schrieb:

    Falls die Anwendung versteckt gestartet werden soll, bietet sich die InitInstance an. 😉

    Yo das wäre optimal, aber die Methode "InitInstance" steht mir leider nicht zur Verfügung. Kann das sein dass es die Methode beim SDI nicht gibt? 😞



  • Doch, klar gibt es die. 😕

    Ich mach das da doch auch bei meiner SDI Anwendung.
    Die ist da, wo sie hingehört, in der App-Klasse.

    Drück mal Strg+Shift+F und gib den Funktionsnamen da ein, dann soltest du die auch finden.
    Ich vermute, es spinnt nur einfach dein VC. 🙂



  • HAT 1A FUNKTIONIERT!

    DANKE! 😃



  • Bitteschön!


Anmelden zum Antworten