2011-04-16 9 views
5

से पाठ जाओ मैं इस कोशिश की:एक संपादन नियंत्रण

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; 
} 

लेकिन मैं संदेश बॉक्स में कोई पाठ नहीं दिख रहा है मिलता है।

उत्तर

14

GetWindowText() पर अंतिम तर्क आपके बफर का आकार है। चूंकि आप इसे स्ट्रिंग की लंबाई तक सेट करते हैं, आप फ़ंक्शन को बता रहे हैं कि आपका बफर बहुत छोटा है क्योंकि शून्य टर्मिनेटर के लिए कोई जगह नहीं है। और कुछ भी नकल नहीं हो जाता है।

इसके अतिरिक्त, आपको पाठ की प्रतिलिपि रखने के लिए पहले से ही बफर आवंटित करना होगा। edittxt क्या इंगित करता है? मैं यह भी नहीं देखता कि आप इसे कहां शुरू करते हैं।

सही उपयोग कुछ इस तरह दिखेगा:

TCHAR buff[1024]; 
GetWindowText(hWndCtrl, buff, 1024); 
4

edittxt एक बफर कि पाठ हो जाता है करने के लिए एक सूचक होने के लिए .. तो यह कोशिश की जरूरत है ...

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

आप हो सकता है यूनिकोड के लिए समायोजित करने के लिए .. खेद है कि यह थोड़ी देर के बाद से मैंने कच्चे Win32 किया था।

+0

धन्यवाद लेकिन मुझे लगता है कि स्वीकृत उत्तर @jonathan पर जाना चाहिए क्योंकि वह पहले मिला था :) –

संबंधित मुद्दे