Position des Fensters

Hallo ihr Lieben,

ich würde gerne die Position eines Fensters (DosDialog) bestimmen wollen. Habe mich jetzt schon etwas schlau gemacht und immer wieder von den gleichen Funktionen gehört unter anderem diese die mir sehr interessant erscheint:

Code:
CWnd::MoveWindow(hwnd,0,0,100,100,TRUE);

Dieses Beipiel habe ich hierher: http://www.cpp-programming.de/quellcodes/viewcode.php?id=041

Leider funktioniert es nicht. Könntet ihr vielleicht mal gegenprüfen?

Danke Mike.
 
Mit MoveWindow() habe ich auch schon Probleme gehabt. Ich verwende lieber SetWindowPos():

Code:
::SetWindowPos( hwnd, 0, 0,0, 100,100, 0, 0, SWP_NOSIZE|SWP_NOZORDER ); // usw usf
Schau dazu mal in die MSDN.

Übrigens sieht dein Aufruf komisch aus. Wenn du MFC verwendest, ruft MoveWindow() besser als Methode auf:
Code:
MeinFenster.MoveWindow(0,0,100,100,TRUE);
Und ohne MFC mach es so:
Code:
::MoveWindow(hwnd,0,0,100,100,TRUE);
 
Hallo

ich benutze Visual C++ 6.0 und habe eine Konsolenanwendung erstellt.
Mit folgendem Code hat das MoveWindow tadellos funktioniert:


#include <windows.h>
#include <iostream>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{
HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
MoveWindow(hwnd,0,0,100,100,TRUE);

getch();
return 0;
}


Ich musste allerdings bei den Projekteigenschaften die vorkompilierten Header deaktivieren und beim Linken die user32.lib dazulinken.

Zur Feststellung der Fensterposition:


int main(int argc, char *argv[])
{

WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);

HWND hwnd = FindWindow("ConsoleWindowClass",NULL);

GetWindowPlacement(hwnd, &wp);

printf("%d %d %d %d", wp.rcNormalPosition.left, wp.rcNormalPosition.top, wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);

getch();
return 0;
}


Ich hoffe, es hilft weiter.
 
Hi,

hab das jetzt so gemacht:

Code:
CWnd::SetWindowPos(procStartDXFDWG->MainWindowHandle, 0, 0, 100, 100);

Allerdings hab ich halt mit dem "hwnd" Probleme und weiss nicht ob das so richtig ist.
 
Warum nimmst du nicht die SetWindowPos Methode in deines CWnd Fensters? Dann brauchst du keinen Handle angeben (und MainWindowHandle ist das sowieso nicht). Oder was ist procStartDXFDWG für eine Klasse?
 
@Dudadida ich hab überhaupt nicht verstanden was du meinst *g*

Also nur das ihr das versteht:

Hier ist mein Prozess (eine Dosbox) den ich wie folgt starte:

Code:
procStartDXFDWG = new Process();

So für dieses Fenster bestimme ich nun die Position wie? Das is die Frage.
 
Ach so, was ist Process denn überhaupt für eine Klasse? Eine eigene? Wurde überhaupt das Fensterhandle bestimmt?
Prinzipiell kannst du dir, wenn du das richtige (!) Fensterhandle hast, ein CWnd-Objekt erstellen:

Code:
CWnd *window = CWnd::FromHandle(hwnd);

Dann kannst du mit dem CWnd-Objekt bequem alle Fensteroperationen durchführen, also

Code:
window->MoveWindow(0,0,100,100,TRUE);

oder was auch immer.
 

Neue Beiträge

Zurück