Wie Erstelle ich Dynamische Bilder im Dialog feld



  • Moechte in mein Adressbuch Passenden bilddaten zum Adressbuch eintrag mit ausgeben wie fange ich das am besten an.
    bsp. moechte beim erzeugen des Dialogs einen dateinamen Uebergeben und dann das dazugehoerige bild im Dlg feld anzeigen

    hoffe es kann einer helfen 😕 😃 thx



  • Du tust einen Static-Control in Deinen Dialog rein ind setzt diesen auf "SS_BITMAP":
    http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/staticcontrols/staticcontrolreference/staticcontrolstyles.asp
    (das geht aber nur, wenn das Bitmap in den Resourcen liegt).

    Wenn Du eine Datei anzeigen willst, dann rate ich Dir ein (eigenes oder) STATIC-Window zu subclassen und dann dort WM_PAINT abzuhandeln und das Bild zu zeichnen.
    Auf Codeproject sollte es genügend Beispiele dafür geben.



  • auch fuer pur WinApi ohne MFC 😕



  • Na klar, ist eigentlich auch pur WinAPI. Einfach als Stil SS_BITMAP angeben und als Text die ID der Ressource deiner Bitmap.



  • is ja keine resource sondern ne seperate datei dass mit SS_BITMAP Style benutze ich eigentlich schon doch hab ich keine ahnung davon wie ich ne bild dateiwaehrend der laufzeit zu uebergeben da erst da bekannt



  • Achso, dann subclasse das Static-Feld einfach (siehe Jochen). Das Bild (Bitmap) lädst du mit LoadImage, aber nicht vergessen, das Bild zu zerstören (DeleteObject) wenn du es nicht mehr brauchst.

    Subclassen machst du, indem du die Nachrichten, die Windows deinem Static-Client-Fenster schickt, einfach abfängst und du auf die Zeichnen-Nachricht reagierst.
    Du deklarierst eine WindowProc

    LRESULT CALLBACK MyStaticBmpCtrl( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
    

    für das Fenster und bestimmst, dass die Nachrichten von deiner Funktion abgefangen werden sollen mit

    SetWindowLong( GetDlgItem(hDlg,ID_DEINE_STATIC_ID), GWL_WNDPROC, (LONG)MyStaticBmpCtrl );
    

    .

    In der MyStaticBmpCtrl (kannst du auch anders nennen 🙂 ) prüfst du, ob Msg gleich WM_PAINT ist. Wenn ja, dann zeichnest du dein Bild: BeginPaint, SelectObject, EndPaint.
    Am Ende der MyStaticBmpCtrl rufst du noch DefWindowProc auf und es sollte funktionieren. Viel Spaß 🤡


Anmelden zum Antworten