当前位置:  开发笔记 > 编程语言 > 正文

win32选择全部编辑ctrl(文本框)

如何解决《win32选择全部编辑ctrl(文本框)》经验,为你挑选了1个好方法。

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

        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);

phord.. 5

Ctrl+ A不是像Ctrl+ CCtrl+ 这样的内置加速器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函数(比较classname字符串)是愚蠢的,我想要责备.



1> phord..:

Ctrl+ A不是像Ctrl+ CCtrl+ 这样的内置加速器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函数(比较classname字符串)是愚蠢的,我想要责备.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有