2013-06-01 3 views
0

사용자가 편집 컨트롤에 입력 한 텍스트를 읽고 싶습니다. 텍스트를 입력하고 버튼을 누른 후 텍스트를 가져 와서 콤보 상자에 항목으로 추가하려고합니다. 언젠가 나는, "텍스트"변수에 사용자가 입력 한 문자열의 때로는 첫 번째 문자를 NULL을 얻고편집 컨트롤에서 텍스트 읽기

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; 

하지만 일이 잘못되면 : 이 내가 부모 대화의 WM_COMMAND에서 일을하고있다 언젠가 이상한 ASCII 같은 문자. 나는 무엇을 wron하고 있냐? 어떤 아이디어?

+0

가 어떻게'버튼 [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

죄송합니다, 나는'텍스트 '말을 의미>> – 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

관련 문제