Ressourcendefinierte Dialoge umstylen?



  • Hallo mal wieder.
    Sacht mal, ist es eigentlich ( und wenn ja, wie oder mit welcher WM oder welchem Befehl) möglich ,einen modalen Dialog, der in Ressoucen definiert ist, per DialogBox aufgerufen wird und seine eigene DlgProc hat, umzusytlen?
    Würde mir schon reichen, wenn ich keine Titelbar hätte, die diesen Standard windows-dunkelblau nach hellblau verlauf hat.
    Weiterhin würde ich gerne auch die Oberfläche dieses Dialoges umfärben.
    Weiss, wie man nun regioned Windows baut, also ich sage mal, die Titelleiste ausblendet. Geht das dann einfach in der WM_INITDIALOG anstatt der WM_CREATE?
    Umfärben......... Da habe ich von irgendeiner WM_NC"WASWEISSICH" gehört.
    Wäre dankbar füre jeden kleinen Tipp.
    Grüsse, meSon



  • ja, in WM_INITDIALOG kannst du deine Regions setzen. Ownerdrawn items kannste machen in dem du den fensterstil der controls auf ownerdrawn stellst und die WM_DRAWITEM abfängst. Ansonsten ist ein Dialog auch nur ein Fenster, von daher sollte regisoning usw. auch klappen.



  • Aha, Danke.
    UNd wie setz ich dann da die BGCOLOR?
    nur den hBrBgbrush setzen?



  • Es hat doch gar keiner etwas von WM_OWNERDRAW geschrieben 😮 .
    Du sollst WM_DRAWITEM abfangen, da kannst Du alles machen (auch die Hintergrundfüllung).



  • aber wie?
    Ich meine.
    Ich habe bisher NIE direkt nach nem Codeschnipsel gefragt, würde es jetzt auch ungern tun........
    aber wie bekomme ich in der WM_DRAWITEM dann den HbrBackground und setze ihn neu?
    Ich vermute nur, mit GetWindowLong?, aber alles was die Liefert ist ...... oder mit LPCREATESTRUCT?
    ....
    oder?
    Und dann mit Select Object?
    Kann da jemand VIELLEICHT bitte auf die Befehle hinweisen?
    Ich habe was versucht, will aber nun nicht einfach n Rectangle in der Grösse meiner Clientedge in ner anderen Farbe nehmen, um das grau zu übermalen, sondern direkt auf den Backgroundbrush der Klasse des Dialoges zurückgreifen und den ändern.........bevor der Dialog gezeichnet wird....
    Danke bishierhin......



  • ich würds so machen

    [cpp]
    
    case WM_ERASEBKGND:
    {
      RECT rc;             
      HBRUSH hbr =  CreateSolidBrush(RGB (  0,  0,  0));              
      GetClientRect(hDlg, &rc);             
      FillRect((HDC)wParam, &rc, hbr);             
      DeleteObject(hbr);
    }
    return TRUE;
    
    //hDlg durch dein HANDLE des Fensters ersetzen wie hWnd,hwnd usw
    [/cpp]
    


  • @me-S-on: Such Dir zum Thema 'Ownerdraw' mal ein paar Beispiele raus. Da findet man ne Menge. Dann weißt Du auch, was gemeint ist, bzw. wie man das 😉 .



  • aber das meinte ich mit: nicht einfach n Rect über das Graue Standard Rect der Clientarea..
    Seiner Zeit las ich mal was von LPSTRUCT und den Zugriff auf dessen Members in ner WM_CREATE oder WM_INITDIALOG.
    Dadurch krich ich irgendwie Zugriff auf die Klasse bei meinem Window, welches ich als Parent in der WM_MAIN erstell, nur halt inner WndProc.
    Weiss nicht mehr wo das mal stand... und ich spekuliere natürlich nur, dass ich das gleiche auch mit Resourcen machen kann, sprich, mit deren Members und es folglich so verwende bei dem Dialog, den ich mir erstell, damit ich dann den hBrBackground der Dialogklasse inner WM_INITDIALOG per LPSTRUCT-Memberzugriff manipulier......
    aber ich weiss nicht mehr, wie ich das LPSTRUCT DINg anwende, ich google mal inensiv.....wäre dennoch dankbar für Tpps.
    Dank bisher.
    --- ich habe fertig.
    Shiat das geht ja einfacher!
    Auf winapi.net steht was Geniales dazu...
    und in meinem Fall heisst das WM_CTLCOLORDIALOG....... fett!
    und was ich bisher echt nicht wusste....... diese Nachricht hat im WPARAM direkt nen device Context... echt geil, aber woher der wohl stammt?
    Wäre interessant zu wissen, oder ist der einfach nur angeboten worden, weil sich designer dachten,in so einer Message braucht man den eh?
    Egal.
    Nun muss ich nur noch den Hintergrund der LTEXTE auf transparent setzen.....
    und ich schätze das geht auch nur in der DialogNachricht...
    weil ich das per Ressource bisher nicht hinbekam....
    Ähh, öhh, ähem 🙄 , kann ich eigentlich in ner Ressource wie meinem Dialog einfach zwei Fontstyles verwenden.... zB wenn ich ne Überschrift dick und in Verdana haben will, die Editcaptions aber in Helvetica 8?

    Gelöst.
    WM_CTLCOLOR<dann das jeweilige> und in den cases die ID abfragen und umdefinieren, für jedes Element der zu modifizierenden Gruppe.........
    Geil-
    Aber : kann ich eigentlich ner DialogControl ne Font zweimal angeben: Enmal so und dann so??


Anmelden zum Antworten