TinTin Geschrieben 9. Dezember 2005 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 9. Dezember 2005 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Dezember 2005 Teilen Geschrieben 9. Dezember 2005 guck dir mal SetWindowPos an Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 9. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Dezember 2005 Teilen Geschrieben 9. Dezember 2005 Das übersetzt der Compiler? versuchs mal mit wnd.SetWindowPos() Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 9. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Dezember 2005 Teilen Geschrieben 9. Dezember 2005 Wo steht dieser Code denn? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 9. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Exodus Geschrieben 9. Dezember 2005 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 12. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. Dezember 2005 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 12. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. Dezember 2005 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TinTin Geschrieben 13. Dezember 2005 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.