icon



  • wie kann ich ein icon auf in mein programm einbauen habe ma ein kleinen tip bekommen aber ich raffs net.

    bisheriger code:

    #include <windows.h>
    #include "resource.h"
    #define IDI_MYICON  101
    const char g_szClassName[] = "myWindowClass";
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_LBUTTONDOWN:
            {
                char szFileName[MAX_PATH];
                HINSTANCE hInstance = GetModuleHandle(NULL);
    
                GetModuleFileName(hInstance, szFileName, MAX_PATH);
                MessageBox(hwnd, szFileName, "Path:", MB_OK | MB_ICONINFORMATION);
            }
            break;
            case WM_CLOSE:
                DestroyWindow(hwnd);
            break;
            case WM_DESTROY:
                PostQuitMessage(0);
            break;
            default:
                return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow)
    {
    
        WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;
    
        wc.cbSize        = sizeof(WNDCLASSEX);
        wc.style         = 0;
        wc.lpfnWndProc   = WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = g_szClassName;
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
        if(!RegisterClassEx(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        hwnd = CreateWindowEx(
            WS_EX_CLIENTEDGE,
            g_szClassName,
            "Where I am",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
            NULL, NULL, hInstance, NULL);
    
        if(hwnd == NULL)
        {
            MessageBox(NULL, "Window Creation Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        return Msg.wParam;
    }
    

    resource:

    #define IDI_MYICON  101
    
    #define ID_FILE_EXIT4001
    

    wo muss ich nun das hinsetzen und geht das überhaupt so?

    IDI_MYICON ICON "a.ico"
    HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));



  • Das kommt in die Fensterparameter, dahin, wo Du bis jetzt

    wc.hIconSm = LoadIcon(NULL-IDI_APPLICATION)
    

    stehen hast.
    Allerdings braucht MAKEINTRESOURCE etwas mehr Parameter. Da fehlt z. B. die Größe des Bitmaps, das Du verwenden willst (in der Regel 16x16 Pixel). Schau in der MSDN nach MAKEINTRESOURCE bzw. nach hIconSm und WndClassEx



  • #define IDI_MYICON   101
    #define ID_FILE_EXIT 102
    

    und dann noch: www.win-api.de



  • Mit MS Visual C++ 6.0 ist das viel einfacher, auch wen er das selbe macht.
    Man fügt dem Projet einfach eine Ressurce Datei hinzu und der dan ein Icon.
    Aber wenn du diesen Compiler garnicht hast ist dieser Tipp wohl wenig hilfreich.



  • was mich grad ein wenig wundert:

    wc.hIconSm = LoadIcon(NULL-IDI_APPLICATION)
    

    warum ausgerechnet subtrahieren? das ergibt doch keinen sinn 😕
    wenn du kein VC++ verwendest, dann lade das icon doch vorher und übergeb ihm dann nur da handle. und handles sind nunmal ganzzahlige, positive, 32bit werte, was hier nicht der fall wäre.

    MfG RadiatioN


Anmelden zum Antworten