【问题标题】:Win32 edit control EM_SETSEL doesn't workWin32 编辑控件 EM_SETSEL 不起作用
【发布时间】:2017-07-10 06:38:12
【问题描述】:

我有一个按钮和一个带有一些默认文本的单行编辑控件,我想在单击按钮时突出显示所有编辑控件的文本。

由于某种原因,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;
}

谢谢! 克里斯

【问题讨论】:

  • 你确定case IDC_BUTTON 被击中了吗?
  • 是的,IDC_BUTTON 被击中并且编辑控件接收到 EM_SETSEL(使用 Spy++ 检查)。

标签: c winapi


【解决方案1】:

你试过ES_NOHIDESEL风格吗?

取消编辑控件的默认行为。默认行为在控件失去输入焦点时隐藏选择,并在控件接收到输入焦点时反转选择。如果指定 ES_NOHIDESEL,即使控件没有焦点,所选文本也会反转。

【讨论】:

  • 就是这样。如果这是编辑控件的默认行为,IMO 会更直观,但我猜当时他们有不同的担忧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2011-07-09
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多