Windows Fenster



  • Hi

    ist es möglich, mit ANSI C Windows Fenster zu programmieren, also Programme, die dann in Fenster ausgegeben werden?

    Ich kann ANSI C. Finde allerdings keine Tutorials, die zeigen, wie man da Windows Fenster programmieren kann. Nun frage ich mich, ob das überhaupt möglich ist. Ich werde evtl. später C++ lernen. Damit soll es anscheinen Standard sein, dass man Windows Fenster programmiert.

    Wie gesagt jetzt die Frage, ob man das auch mit ANSI C erreichen kann?

    mfg
    Bernasconi



  • so weit ich weiss (nie damit gearbeitet) besteht die win-api doch aus c-funktionen.
    also such dir am besten tutorials zur win-api, die (oder eine andere c-api, die die funktionen der win-api abstrahiert) musst du verwenden, um windows-gui-programme zu programmieren.

    mfg,
    julian



  • Julian__ schrieb:

    so weit ich weiss (nie damit gearbeitet) besteht die win-api doch aus c-funktionen.
    also such dir am besten tutorials zur win-api, die (oder eine andere c-api, die die funktionen der win-api abstrahiert) musst du verwenden, um windows-gui-programme zu programmieren.

    mfg,
    julian

    Julian__ schrieb:

    so weit ich weiss (nie damit gearbeitet) besteht die win-api doch aus c-funktionen.
    also such dir am besten tutorials zur win-api, die (oder eine andere c-api, die die funktionen der win-api abstrahiert) musst du verwenden, um windows-gui-programme zu programmieren.

    mfg,
    julian

    Muss ich da grossen Aufwand betreiben? Ich meine, die Funktionalität von C ist mir klar. Aber wird da noch weiteres verlangt ausser die Funktionen der Bibliothek aufzurufen?

    Ich werde mal danach googlen. Dankeschön.

    Nachtrag:
    Habe noch nichts gefunden. Evtl. suche ich nach den falschen Begriffen. "winapi C", "c-api C", "c-api" bringen mir leider nur C++ Bibliotheken.



  • Hallo

    WinAPI ist Geschmackssache. Ich fand es nervig, aber andere schwören drauf. Google einfach mal nach "winapi tutorial"

    chrische



  • ja Tutorial hat wohl gefehlt in meiner Suche.

    http://www.seku.info/?action=showarticle&dir=articles/winapi/part1_windows&name=&sid=

    Das habe ich gerade gefunden. Ist sehr interessant, jedoch, wenn ich das implementiere (ich meine das Listig unten auf der Page). 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?

    Edit:
    http://www.win-api.de/tutorials.php?SessID=34545adf7c2eb5c271709fa5dd5efac4&SessID=34545adf7c2eb5c271709fa5dd5efac4
    Dies hier ist wohl besser, ich werde mir dieses anschauen, durchlesen und durcharbeiten.



  • du hast einen nachtrag geschrieben ohne dein post zu editieren? heisst das, du schreibst dein post erst, guckst dann weiter rum und wenn du was neues findest löscht du nicht dein altgeschriebenes sondern machst es in einem nachtra und schickst es dann ab?
    naja eigentlich ganz praktisch, dann sieht man, dass du was neues geschrieben hast.

    hier noch ein gutes tutorial zur qual der wahl. englisch oder fein
    http://www.winprog.org/tutorial/

    edit:
    da kommt mir was bekannt vor. das hier (ähnlich) hab ich schonmal in dem forum geschrieben...hat da jemand die suchfunktion nicht verwendet 😮
    ;)^^



  • 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.asp

    zweite 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





  • 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.html

    btw: 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);
    }
    

Anmelden zum Antworten