Bild über ein Dialog legen (im Hintergrund, nicht als static-bild) ..... ?



  • Hallo.
    Ich suche nach einer möglichkeit, ein dialog mit einem bild zu belegen... so, dass das dialog eine titelleiste hat und über das ganze dialog das bild ist, ich aber trotzdem noch über das dialog ganz normal dialogelemente legen kann... buttons etc, so, dass es keine grafikfehler gibt .... geht das irgendwie? anstatt WM_CTLCOLORDLG einfach statt farbe nen bild... geht das?

    DANKEEE



  • WM_PAINT BITTTTTTTTTTTTTEEE



  • Also wenn ich mich richtig erinnere, kann man einfach in der WM_PAINT das Bitmap zeichnen, es muss halt dann genauso groß sein wie der Dialog, die Steuerelemente sind dann immer noch sichtbar. Kann mich jetzt aber auch irren ;).

    cya 🙂



  • oder vielleicht paßt WM_ERASEBKGND besser 🙄



  • du kannst das bild auch nach erstellen des dialogs auf den dialog bringen.

    SendMessage (hButton, BM_SETIMAGE, (WPARAM) IMAGE_BITMAP,(LPARAM)(HANDLE) hBitmap);

    (hier im wird das bild auf einen button gelegt)



  • Hi. Danke erstmaaaa...
    Andre, klar, auf einen Button, aber SendMEssage geht doch nicht um einem Dialog ein Background BMP zu verpassen? 😕

    WM_ERASEBKGND ist denke ich ganz gut. wParam ist der Device Context? In den muss ich ein Bitmap zeichnen, jo?



  • Ja, genau!

    @All: In diesem Zusammenhang möchte ich mal fragen, was der Unterschied zwischen WM_ERASEBKGND und WM_PAINT ist.



  • Bei WM_PAINT sthet dazu:

    The DefWindowProc function validates the update region. The function may also send the WM_NCPAINT message to the window procedure if the window frame must be painted and send the WM_ERASEBKGND message if the window background must be erased.

    und bei BeginPaint:

    If the update region is marked for erasing, BeginPaint sends a WM_ERASEBKGND message to the window.

    Fazit: WM_ERASEBKGND ist halt dafür zuständig die Zeichenfläche zu säubern ( Tafel wischen 😉 ) Dies ist aber nicht unbedingt bei jedem WM_PAINT nötig, da du ggf. nicht immer aller neu zeichnen willst, sondern nur etwas hinzufügen. Du würdest also imho Performance verlieren, wenn du dies in jedem WM_PAINT erledigen würdest. Und irgendeinen Sinn muss WM_ERASEBKGND ja schon haben, sonst gäbe es die Message ja nicht - das ist zumindest meine Ansicht 😉



  • jungs, machts doch nicht so kompliziert 😉 :

    BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
    static HBITMAP hbm = LoadBitmap( hInstance, MAKEINTRESOURCE( ID_MYMAP);
    static HBRUSH hbr = CreatePatternBrush( hbm);
    HDC hdc;
    
    swicth( uMsg)
    {
    case WM_CTLCOLORDLG:   // background neu setzen
    return (long) hbr;
    
    // und damit die statischen textfelder nicht so dämlich ausschauen :clown:
    case WM_CTLCOLORSTATIC: 
       hdc = (HDC)wParam;
       SetTextColor(hdc, RGB(0, 0, 0));
       SetBkMode(hdc, TRANSPARENT);
       return (LONG) hbr;
    
    .
    .
    .
    }
    

    rocknix ///

    [ Dieser Beitrag wurde am 14.04.2003 um 14:30 Uhr von RockNix editiert. ]

    [ Dieser Beitrag wurde am 14.04.2003 um 14:38 Uhr von RockNix editiert. ]



  • RockNix rult, würd ich da sagen. 9463710498489,0001 mal THX... NÖNÖ, 9463710498489,0002 hat er schon verdient. Also: 9463710498489,0002 mal THX @ RockNix!11


Anmelden zum Antworten