Wie ktoś co tu nie działa?
#include <windows.h>
#include <conio.h>
#include <iostream>
int main()
{
MoveWindow(0, 500, 500, 700, 350,0);
return 0;
}
Wie ktoś co tu nie działa?
#include <windows.h>
#include <conio.h>
#include <iostream>
int main()
{
MoveWindow(0, 500, 500, 700, 350,0);
return 0;
}
Dlaczego się nie skompilowało? Nie dostajesz żadnego komunikatu? Miejsca błędu? Czegokolwiek?
Konsola się pojawia ale nie w pozycji 500,500.....
Zdaje się, że pierwszy argument to HWND
, a 0 to prawdopodobnie nie jest konsola.
Zrób tak:
MoveWindow(GetConsoleWindow(), 500, 500, 700, 350, TRUE);
To działa tylko z tym sztucznym kodem (jakimś modułem) a ja chcę żeby było "czysto".
#define _WIN32_WINNT 0x0500
Po pierwsze, #define _WIN32_WINNT
przed <windows.h>
należy traktować jako wymagane - inaczej wersja nagłówka której używamy może „chwycić” definicje dla nowszej wersji windowsa niż mamy i program z dziwnego powodu nie działa.
Makro to ma oznaczać, jakiej wersji Windowsa ma program minimalnie wymagać:
0x500 | 2000
0x501 | XP
0x600 | Vista
0x601 | 7
0x602 | 8
0x603 | 8.1
0xA00 | 10
Brak definicji pod Visualem oznacza „maksymalna wersja Windowsa przewidziana przez używaną wersję Windows SDK” (co może oznaczać wersję nowszą systemu niż zainstalowana), a pod jakimś GCC może na przykład oznaczać „wersja przedpotopowa Windowsa, w której wielu funkcji nie ma”.
Więc nie narzekaj, tylko daj to makro. Funkcja GetConsoleWindow
pojawiła się w Win2000, więc nic dziwnego że wymagana jest wartość 0x500 - lub wyższa.
Zresztą nawet w dokumentacji masz jak wół:
To compile an application that uses this function, define _WIN32_WINNT as 0x0500 or later. For more information, see Using the Windows Headers.
Po drugie, użycie 0
, czyli NULL
, jako uchwytu okna do MoveWindow
to gwarancja porażki.