2011-04-16 14 views
5

metni alın bu çalıştı:bir düzenleme denetimine

int editlength; 
int buttonid = 3324; // id to button, the numbers dont mean anything 
int editid = 5652; // id to edit 

LPTSTR edittxt; 

HWND button; // created in wWinmain as a button 
HWND edit; // created in wWinMain as an edit control 

// LRESULT CALLBACK WindowProc 

switch(uMsg) 
{ 
    case WM_COMMAND: 
     if(wParam == buttonid) 
     { 
      filedit = GetDlgItem(hwnd, editid); // I tried with and without this 
      editlength = GetWindowTextLength(filedit); 
      GetWindowText(filedit, edittxt, editlength); 

      MessageBox(hwnd, edittxt, L"edit text", 0); 
     } 
     break; 
} 

Ama ileti kutusunda herhangi bir metin görmüyorum olsun.

cevap

14

Son argüman GetWindowText() arabelleğinizin boyutudur. Dizgenin uzunluğuna ayarladığınızdan, arabellekinizin çok küçük olduğu işlevini söylüyorsunuz, çünkü boş sonlandırıcı için yer yok. Ve hiçbir şey kopyalanmaz. Ayrıca, metni kopyalamak için arabelleği ayırmanız gerekir. edittxt ne anlama geliyor? Onu nereden başlattığını bile göremiyorum.

böyle bir şey olmazdı

Doğru kullanım:

TCHAR buff[1024]; 
GetWindowText(hWndCtrl, buff, 1024); 
yüzden bu deneyin .. metni alır bir tampona bir işaretçi olması gerekiyor edittxt
4

...

char txt[1024]; 
.... 
GetWindowText(filedit, txt, sizeof(txt)); 

Sen olabilir unicode için ayarlamak için .. ben ham win32 yaptım beri üzgün oldu.

+0

Teşekkürler ama kabul edilen cevap ilk başta olduğu gibi @ jonathan'a gitmeli :) –

İlgili konular