Dialog - Maske erweitern mit Button "erweitert"



  • Hi,

    wie kann man denn Teile einer Maske bei Klick auf nen Button einblenden oder ausblenden.

    Würd gerne nen "erweitert" Button nutzen damit ein Teil nur auf Wunsch angezeigt wird.

    Die Maske ist wie bei MFC üblich von CDialog abgeleitet.

    Wär schön wenn mir jemand helfen könnte.

    Viele Grüße
    Arjen



  • Verkleinere doch einfach deinen Dialog, wenn Du's geschickt machst brauchst du nicht einmal die Buttons (o. was auch immer) ausblenden.



  • Am einfachsten geht es so:
    1. Anzeigen des Dialoges in der vollen Größe
    2. In OnInitDialog, alle Controls verstecken und disablen die nicht benötigt werden.
    3. Position des Controls bestimmen, das nicht mehr sichtbar ist.
    4. Größe des Dialoges auf diesen Wert verkleinern. Alte Größe merken.

    Beim Expandieren einfach:
    1. Alte Größe wieder herstellen.
    2. Alle versteckten und diableten Controls wieder enablen und einblenden.



  • ich ärger mich gerade mit den Funktionen
    - GetWindowRgn
    - SetWindowRgn

    rum. Kriegs irgendwie nicht gebacken.

    Wie bekomm ich denn meine Windowgröße raus und wie kann ich Sie ändern?


  • Administrator

    GetWindowRect?
    MoveWindow, bzw. SetWindowPos?

    Grüssli



  • connan schrieb:

    Verkleinere doch einfach deinen Dialog, wenn Du's geschickt machst brauchst du nicht einmal die Buttons (o. was auch immer) ausblenden.

    Man muss die Buttons zumindest diablen, sonst kann man Sie per Acceleratoren oder per Tab + Leertaste aktivieren.



  • ... funktioniert bestens... vielen dank 👍 🙂

    RECT myRect;
    	GetWindowRect(&myRect);
    
    	if(400 < (myRect.bottom - myRect.top)) // meine Maske ist ausgeklappt 462 groß
    	{
    		GetDlgItem(IDC_BUT_1)->EnableWindow(false);
    		GetDlgItem(IDC_BUT_2)->EnableWindow(false);
    		GetDlgItem(IDC_BUT_3)->EnableWindow(false);
    		GetDlgItem(IDC_BUT_4)->EnableWindow(false);
    		GetDlgItem(IDC_BUT_5)->EnableWindow(false);
    
    		// um 170Pixel verkleinern, damit die Buttons IDC_BUT_1 bis ICD_BUT_5 nicht mehr zu sehen sind
    		//SetWindowPos(NULL, myRect.left, myRect.top, myRect.right - myRect.left, myRect.bottom - myRect.top - 170, SWP_SHOWWINDOW);
    		MoveWindow(myRect.left, myRect.top, myRect.right - myRect.left, myRect.bottom - myRect.top - 170, true);
    	}
    	else
    	{
    		// um 170Pixel vergrößern, damit die Buttons IDC_BUT_1 bis ICD_BUT_5 wieder zu sehen sind
    		MoveWindow(myRect.left, myRect.top, myRect.right - myRect.left, myRect.bottom - myRect.top + 170, true);
    		Show(); // ist ne eigene Funktion welche statusabhängig Buttons enabled etc. ...
    	}
    

Anmelden zum Antworten