Windows Fenster
-
Bernasconi schrieb:
Dann startet zuerst eine schwarze Konsole, wie gewöhnlich und danach das Fenster. Wie bringe ich das fertig, dass nur das Fenster zu sehen ist?
irgendwo in den projektsettings kannste auswählen, ob du eine 'console' oder 'windows' anwendung machen willst. das stellste auf letzteres und dann nimmst du anstatt 'main' eine 'WinMain' als startfunktion.
guckst du: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/winmain.aspzweite möglichkeit: als erstes in der 'main' einen 'FreeConsole()' aufruf machen. dann flackert das schwarze fenster nur kurz beim starten auf...
-
Dieser Thread wurde von Moderator/in TactX aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
WinApi ist grundsätzlich in C! Hat aber paar "Eigenheiten" wie "eigene" Datentypen und so die am Anfang zwar Verwirren aber wenn man sich eingefuchst hat relativ einfach sind.
Also ich hatte auch mit C Angefangen und bin dann bei der WinApi gelandet und bin eigentlich sehr zufrieden.MfG schirrmie
-
Irgendwie finde ich, man sollte die WinAPI-Tutorial-Links mal in einen festen Thread legen.
http://www.win-api.de/tutorials.php?SessID=97b82290f5218d62209ee5282e0d275f&SessID=97b82290f5218d62209ee5282e0d275f
http://pronix.linuxdelta.de/C/win32/index.shtml
http://www.winapi.net/
http://www.robsite.de/tutorials.php?tut=windows
http://www.henkessoft3000.de/
und nicht zuletzt:
http://www.google.de/search?hl=de&q=WinAPI+Tutorial&btnG=Google-Suche&meta=und viele andere. Wer suchet, der findet.
-
Ich benutze den GCC-Compiler. Wie kann ich dem beibrigen, dass es sich um eine Windows Applikation handelt, und er somit die Console gar nicht aufmachen soll?
ja, die Datentypen sind sehr "komisch". Ich werde mich durch die Tutorials kämpfen und versuchen das möglichst gut hinzubekommen. Dankeschön für die Hilfe.
-
ich weiss nicht genau, gcc benutze ich nicht, natürlich musst du zumindest <windows.h> einbinden am anfang. und WinMain() statt main() benutzen. (sollte alles in den tutorials stehen)
aber vielleicht kommst du hiermit weiter: http://www.c-plusplus.net/forum/viewtopic-var-p-is-759079.htmlbtw: google.de -> "winapi gcc" -> 1. treffer

mfg,
julian
-
Julian__ schrieb:
ich weiss nicht genau, gcc benutze ich nicht, natürlich musst du zumindest <winapi.h> einbinden am anfang.

Also die Header ist mir nicht bekannt, meinst Du vllt. <windows.h> ?
-
oooooooh, sorry!!!! war wohl geistig abwesend beim schreiben!
ist natürlich <windows.h> !sorry nochmal!
mfg,
julian
-
Ich habe nun versuch ein Tutorial ( http://www.win-api.de/tutorials.php?tutid=3&SessID=34545adf7c2eb5c271709fa5dd5efac4 ) durchzuarbeiten.
Nun, leider ist bei diesem oben genannten Kapitel schluss. Das Fenster, das aufgehen sollte, geht zwar kurz auf, verschindet allerdings sofort wieder und die Anwendung ist beendet.
Code:
#define STRICT #include <Windows.h> #include <stdio.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); const char szAppName[] = "Ein eigenes Fenster"; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = szAppName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(szAppName, "Titelleiste", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, /* X-Position auf dem Monitor */ CW_USEDEFAULT, /* Y-Position auf dem Monitor */ CW_USEDEFAULT, /* Fensterbreite */ CW_USEDEFAULT, /* Fensterhoehe */ NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); return msg.wParam; } } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); getchar(); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }in diesem Beispiel finde ich insbesondere die Switch anweisung ein bisschen komisch ^^...
leider bin ich noch ziemlich unsicher, was die WinAPI angeht, deshalb kann ich da den Fehler nicht erkennen. Ich versuche mit eurer Kritik viel zu lernen.
Dankeschön.
-
#define STRICT #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); const TCHAR szClassName[] = TEXT("ClassNameApp"); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = szClassName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(szClassName, TEXT("Anwendungsname"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, /* X-Position auf dem Monitor */ CW_USEDEFAULT, /* Y-Position auf dem Monitor */ CW_USEDEFAULT, /* Fensterbreite */ CW_USEDEFAULT, /* Fensterhoehe */ NULL, NULL, hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; // Das kommt erst HIER! } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }