tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
927
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Wunderschönen guten Abend Com!

    Ich versuche mcih an der Windowsprogrammierung mit C (ich weiß, Linux usw ist viel besser, aber bitte lasst mal Kommentare in die Richtung ), aber Dev-C++ spuckt mir 2 Fehlermeldungen aus.
    Ich habe keine Ahung wo der Fehler liegt, ich habe es 1:1 aus dem Buch (WindowsProgrammierung) übernommen.
    Ich poste einfach mal den ganzen Code, da ich denke, das euch die 2 Zeilen nicht weiterhelfen werden
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
    #include <windows.h>
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("HelloWin");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
        
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //Einmal hier
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
        
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL,TEXT("Programm arbeitet mit Unicode und setzt Windows NT voraus!"),szAppName, MB_OK|MB_ICONERROR);
            return 0;
            }
        hwnd = CreateWindow(
        szAppName,
        TEXT("Das erste echte Programm"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        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)
        {
                HDC hdc;
                PAINTSTRUCT ps;
                RECT rect;
                switch (message)
                {
                       case WM_CREATE:
                            PlaySound("D:\Eigene Musik/Spit it out",NULL,SND_FILENAME|SND_ASYNC); //Einmal da
                            return 0;
                       case WM_PAINT:
                            hdc = BeginPaint (hwnd,&ps);
                            GetClientRect(hwnd,&rect);
                            DrawText (hdc, TEXT("Hello, Window XP!"), -1, &rect, DT_SINGLELINE | DT_VCENTER);
                            EndPaint(hwnd, &ps);
                            return 0;
                       case WM_DESTROY:
                            PostQuitMessage(0);
                            return 0;
                }
        return DefWindowProc(hwnd, message, wParam, lParam);
        }
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.425
    Zitat Zitat von Nord-Süd-Richtung Beitrag anzeigen
    ... aber Dev-C++ spuckt mir 2 Fehlermeldungen aus.
    Welche sind das?
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Hi,

    Mist, hab ich wohl vergessen zu posten
    Das war einmal zu GetStockObject und PlaySound (siehe Source).

    Ich habe das Problem inzwischen zu 50% gelöst.
    Ich hatte shlicht und einfach veregssen das ganze in eine Windows Application zu speichern :-[
    Damit ging der GetStockObject Fehler schon mal weg. Das Playsound habe ich einfach herausgenommen.
    Mein Problem jetzt: Das Fenster schließt sich unmittelbar nach der initialisierung -.-
    Es wird auch nur eine *.o Datei gespeichert, aber keine *.exe...
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    
    #include <windows.h>
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("HelloWin");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
        
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
        
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL,TEXT("Programm arbeitet mit Unicode und setzt Windows NT voraus!"),szAppName, MB_OK|MB_ICONERROR);
            return 0;
            }
        hwnd = CreateWindow(
        szAppName,
        TEXT("Das erste echte Programm"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        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)
        {
                HDC hdc;
                PAINTSTRUCT ps;
                RECT rect;
                switch (message)
                {
                       case WM_DESTROY:
                             PostQuitMessage (0);     
                             break;
                       default:
                             return DefWindowProc(hwnd, message, wParam, lParam);                           
                }
        return 0;
        }
    Das Ganze wird ohne Fehlermeldung/Warnung etc kompiliert, es öffnet sich lediglich und schließt sich nach einem Sekundenbruchteil
     

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.425
    Zitat Zitat von Nord-Süd-Richtung Beitrag anzeigen
    Es wird auch nur eine *.o Datei gespeichert, aber keine *.exe...
    Sehr unwahrscheinlich, denn dann würde das Programm auch nicht kurz aufblitzen. Die EXE liegt wahrscheinlich in einem anderen Verzeichnis (ich kenne mich mit Dev C++ nicht aus).

    Was deinen Code betrifft: Du springst ja aus der Message-Loop gleich wieder heraus. Damit ist das Programm natürlich gleich beendet.
    Das sollte eher so aussehen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
     
    ...
     
    int nRet;   
    MSG msg; 
     
    while( (nRet = GetMessage(&msg, NULL, 0, 0)) != 0 )
    { 
        if( nRet == (-1) )
        {
            break;
        }
        else
        {
            TranslateMessage(&msg); 
            DispatchMessage(&msg); 
        }
    } 
     
    return 0;
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  5. #5
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Danke,
    bis auf die *.exe funktioniert jetzt alles =)
    Kannst du vllt noch erklären, was der Teil macht?
     

  6. #6
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.425
    Zitat Zitat von Nord-Süd-Richtung Beitrag anzeigen
    bis auf die *.exe funktioniert jetzt alles =)
    Das ist schwer vorstellbar. Ohne .exe sollte gar nichts laufen. Da musst du vielleicht noch mal suchen

    Zitat Zitat von Nord-Süd-Richtung Beitrag anzeigen
    Kannst du vllt noch erklären, was der Teil macht?
    Das gibt's eigentlich nicht viel zu erklären. Das ist eine Endlosschleife, die die Windows-Messages für deine Applikation einsammelt (GetMessage) und an die Callback-Funktion weiterreicht (TranslateMessage, DispatchMessage).

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. undefined reference to
    Von hintermair im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 27.04.09, 14:30
  2. Antworten: 2
    Letzter Beitrag: 12.04.05, 13:00
  3. [Linker error] undefined reference to ....
    Von Katzenbauer im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 09.02.05, 22:38
  4. cygwin linker "undefined reference"
    Von freddy23 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 22.10.04, 23:06
  5. [Linker Error] undefined reference to..
    Von srpcool im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 07.04.04, 22:51