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;
    

Anmelden zum Antworten