Neuen Dialog links oben neben Hauptfenster platzieren

Cappaja

Erfahrenes Mitglied
hallo,

ich suche lediglich die koordinaten der linken oberen ecke des elternfensters. mittels getwindowpos() bekomme ich (0,0), also nur den absolutpunkt innerhalb der anwendung. ich suche eine funktion die mir die linke obere ecke absolut zum bildschirm angibt um so mittels setwindowpos() meinen neuen dialog zu erstellen. falls es noch eine andere möglichkeit gibt, so lasst es mich bitte wissen ;)

mfg cappaja
 
Moin,

verstehe ich das richtig?
Deine Anwendung läuft nicht im Vollbildmodus, so dass Du rundherum einen Teil des Desktop siehst?

Du wirst Dein Fenster IMHO aber immer nur relativ zum Hauptfenster Deiner Anwendung positionieren können (also eben relativ zu (0,0)). Andernfalls wären das ja negative Werte ...

Gruß
Klaus
 
Moin McCoder,

hmm, der Befehl ist nicht schlecht!
Ich hatte damit vor geraumer Zeit auch schon mal was versucht, aber nicht so hinbekommen, wie geplant :confused:
Muss ich noch mal schauen, was ich falsch gemacht habe ...

gruß
Klaus
 
hallo,

ich meinte ja das ich GetWindowRect() benutzt habe, GetWindowPos() existiert ja überhaupt nicht ;) ich habe da aber das problem das ich lediglich die obere linke position mit (0,0) zurück bekomme.
gibt es vielleicht eine funktion die einen dialog automatisch in der mitte des bildschirms positioniert? mit SetWindowPos() habe ich ja immer das problem das je nach bildschirmauflösung mein programm woanders auftaucht.

@vfl_freak: ja es ist ne dialogbasierende anwendung welche nicht den bildschirm ausfüllt. daneben soll ein kleinerer dialog platziert werden um das hauptfenster steuern zu können

mfg cappaja
 
GetWindowRect() gibt auf jeden Fall die Koordinaten bezogen auf die linke obere Ecke des Bildschirms aus. Ich vermute daher einen Fehler bei der Anwendung dieser Funktion.
Beim Positionieren muss man natürlich die aktuelle Bildschirmgröße mit berücksichtigen (Ermittlung via GetSystemMetrics). Dann braucht man aber eigentlich auch nicht die Position des Fensters sondern nur seine Größe.
C++:
// hwnd: Handle des zu zentrierenden Fensters

RECT rc;
GetWindowRect(hWnd, &rc);

SetWindowPos( hWnd,
              NULL,
              (GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2,
              (GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2,
              0,
              0,
              SWP_NOSIZE | SWP_NOZORDER );

Gruß
MCoder
 
hi mcoder,

hat wunderbar geklappt, mein problem war das ich GetWindowRect() in OnInitDialog aufgerufen habe, zu diesem zeitpunkt werden noch nicht-initialisierten werte des fensters zurückgeliefert, in diesem fall (0,0). so hab ich die daten erst beim doppelklick in eine membervariable geschrieben und in der zu öffnenden dialogklasse wie folgt aufgerufen:

Code:
RECT rc;
GetWindowRect(&rc);
 
SetWindowPos( NULL,
		        (((CWiwoDlg*)GetParent())->m_MainWndRect.left - (rc.right - rc.left)),
			(((CWiwoDlg*)GetParent())->m_MainWndRect.top),
			0,
			0,
			SWP_NOSIZE | SWP_NOZORDER );

so wird jetzt die hauptanwendung mittig angezeigt und der kleine dialog links oben neben der hauptanwendung. nochmals vielen dank

mfg cappaja
 
Zurück