Funtionskopf fehlt



  • Ich habe einen beenden Button, aber sobald ich einen zweiten hinzufüge gibt es den Fehler "Funktionskopf fehlt - Parameterliste im altem Stil?"

    [code]
    // erster Button mit dem alles noch funktioniert
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
    LPARAM lparam)

    {
    static HWND hButton;

    switch (message)
    {
    case WM_CREATE:
    {
    hButton = CreateWindow( "button",
    "Beenden",
    WS_CHILD | WS_VISIBLE,
    0, 0, 0, 0,
    hwnd,
    NULL,
    ((LPCREATESTRUCT) lparam) -> hInstance,
    NULL);
    return (0);
    }
    case WM_SIZE:
    {
    MoveWindow(hButton, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30,
    160, 22, TRUE);
    return (0);
    }
    case WM_COMMAND:
    {
    if (lparam == (LPARAM)hButton)
    {
    if (HIWORD(wparam) == BN_CLICKED)
    SendMessage(hwnd, WM_CLOSE, 0, 0);
    }
    return (0);
    }
    case WM_DESTROY:
    {
    done = TRUE;
    PostQuitMessage(0);
    return (0);
    }
    }
    return (DefWindowProc(hwnd, message, wparam, lparam));
    }

    // zweiter Button, sobald dieser in den Code eingefügt wird gibt es den Fehler
    ➡ {
    static HWND hButton;

    switch (message)
    {
    case WM_CREATE:
    {
    hButton = CreateWindow( "button",
    "Beenden",
    WS_CHILD | WS_VISIBLE,
    0, 0, 0, 0,
    hwnd,
    NULL,
    ((LPCREATESTRUCT) lparam) -> hInstance,
    NULL);
    return (0);
    }
    case WM_SIZE:
    {
    MoveWindow(hButton, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30,
    160, 22, TRUE);
    return (0);
    }
    case WM_COMMAND:
    {
    if (lparam == (LPARAM)hButton)
    {
    if (HIWORD(wparam) == BN_CLICKED)
    SendMessage(hwnd, WM_CLOSE, 0, 0);
    }
    return (0);
    }
    case WM_DESTROY:
    {
    done = TRUE;
    PostQuitMessage(0);
    return (0);
    }
    }
    return (DefWindowProc(hwnd, message, wparam, lparam));
    }

    ach ja, ich benutze den microsoft c++ 6.0 compiler

    Danke schon mal im Voraus.



  • Du kannst nicht einfach den Rumpf deiner MessageProc kopieren, sondern musst das schon beides da mit hineinpacken ⚠

    static HWND hButton1;
    static HWND hButton2;
    
    switch (message)
    {
      case WM_CREATE:
      {
        hButton1 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
        hButton2 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
        return (0);
      }
      case WM_SIZE:
      {
        MoveWindow(hButton1, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30, 160, 22, TRUE);
        MoveWindow(hButton2, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30, 160, 22, TRUE);
        return (0);
      }
      case WM_COMMAND:
      {
        if (lparam == (LPARAM)hButton1)
        {
          if (HIWORD(wparam) == BN_CLICKED)
            SendMessage(hwnd, WM_CLOSE, 0, 0);
        }
        if (lparam == (LPARAM)hButton2)
        {
          if (HIWORD(wparam) == BN_CLICKED)
            SendMessage(hwnd, WM_CLOSE, 0, 0);
        }
        return (0);
      }
      case WM_DESTROY:
      {
        done = TRUE;
        PostQuitMessage(0);
        return (0);
      }
    }
    return (DefWindowProc(hwnd, message, wparam, lparam));
    

    Am besten verwendest du für deine Controls IDs, dann musst du dir nicht mehr deren Handle merken und kannst in WM_COMMAND mit einem switch das ganze regeln:

    switch(GetDlgCtrlID((HWND)lparam))
    {
      case ID_BUTTON_1:
        if (HIWORD(wparam) == BN_CLICKED)
          SendMessage(hwnd, WM_CLOSE, 0, 0);
        break;
      case ID_BUTTON_2:
        if (HIWORD(wparam) == BN_CLICKED)
          SendMessage(hwnd, WM_CLOSE, 0, 0);
        break;
    }
    return (0);
    


  • Danke für die schnelle Antwort
    Ich bin halt noch absoluter Anfänger 😕 .



  • sorry aber wenn ich es jetz so mach:

    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
    LPARAM lparam)

    static HWND hButton1;
    static HWND hButton2;

    switch (message)
    {
    case WM_CREATE:
    {
    hButton1 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
    hButton2 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
    return (0);
    }
    case WM_SIZE:
    {
    MoveWindow(hButton1, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30, 160, 22, TRUE);
    MoveWindow(hButton2, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30, 160, 22, TRUE);
    return (0);
    }
    case WM_COMMAND:
    {
    if (lparam == (LPARAM)hButton1)
    {
    if (HIWORD(wparam) == BN_CLICKED)
    SendMessage(hwnd, WM_CLOSE, 0, 0);
    }
    if (lparam == (LPARAM)hButton2)
    {
    if (HIWORD(wparam) == BN_CLICKED)
    SendMessage(hwnd, WM_CLOSE, 0, 0);
    }
    return (0);
    }
    case WM_DESTROY:
    {
    done = TRUE;
    PostQuitMessage(0);
    return (0);
    }
    }
    return (DefWindowProc(hwnd, message, wparam, lparam));

    }

    bekomme ich folgende Fehlermeldungen.

    warning C4518: 'static ' : Unerwartete(r) Speicherklassen- oder Typbezeichner; wird ignoriert
    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'HWND'
    fatal error C1004: Unerwartetes Dateiende gefunden

    Und dann hab ich noch eine Frage.
    Wie mache ich es das der Qulltext farbig dargestellt wird so wie in c++ und die Klammern nicht immer nach links an den Rand gesetzt werden.



  • der code wird mit "[ cpp ]" eingeleitet und endet auf "[ /cpp ]" mit ohne leerzeichen hinter den klammern.

    es währe ganz nützlich, wenn du dir einen compiler zulegst, der noch zeilen angibt, so ist es einfacher, fehler zu finden.

    p.s.: LEITEST DU DIE FUNKTION MIT "{" EIN UND ENDET SIE MIT "}", z.b.:

    int HalloProc(HWND hWnd, int iNumber)
    {
        //jetzt sind da klammern
        return(0);
    }
    

    ?



  • Bei dir fehlt die öffnende geschweifte Klammer nach dem Funktionskopf...


Anmelden zum Antworten