CascadeWindows



  • Hi,

    ich habe folgendes Problem:

    Ich habe eine dialogbasierte Anwendung, aus der heraus ich beliebig viele weitere Dialogfenster öffne wie folgt:

    static int count=0;
    
    	count++;
    
    	CMyDialog *newdialog = 0;
    
    	newdialog = new CMyDialog();
    	newdialog->m_nNumber.Format("%d", count);
    	newdialog->Create(IDD_DIALOG1, this);
    	newdialog->ShowWindow(SW_SHOW);
    

    Jetzt möchte ich die Fenster automatisch "kaskadierend" (heisst das so? 😕 ) anordnen, d.h. die einzelnen Fenster sollen versetzt von links oben nach rechts unten auf dem Desktop erscheinen.

    Ich habe es wie folgt versucht:

    void CTestCascadeDlg::OnButtonGetHandles() 
    {
    	HWND mychild;
    	EnumWindows(EnumChildProc, NULL); 
    
    	::CascadeWindows(this->m_hWnd, NULL, NULL, maxind, handles);
    //	::CascadeWindows(NULL, NULL, NULL, maxind, handles);
    }
    
    BOOL CALLBACK CTestCascadeDlg::EnumChildProc(HWND hwnd, LPARAM lParam)
    {
    	char tempstr[100], titel[100];
    	CString ptitel;
    
    	static int ind = 0;
    	::GetWindowText(hwnd, titel, 100);
    	::GetClassName(hwnd, tempstr, 100);
    	if (strcmp(titel, "Dialog") == 0)
    	{
    		if (FromHandle(hwnd)->GetParent() == NULL)
    		{
    TRACE("No Parent found.. \n");
    		}
    		else
    		{
    TRACE("Parent found!\n");
    			FromHandle(hwnd)->GetParent()->GetWindowText(ptitel);
    		}
    		handles[ind++] = hwnd;
    		maxind = ind;
    	}
    
    	return TRUE;
    }
    

    Der Aufruf von CascadeWindows bewirkt in der vorliegenden Form gar nichts....

    In der auskommentierten Form werden alle WIndows auf dem Desktop neu angeordnet, nicht nur die Dialogfenster. 😮

    Hat jemand ne gute Idee?

    Gruss

    yeti


Anmelden zum Antworten