2013-06-01 97 views
0

我想讀取用戶在編輯控件中鍵入的文本。 輸入文本並按下按鈕後,我想獲取文本並將其作爲項目添加到組合框中。 這是我在做什麼的父對話框的WM_COMMAND從編輯控件中讀取文本

case WM_COMMAND: 

    if(HIWORD(wParam) == BN_CLICKED) 
    { 
     if ((HWND)lParam == Button[0]) 
     { 



       int len = GetWindowTextLengthW(Button[2]) + 1; 
       GetWindowTextW(Button[2], text, len); 
       SendMessage(Button[1],(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) text); 

       } 
     } 


    return 0; 

但事情出了問題,有時我得到NULL在「文本」變量,有時僅僅是用戶已經輸入字符串的第一個字符,有時奇怪的ASCII像字符。我在做什麼?有任何想法嗎 ?

+0

'Button [2]'是如何初始化的?你應該使用'SendMessageW'。 – chris

+0

按鈕[2]包含在編輯框,當它通過CreateWindow的創建的句柄'鍵[2] = CreateWindowW( \t \t L 「編輯」,NULL, \t \t WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_BORDER, \t \t WINDOWWIDTH - (windowWidth),windowHeigh,windowWidth,windowHeight,handlW,(HMENU)ID_EDIT,instnc,NULL);' – user667222

+0

道歉,我的意思是說'text'>。> – chris

回答

1

您需要爲字符串分配內存。下面是在C++ 03中如何使用它:

std::vector<wchar_t> str(len); 
GetWindowTextW(Button[2], &str[0], str.size()); 
SendMessageW(Button[1], CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(&str[0])); 
+0

你釘了它。非常感謝。我怎麼能像你這樣的專家?這個問題需要我很長時間,儘管我大部分時間都在使用C++。 – user667222

+1

@ user667222,在C++上瀏覽一個[book](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)並瀏覽新的SO問題?除了做事,這幾乎是我的故事。 winapi方面主要是經驗,而且體面的部分是Old New Thing。 – chris