Handel zu Steuerelement aus Dialog
-
Hallo,
ich habe mienen Dialog eine Edit Box hinzugefügt.
Um den Inhalt abzufragen muss man ja so machen:
SendMessage(HANDEL, EM_GETLINE, 0, (LPARAM) (LPCSTR) Buffer);
das Problem ist jetz das ich das Handel nicht habe weil es ja bei einem Dialog der als Ressource eingebunden ist ist. wie bekomme ich dieses HandeL?
-
Entweder per GetDlgItem oder mit SendDlgItemMessage

SendMessage(GetDlgItem(IDC_DEIN_EDIT), EM_GETLINE, 0, (LPARAM) (LPCSTR) Buffer);oder
SendDlgItemMessage(IDC_DEIN_EDIT, EM_GETLINE, 0, (LPARAM) (LPCSTR) Buffer);PS: Denkst du auch immer schön daran deinen Puffer (Buffer) dynamisch anzulegen?
Also das Ergebnis von EM_LINELENGTH zu benutzen
-
danke, wieso sollte ich ihn dynamisch anlegen?
ich habe char buffer[199];
-
hab das jetz so gemacht aber meine msgbox gibt nur komische zeichen aus
case WM_INITDIALOG: TCHAR Buffer[100]; return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BUTTON1: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_GETLINE, 0, (LPARAM)Buffer); MessageBox(0, Buffer, Buffer, 0); return TRUE;benutze unicode
-
und so funktioniert es auch nicht:
TCHAR* Buffer = new TCHAR[10]; switch(message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BUTTON1: SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_GETLINE, 0, (LPARAM)Buffer); MessageBox(0, Buffer, Buffer, 0); return TRUE;
-
Du brauchst kein SendMessage. Hole Dir den Child-Handle direkt mit hwndChild=GetDlgItem(hDlg,ID_CHILD) und den Inhalt mit GetDlgItemText(hwndChild,szBuffer) oder einer entsprechenden WinApi-Funktion. szBuffer kann statisch oder dynamisch sein.
-
Das mit dem Dynamisch war so gemeint:
TCHAR* Buffer = NULL; switch(message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BUTTON1: delete[] Buffer; //Keine Abfrage notwendig, da "delete[]0" und "delete 0" definiert sind int iLen= SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_LINELENGTH, 0, 0); //Länge lesen Buffer = new TCHAR[iLen+1]; //Speicher holen (+1 für abschließende binäre 0) SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_GETLINE, 0, (LPARAM)Buffer); //Buffer füllen lassen MessageBox(0, Buffer, Buffer, 0); return TRUE;