c++ - win32 全选编辑 ctrl(文本框)

标签 c++ user-interface winapi textbox

我正在使用这些选项创建我的文本框。我可以复制/剪切/粘贴/撤消,但是当我点击 时全选 它没有选择全部。我可以右键单击并单击全选 但是 CTRL + A 什么也不做。为什么?

wnd = CreateWindow("EDIT", 0,
    WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
    x, y, w, h,
    parentWnd,
    NULL, NULL, NULL);

最佳答案

Ctrl+A 不是像 Ctrl+C 和 Ctrl+V 那样的内置加速器。这就是为什么您会看到定义了 WM_CUT、WM_PASTE 和 WM_COPY 消息,但没有 WM_SELECTALL。

您必须自己实现此功能。我在我的 MFC 应用程序中这样做:

static BOOL IsEdit( CWnd *pWnd ) 
{
    if ( ! pWnd ) return FALSE ;
    HWND hWnd = pWnd->GetSafeHwnd();
    if (hWnd == NULL)
     return FALSE;

    TCHAR szClassName[6];
    return ::GetClassName(hWnd, szClassName, 6) &&
         _tcsicmp(szClassName, _T("Edit")) == 0;
}

BOOL LogWindowDlg::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->message==WM_KEYDOWN)
    {
        if ( pMsg->wParam=='A' && GetKeyState(VK_CONTROL)<0 )
        {
            // User pressed Ctrl-A.  Let's select-all
            CWnd * wnd = GetFocus() ;
            if ( wnd && IsEdit(wnd) )
                ((CEdit *)wnd)->SetSel(0,-1) ;
        }
    }   
    return CDialog::PreTranslateMessage(pMsg);
}

注意,我从这个页面偷了 IsEdit:http://support.microsoft.com/kb/145616

我指出这一点,部分是因为我想给予信任,部分是因为我认为 IsEdit 函数(比较类名字符串)很笨,我想指责。

关于c++ - win32 全选编辑 ctrl(文本框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/291792/

相关文章:

c# - "Error creating window handle"定义覆盖的 WndProc 方法后

c - 相对于父窗口放置窗口

c++ - boost asynchronous_state_machine

c++ - std::function 不允许通过类型

qt - 使用 Qt 实现切换按钮的最佳方式

python - 使用 pygtk 和 glade 的数据库表的 GUI

winapi - CreateFile() 返回 INVALID_HANDLE_VALUE 但 GetLastError() 是 ERROR_SUCCESS

c++ - 需要帮助以 16 位二进制显示 2 的补码

c++ - 如何使 Angular 落正确显示(看里面的图片)?

java - JTable 非常慢