PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win32-API: Edit-Fenster auslesen?


Vedek Bareil
2004-11-10, 21:47:07
Nachdem es mit den 3D-Rändern an Edit-Fenstern nun klappt, habe ich den nächsten Schritt versucht, nämlich den eingegebenen Inhalt auszulesen, also das was man in Delphi so: Buffer:=Edit1.Text; macht. Laut Petzold (5. Auflage, S. 382) soll das so gehen:
int iLength = SendMessage (hwndEdit, EM_LINELENGTH, 0, 0);
pszBuffer = malloc(iLength);
SendMessage(hwndEdit, EM_GETLINE, 0, pszBuffer); Den Datentyp von pszBuffer gibt Petzold nicht an, ich schätze es ist PCSTR(?). So klappt's aber hinten und vorne nicht. malloc hat als Rückgabetyp void*, und SendMessage verlangt als vierten Parameter long int.
Wie muß man das dann machen? :conf2:

Vedek Bareil
2004-11-10, 21:59:26
hab' schon:
int iLength = SendMessage (hwndEdit, EM_LINELENGTH, 0, 0);
char szBuffer[iLength];
GetDlgItemText(hwndParent /*Parent des Editfeldes*/, Edit_ID, szBuffer, iLength+1);


:)

Trap
2004-11-10, 22:59:42
Schönen Buffer Overflow hast du da...

Vedek Bareil
2004-11-11, 06:56:54
na solang das Programm ihn ebensowenig bemerkt wie ich und schön brav läuft macht's ja nichts ;)

Blumentopf
2004-11-11, 07:48:43
WIN API hat mir mal dieses Tutorial sehr gehilft:
http://members.fortunecity.com/harrycik/files/Forgers.htm



BOOL CALLBACK EditDlgProc(HWND hwnd,UINT Message, WPARAM wParam, LPARAM lParam)
{
char szText[BUFFER_SIZE];

switch(Message)
{
case WM_INITDIALOG:
SendDlgItemMessage(hwnd, IDC_EDITDLG_TEXT, EM_SETLIMITTEXT,
(WPARAM)BUFFER_SIZE - 1, (LPARAM)0);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_EDITDLG_SETTEXT:
GetDlgItemText(hwnd, IDC_EDITDLG_TEXT, szText, BUFFER_SIZE);
SetWindowText(hwnd, szText);
return TRUE;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
return TRUE;
}
break;
}
return FALSE;
}