4 user-interface winapi textbox
我正在使用这些选项创建我的文本框.我可以复制/剪切/粘贴/撤消,但是当我点击选择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);
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用 EM_SETSEL 消息到文本框,
\n\n根据 MSDN 的说法,
\n\n\n\n\n如果开头为 0,结尾为 \xe2\x80\x931,则选择编辑控件中的所有文本。如果开头为 \xe2\x80\x931,则取消选择任何当前选择。
\n
所以,
\n\nSendMessage(hwndEdit,EM_SETSEL,0,-1);\nRun Code Online (Sandbox Code Playgroud)\n\n会工作得很好。
\nCtrl+ 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);
}
Run Code Online (Sandbox Code Playgroud)
注意,我从这个页面偷了IsEdit:http: //support.microsoft.com/kb/145616
我指出这一点部分是因为我想给予赞扬,部分是因为我认为IsEdit函数(比较classname字符串)是愚蠢的,我想要责备.
我倾向于使用 MFC(请原谅我)而不是 Win32,所以我无法明确回答这个问题,但我注意到这个评论添加到了 MS 网站上有关与编辑控件(编辑控件中的一个简单编辑器)对话的页面中:
编辑控件用于
WM_CHAR接受字符,而不是WM_KEYDOWN等。您必须Translate()输入消息,否则讽刺的是您将无法在编辑控件中编辑文本。
我不知道这是否适用于 BoltBait 的回应,但我怀疑确实如此。
(我在http://msdn.microsoft.com/en-us/library/bb775462(VS.85).aspx找到了这个)
| 归档时间: |
|
| 查看次数: |
7707 次 |
| 最近记录: |