TinTin Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 Servus, ich möchte ein Editfeld zu laufzeit ändern. RECT rect; m_ceComment.GetRect(&rect); rect.bottom = rect.bottom + 28; m_ceComment.SetRect(&rect); UpdateWindow(); so gehts leider nicht. da wird nur das innere RECT geändert. Zitieren
SNOWMAN Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 ähm.... mit welcher IDE arbeitest du denn? Also beim Borland builder siehts etwa wie folgt aus: edt_eingabefeld.height = edt_eingabefeld.height+10; aber kommt halt auf die ide an, wie die das händelt Zitieren
Guybrush Threepwood Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 guck dir mal SetWindowPos an Zitieren
TinTin Geschrieben 9. Dezember 2005 Autor Geschrieben 9. Dezember 2005 VC++ 6.0 "MFC" habe ich leider vergessen CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = rect.bottom + 28; SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL); UpdateWindow(); Ich weis nicht, da bewegt sich nichts? Zitieren
Guybrush Threepwood Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 Das übersetzt der Compiler? versuchs mal mit wnd.SetWindowPos() Zitieren
TinTin Geschrieben 9. Dezember 2005 Autor Geschrieben 9. Dezember 2005 ja. CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = rect.bottom + 28; wnd->SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL); UpdateWindow(); so bewegt sich auch nichts. Zitieren
Klotzkopp Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 Wo steht dieser Code denn? Zitieren
TinTin Geschrieben 9. Dezember 2005 Autor Geschrieben 9. Dezember 2005 void CMyDlg::OnSetfocusEdComment() { CRect rect; CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = rect.bottom + 28; wnd->SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL); UpdateWindow(); } Mal sehen, jetzt gehts erst mal nach hause, schönes wochenende Zitieren
Exodus Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 void CMyDlg::OnSetfocusEdComment() { CRect rect; CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = (rect.bottom + 28); wnd->MoveWindow(rect,TRUE); UpdateWindow(); } Funktioniert bei mir. Zitieren
TinTin Geschrieben 12. Dezember 2005 Autor Geschrieben 12. Dezember 2005 void CMyDlg::OnSetfocusEdComment() { CRect rect; CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); rect.bottom = (rect.bottom + 28); wnd->MoveWindow(rect,TRUE); UpdateWindow(); } Funktioniert bei mir. Wen ich den Code bei mir einfüge, dann verschiebt es mir das Editfeld an eine ganz andere Stelle. Die Höhe wird geändert, aber das ganze Editfeld verschiebt sich. Kann es eventuell daran liegen, dass das Editfeld in einem Static Rahmen liegt? Denn es wird aus diesem verschoben und liegt dann daneben. TinTin Zitieren
Klotzkopp Geschrieben 12. Dezember 2005 Geschrieben 12. Dezember 2005 Mit GetWindowRect bekommst du Koordinaten relativ zur linken oberen Ecke des Bildschirms. MoveWindow geht aber davon aus, dass die Koordinaten relativ zur linken oberen Ecke des Clientbereichs des Elternfensters sind. Es sollte ausreichen, wenn du statt GetWindowRect GetClientRect verwendest. Ach ja, das hier: rect.bottom += 28;macht weniger den Eindruck eines BASIC-Umsteigers. Zitieren
TinTin Geschrieben 12. Dezember 2005 Autor Geschrieben 12. Dezember 2005 Es sollte ausreichen, wenn du statt GetWindowRect GetClientRect verwendest. Das ist noch nicht ganz die Lösung. CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetClientRect(&rect); ergibt: {top=0 bottom=16 left=0 right=121} (das sind nicht die Koordinaten im Client, die Maße des Feldes) rect.bottom += 28; wnd->MoveWindow(rect,TRUE); setzt mir das Editfeld dann auch genau ins linke obere Eck des Fenster. Was auch logisch ist. Zitieren
Klotzkopp Geschrieben 12. Dezember 2005 Geschrieben 12. Dezember 2005 Stimmt. Mach mal folgendes: CRect rect; CWnd *wnd = GetDlgItem(IDC_ED_COMMENT); wnd->GetWindowRect(&rect); ScreenToClient(&rect); rect.bottom += 28; wnd->MoveWindow(rect,TRUE);[/code] Zitieren
TinTin Geschrieben 13. Dezember 2005 Autor Geschrieben 13. Dezember 2005 Danke Klotzkopp, dass ist die Lösung. ScreenToClient hab ich gesternauch gefunden, hatte aber leider noch keine Zeit zu posten. Dank auch nochmal an alle für Eure Bemühung. TinTin Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.