【发布时间】:2013-08-03 18:33:07
【问题描述】:
窗口不是基于对话框的,因此 WS_TABSTOP 不起作用。此外,我不想 Tab 浏览所有控件,我只想 Tab 浏览几个 Edit 控件。
我所做的是超类化编辑控件并处理 WM_KEYDOWN 消息,在编辑控件之间切换,通过在行中获取下一个窗口 ::GetWindow(hwnd,GW_HWNDNEXT);当我到达最后一个时,我想将焦点切换回第一个编辑控件。
当我到达最后一个编辑控件时,代码不起作用,::GetWindow 只是返回行中的下一个窗口(?),这恰好是一个非超类编辑控件。还有更多隐藏的子窗口(SW_HIDE)。
也许我知道如何知道窗口的 HWND 的类名?
注意:纯 Win32 api,c++ oop。
else if ( ( int ) wParam == VK_TAB )
{
HWND nextInLine;
nextInLine = ::GetWindow ( hwnd, GW_HWNDNEXT );
if ( hwnd == NULL ) nextInLine = ::GetWindow ( hwnd, GW_HWNDPREV );
::SendMessage ( nextInLine, EM_SETSEL, ( WPARAM ) 0, ( LPARAM ) -1 );
::SetFocus ( nextInLine );
return 0;
}
【问题讨论】: