2017-07-10 21 views
0

私はボタンといくつかのデフォルトのテキストを持つ単一行のエディットコントロールを持っています。ボタンをクリックすると、エディットコントロールのテキストをすべてハイライトしたいと思います。Win32エディットコントロールEM_SETSELが機能しません

何らかの理由で、SendMessageは効果がなく、テキストが強調表示されません。何が間違っていますか?

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
switch (message) 
{ 
    case WM_CREATE:          
     hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), L"Default text", 
      WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL, 
      10, 10, 150, 24, hWnd, (HMENU)IDC_EDIT, 
      hInst, NULL); 

     hwndButton = CreateWindowEx(0, TEXT("button"), L"Mark text", 
      WS_CHILD | WS_VISIBLE, 
      100, 100, 75, 24, hWnd, (HMENU)IDC_BUTTON, 
      hInst, NULL); 
     break; 

    case WM_COMMAND:          
     { 
      // Parse the menu selections: 
      switch (LOWORD(wParam)) 
      { 
       case IDC_BUTTON: 
        SendMessage(hwndEdit, EM_SETSEL, 0, -1); 
        break; 

       case IDM_ABOUT: 
        DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); 
        break; 
       case IDM_EXIT: 
        DestroyWindow(hWnd); 
        break; 
       default: 
        return DefWindowProc(hWnd, message, wParam, lParam); 
      } 
     } 
     break; 

    case WM_PAINT:          
     { 
      PAINTSTRUCT ps; 
      HDC hdc = BeginPaint(hWnd, &ps); 
      // TODO: Add any drawing code that uses hdc here... 
      EndPaint(hWnd, &ps); 
     } 
     break; 

    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 

    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
    return 0; 
} 

ありがとうございます! クリス

+0

「ケースIDC_BUTTON」がヒットしていますか? – Neil

+0

はい、IDC_BUTTONがヒットし、エディットコントロールがEM_SETSELを受け取ります(Spy ++でチェックされています)。 – user2286339

答えて

2

ES_NOHIDESELスタイルを試しましたか?

エディットコントロールのデフォルトの動作を無効にします。デフォルトの動作では、コントロールが入力フォーカスを失ったときに選択範囲が非表示になり、コントロールが入力フォーカスを受け取ったときに選択範囲が反転します。 ES_NOHIDESELを指定すると、コントロールにフォーカスがない場合でも、選択したテキストが反転されます。

+0

それはそれでした。 IMOこれはエディットコントロールのデフォルトの動作であればより直観的になりましたが、当時私は彼らには異なる心配があったと思います。 – user2286339

関連する問題