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.
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
Guybrush Threepwood Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 guck dir mal SetWindowPos an
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?
Guybrush Threepwood Geschrieben 9. Dezember 2005 Geschrieben 9. Dezember 2005 Das übersetzt der Compiler? versuchs mal mit wnd.SetWindowPos()
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.
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
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.
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
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.
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.
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]
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden