MFC Fenster..



  • Ja, wie kann ich dieses dann erstellen??einfach die funktion OnSize() aufrufen und dann mit MoveWindow() neue Date nerstellen oder wie??



  • Du gehst in den Klassenassistenten, wählst deine Dialogklasse und die Nachricht WM_SIZE und klickst auf "Funktion hinzufügen" - das legt dir deine OnSize() an:

    void CMyDlg::OnSize(UINT nType, int cx, int cy) 
    {
      CDialog::OnSize(nType, cx, cy);
    
      // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen
    }
    

    Hinter dem TODO-Kommentar kannst du dir die korrekte Position aller Dialog-Elemente berechnen und sie per MoveWindow() in die gewünschte Position verschieben, z.B.:

    CWnd* OK_Button = GetDlgItem(IDOK);
    CRect r;
    OK_Button->GetClientRect(r);
    int offx=dx-r.right-10;
    r.OffsetRect(offx,0);
    OK_Button->MoveWindow(r);
    


  • hey, dieser tip ist ja nicht schlecht.nur komischerweise funktioniert bei mir nix. habe dies so gemacht und auch die funktion in .h reingepackt, damit die erkannt wird.nur mein button, der bleibt immer an der gleichen stelle bzw. wird nicht vergrößert oder so.egal ob ich nun -5000 mache oder was anderes..der button bleibt an gleicher bzw. die größe bleibt gleich..muss ich irgendwo noch was ändern??oder warum klappt dies nicht..



  • Wie hast du das so gemacht? Und wo?

    Der Code zur Anpassung der Buttons gehört in die OnSize()-Methode, die dir der Klassenassistent auf Antrag automatisch anlegt (und du solltest den Klassenassistenten auch dafür bemühen - ist umeiniges entspannender als wenn du die Nachrichtenzuordnung von Hand einprogrammieren willst).



  • also ehrlich gesagt hat er schon eine "void CLLTScannenDlg::OnSize()" bei mir gehabt..dort habe ich einfach die sachen reingeschrieben..oder muss ich extra irgendwie über den assistenten vorgehen??wie muss ich dies im einzelnen tun..wo kann ich diese nachtrichten auswahl aussuchen??wenn ich beim projekt bin und dann hinzufügen mache von mfc-klasse, findet er meine dialogklasse nicht..komisch..



  • Hast du mal nachgesehen, ob die Funktion überhaupt aufgerufen wird (setz eine TRACE()-Anweisung oder einen Breakpoint in die Methode und starte das Programm)?

    Ansonsten solltest du natürlich die ID's deiner Buttons dort verwenden.



  • also, er ruft bei mir komischerweise die funktion nicht auf..habe dort nen breakpoint gemacht, aber da hält das programm nicht an..ist da irgendwie ein verweis nicht eingebunden??



  • Erstens: Ist CLLTScannenDlg überhaupt der Hauptdialog deines Projektes?
    Zweitens: Schau mal nach, ob in der Message-Map des Dialogs ein ON_SIZE() Eintrag steht.



  • also, CLLTScannen ist mein HD..das ist die erstellte mfc-oberfläche, wo die buttons drauf sind.Habe s gerade auch bemerkt, dass in der Messagge-Map die funktion gar nicht auftaucht..macht der assistent dies nicht automatisch??



  • Wenn du die Methode über den Klassenassistenten anlegst, kümmert er sich auch um solche Kleinigkeiten. Wenn du sie von Hand in die Klasse reinschreibst, bekommt der Assistent naturgemäß nichts davon mit.



  • also, ich habe s hinbekommen, dass mir die funktion angesprungen wird und ausgeführt..leider bekomme ich einen fehler mit dem ich nix anfangen kann..wieso ist dies so schwierig, einfach den vorhandenen button an eine andere position zu setzen??!!

    hier der fehler:der springt mir immer nur bis zu der zeile

    OK_Button->GetClientRect(r);
    

    und dann springt er mir in die afxwin2.inl und zeigt mir den fehler, dass eine zugriffsverletzung aufgetrete nist beim lesen..
    leider kann man hier keine .bmp einfügen, sonst würde ich die reinmachen..


Anmelden zum Antworten