Veröffentlicht 9. Dezember 200519 j 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.
9. Dezember 200519 j ä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
9. Dezember 200519 j 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?
9. Dezember 200519 j 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.
9. Dezember 200519 j 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
9. Dezember 200519 j 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.
12. Dezember 200519 j 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
12. Dezember 200519 j 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.
12. Dezember 200519 j 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.
12. Dezember 200519 j 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]
13. Dezember 200519 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.