我正在使用这些选项创建我的文本框.我可以复制/剪切/粘贴/撤消,但是当我点击选择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+ 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函数(比较classname字符串)是愚蠢的,我想要责备.
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函数(比较classname字符串)是愚蠢的,我想要责备.