Maximieren ohne Caption

EriFo

Erfahrenes Mitglied
Gibt es eine Möglichkeit, ein fenster zu maximiere ohne das es eine Captionbar besitzt ABER das es nicht den ganzen Bildschirm einnimmt - halt nur maximiert?

Wenn es den Stil WS_OVERLAPPED besitz kann man es Maximieren aber die Titelbar nicht entfernen und wenn man ihm den Style WS_POPUP gibt dann nimmt es gleich den ganzen Bildschirm ein - das wil ich auch net.

M.f.G. Erik
 
Ich glaube, ich verstehe nicht ganz, aber du kannst die maximale (und minimale) Grösse eines Fenster über WM_GETMINMAXINFO bestimmen. Dann sollte Windows dein Fenster beim Maximieren auf die übergebene Grösse setzen.

Du kannst die Caption auch nachträglich über Style-Manipulation (MFC ModifyStyle, Win32 SetWindowLong) verändern. Evtl. musst du ein SetWindowPos mit SWP_FRAMECHANGED nachschieben.
 
Das mit "ModyfyStyle()" ist klar - nur wenn ich die Titelleiste wegmache - also entweder den Stil "WS_CAPTION" entferne oder gleich den Fensterstil "WS_POPUP" ohne Titelleiste generiere - wird mein Fenster radikal über alles gelegt - auch über die Tastkleiste - aber ich hätte gern, das es sich wie ein normales Fenster verhält und sich hinter diese anordnet.
 
Habs grade ausprobiert, WM_GETMINMAXINFO ist genau das Richtige:

In ptMaxPosition kommt die obere linke Ecke beim maximierten Zustand, in ptMaxSize die Grösse.
 
Jo - kenn ich - also lese ich aus deiner Antwort das isch mich da selber dum kümmern muss. ^-^°

Ich lasse mir mit der Funktion "SystemParametersInfo(SPI_GETWORKAREA, 0, &max, 0);" den freien Arbeitsbereich geben, plus ein paar werte hier minus ein paar dort - und das klappt alles super - aber schon offenbart sich mir ein Weiteres Problem:

Im Kontextmenu des Fensters in der Taskleiste sind die Menüpunkte ausgegraut - da ja nach Windowslogik keine Titelleiste da und somit der Dialog weder Maximiert noch minimiert werden kann.
Nun kann er das doch und so ändert sich das Kontextmenu auch nicht mit der Konsequens, dass wenn er - oh Wunder - doch maximiert ist die Menüpunkte :
"Verschieben" und "Grösse ändern" noch aktiv sind.
Ich wüsste jetzt nicht, wo ich dieses Systemmenü manipulieren sollte ..

M.f.G. Erik
 
Oha, mit dem Systemmenü rumspielen ist immer etwas tricky. Aber bei jedem Standard-MFC-Projekt wird der About-Dialog in das System-Menü reingepfriemelt (wo er meiner Meinung nach nix zu suchen hat):

Code:
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

Hier kannst du statt AppendMenu ja auch Menuitems entfernen/disablen. Ich meine, die Standard-Einträge im Systemmenü hätten SC_CLOSE, SC_MAXIMIZE usw. als Wert.
 
Das will einfach nicht klappen ^-^°
Also ich fange in der WindowProc die WM_SIze Nachrichten ab und manipuliere dann das Systemmenu entsprechend um, etwa so :

CMenu
* pSysMenu = GetSystemMenu(FALSE);
if(pSysMenu != NULL)
{
pSysMenu->ModifyMenu( SC_RESTORE, MF_STRING|MF_BYCOMMAND|MF_GRAYED, 0, reinterpret_cast<LPCTSTR>(0));
}


Mein Problem ist jetzt, das ich nicht so richtig weiss was ich da als Parameter reinscheissen soll. Laut MSDN etwa so (s.o.) aber was ist z.B. mit den letzten zweien ?
Bei mir ist dann im Systemmenu immer nur ein Seperator zu sehen.

M.f.G. Erik

 
Zuletzt bearbeitet:
Da wirds unglücklich, du musst als vorletzten Parameter die ID selber (SC_MAXIMIZE usw.) wieder reinsetzen, und als letzten den Text. Da du die Texte besser nicht fest einprogrammierst, solltest du die vorher vom Menü selber abfragen.
 
Arg - diese verdammte Sch****.

Ich wollte das jetzt so machen:

pSysMenu->EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_ENABLED );
pSysMenu->EnableMenuItem( SC_MOVE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );

das "klappt" auch - aber nur wenn ich es gleich danach anzeigen lasse - also kann ich das nicht bei WM_SIZE setzten sondern muss das idealerweise genau vor dem Anzeigen des Menüs machen.

Da war mein erste Gedanke WM_NCRMUTTONUP mit HTSYSMENU.
-_- Jetzt bekomm ich diese Nachricht wieder nirgends.
Gibts da noch was anderes ? Sonst lass ichs sein. ^-^°

M.f.G. Erik
 
Zuletzt bearbeitet:
Zurück