Commctrl.h und Macros



  • Hallo zusammen,
    mir ist aufgefallen, dass alle Macros, die ich bis jetzt ausprobiert hab und Commctrl.h als Header vorraussetzen, nicht funktionieren. Ich habs bis jetzt mit "Edit_SetCueBanner", "Edit_ShowBalloonTip" und "Button_SetNote" versucht. Beim compilen bekomme ich von Dev C++ für die Macros immer diesen Fehler:

    `Edit_SetCueBanner' undeclared

    Wie kann man das Problem lösen?
    Vielen Dank schonmal 🙂



  • Ich kann auch kein Edit_SetCueBanner in dem Header finden, nur Edit_SetCueBannerText. Insofern war die Fehlermeldung doch berechtigt.



  • Die Fehlermeldung tritt aber nicht nur bei Edit_SetCueBanner auf, sondern auch bei Edit_ShowBalloonTip und Button_SetNote, und wenn ich statt SetCueBanner SetCueBannerText nehme kommt das selbe Problem



  • hi

    dann würd ich mal commctrl.lib in dein project einbinden.

    lowbyte



  • nope, funktioniert auch nicht, immer wieder der selbe fehler



  • die lib musst du so oder so einbinden... da er sonnst die funktionen der lib gar nicht findet!

    windows.h eingebunden?

    lowbyte



  • lowbyte_ schrieb:

    hi

    dann würd ich mal commctrl.lib in dein project einbinden.

    lowbyte

    Dann wär's ja auch ne undefined reference und nicht undeclared...

    Tja, und du hast den Header auch dort inkludiert, wo du die Makros nutzen willst? Sind die vielleicht irgendwie bedingt durch #if, #ifdef o.ä.?



  • hi

    und schau mal in die header datei!

    villeicht ein rechtschreibe fehler?

    ansonnsten versuche mal herauszufinden welche libs von deinem project geladen werden.

    lowbyte



  • hi

    ja ist schon klar matze ..
    wollte nur darauf hinweisen.

    lowbyte



  • hi

    finde heraus ob die .h datei richtig definiert wurde!
    matze hat dich bereit darauf hingewiesen.

    was kann man schon bei einer headerdeklaration falsch machen!
    🙄

    lowbyte



  • ok, hier mal der komplette test code bei dem der fehler auftritt:

    #include <windows.h>
    #include <Commctrl.h>
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    char szClassName[ ] = "WindowsApp";
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        MSG msg;
        WNDCLASS wc;
        HWND hwnd;
    
        wc.hInstance = hInstance;
        wc.lpszClassName = szClassName;
        wc.lpfnWndProc = WndProc;
        wc.style = CS_DBLCLKS;
        wc.lpszMenuName = NULL;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hCursor = LoadCursor (NULL, IDC_ARROW);
        wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
    
        if (!RegisterClass(&wc)) return 0;
    
        hwnd = CreateWindow (szClassName,
                             "CueBanner",
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             250,
                             150,
                             HWND_DESKTOP,
                             NULL,
                             hInstance,
                             NULL);
    
        ShowWindow (hwnd, nCmdShow);
    
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        static HWND hwndEdit;
    
        switch (msg)
        {
            case WM_CREATE:
    
                hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 30, 30, 100, 20,
                                   hwnd, (HMENU) 1, NULL, NULL);
    
                Edit_SetCueBannerText(hwndEdit, "CueBanner");    
                break;
    
            case WM_DESTROY:
                PostQuitMessage (0);
                break;
    
            default:
                return DefWindowProc (hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    

    Laut MSDN wird dieser Header: Commctrl.h (per copy und paste hier eingefügt) benötigt, welchen ich auch angegeben hab, wenn ich in dieser Datei nach Edit_SetCueBanner (oder einfach nach CueBanner) suche, wird nichts gefunden, hab im Internet dann nach diesem Header gesucht, dort war dann auch was mit diesem Macro drin, kam beim kompilieren aber wieder dieser Fehler. Unter Projekt-Optionen hab ich auf die libcomctl32.a gelinkt, auch ohne Erfolg.
    Was kann noch falsch sein?



  • Sach ma,
    wer oder was ist denn Edit_SetCueBanner 😕

    Selbst die MSDN-eigene Suchfunktion im Internet zeigt mir keinen Treffer 😮
    Somit würde mich auch nicht wundern, daß Dein Compiler nichts findet...

    Wo hast Du das in der MSDN gelesen? Link?

    Unabhängig davon:
    Wie alt ist denn Dein Dev C++ ???
    Und hast Du auch den aktuellen PSDK von Microsoft verwendet?

    Martin



  • http://msdn.microsoft.com/en-us/library/bb761701%28v=VS.85%29.aspx
    Ich hab Dev C++ in der aktuellsten Version (4.9.9.2), wird soweit ich weiß seit ein paar Jahren nicht mehr weiterentwickelt (ich will jetzt aber bitte keine kommentare dazu, das ich Visual C++ oder so nehmen soll, ich will nur wissen ob es iiiirgendwie möglich ist, dass dieses macro mal funktioniert).
    Das Problem gilt aber nicht nur für Edit_SetCueBannerText sondern für ziehmlich alle Macros, die als Header Commctrl.h vorraussetzen



  • Schreib mal vor Dein #include <windows.h> folgende Zeile:

    #define _WIN32_WINNT 0x0501

    und kompilier noch mal.

    Nein, ich glaube, auch das hat keinen Zweck. Ich sehe gerade, daß dieses Makro in der commctrl.h, die mit Visual C++ 9.0 Express ausgeliefert wird, definiert ist; in meiner commctrl.h, die zum MinGW - Compiler gehört, ist es jedoch nicht drin ... und dieser Compiler wird mit dem Dev - Gedöns mitgeliefert.

    Du brauchst also wahrscheinlich eine andere Compiler-Suite. Zum Beispiel wie gesagt Visual C++ Express ...



  • #define _WIN32_WINNT 0x0501 hat leider auch nicht funktioniert.
    Ich muss wohl einsehen, dass es mit DevC++ einfach nicht geht.
    Hab deshalb auch Visual C++ installiert, endete aber damit, dass ich es nach 30 minuten wieder deinstallierte, weil es einfach zu aufwändig und kompliziert für meine Zwecke ist. Es mag ja eine super Entwicklungsumgebung sein, aber für mich, der nur ab und zu mal kleine simple Programme programmiert, ist das nichts. An dem Punkt gehen die Meinung jetzt auseinander, dem bin ich mir bewusst.


Anmelden zum Antworten