Bitmap-Buttons nachträglich setzen??



  • Hi!
    Ich will einen Bitmap-Button auf bedarf erzeugen, d.h. ich erstelle eine Button, und der soll dann, bei bedarf, zu einem Bitmap-Button werden.

    Kann ich das BS_BITMAP, so wie im folgenden Beispiel, auch nachträglich setzen, also nicht beim WM_CREATE??

    static HANDLE hBitmap;
    static HWND hButton;
    
    case WM_CREATE:
       hBitmap= LoadImage (GetModuleHandle (NULL), "BildDatei.bmp",
          IMAGE_BITMAP,0, 0,LR_DEFAULTCOLOR | LR_LOADFROMFILE);
       hButton = CreateWindow("BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_BITMAP, 
                              20, 20, 50, 30, hwnd, 0, GetModuleHandle (NULL),  0);
    
       SendMessage (hButton, BM_SETIMAGE, (WPARAM) IMAGE_BITMAP,(LPARAM)(HANDLE) hBitmap);
    

    Danke & Gruss, ~cp



  • SendMessage(hWnd,BM_SETSTYLE,(WPARAM)BS_BITMAP,(LPARAM)TRUE);
    

    sollte gehen



  • Shlo schrieb:

    SendMessage(hWnd,BM_SETSTYLE,(WPARAM)BS_BITMAP,(LPARAM)TRUE);
    

    sollte gehen

    Hi, danke, aber klappt leider nicht:

    Button = CreateWindow ("button", "Bitte Klicken",
                            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                            0, 40, 150, 30, hwnd, (HMENU) 1,
    		      tInstance, NULL);
    
    //Wie war das mit dem BitmapButton???---------------------------------
    HANDLE hBitmap;
    
    hBitmap= LoadImage(tInstance, "c:\\windows\\desktop\\test.bmp",
                         IMAGE_BITMAP,0, 0,LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    
    SendMessage(Button,BM_SETSTYLE,BS_BITMAP,TRUE);
    
    SendMessage (Button, BM_SETIMAGE,
                    (WPARAM) IMAGE_BITMAP,
                    (LPARAM)(HANDLE) hBitmap);
    

    Was allerdings geht:

    Button = CreateWindow ("button", "Bitte Klicken",
                            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP,
                            0, 40, 150, 30, hwnd, (HMENU) 1,
    		      tInstance, NULL);
    
    //Wie war das mit dem BitmapButton???---------------------------------
    HANDLE hBitmap;
    
    hBitmap= LoadImage(tInstance, "c:\\windows\\desktop\\test.bmp",
                         IMAGE_BITMAP,0, 0,LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    
    //SendMessage(Button,BM_SETSTYLE,BS_BITMAP,TRUE);
    
    SendMessage (Button, BM_SETIMAGE,
                    (WPARAM) IMAGE_BITMAP,
                    (LPARAM)(HANDLE) hBitmap);
    

    Hmmmm ... ich hab auch schon versucht, bei BM_SETSTYLE alle Styles zu setzen, aber das brachte genauso wenig. 😞

    gruss ~cp



  • dann würde ich folgendes versuchen:

    SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE)|BS_BITMAP);
    

    hWnd ist ein Handle zu deinem Button



  • Shlo schrieb:

    dann würde ich folgendes versuchen:

    SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE)|BS_BITMAP);
    

    hWnd ist ein Handle zu deinem Button

    SUPER, FUNKT:

    Button = CreateWindow ("button", "Bitte Klicken", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    0, 40, 150, 30, hwnd, (HMENU) 1, tInstance, NULL);
    
    //Wie war das mit dem BitmapButton?-----------------------------------
    HANDLE hBitmap;
    
    hBitmap= LoadImage (tInstance, "c:\\windows\\desktop\\test.bmp", IMAGE_BITMAP,
    32, 32,LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    //SendMessage(Button,BM_SETSTYLE,BS_BITMAP,TRUE);
    SetWindowLong(Button,GWL_STYLE,
    GetWindowLong(Button,GWL_STYLE)|BS_BITMAP);
    
    SendMessage (Button, BM_SETIMAGE, (WPARAM) IMAGE_BITMAP,
    (LPARAM)(HANDLE) hBitmap);
    

    😃 thx



  • Hi, habe nochmal eine Frage, was das dynamische setzen von Stlyes angeht.
    Kann ich eine Listbox auch nachtzräglich sort bzw. unsortiert setzen? In der MSDN steht

    After the control has been created, these styles cannot be modified, except as noted.

    Heisst das also, das ginge nicht mit SetWindowLong??


Anmelden zum Antworten