强制在TAB切换控件焦点时显示控件的 ToolTip

1、CWnd中的ToolTip会在接受定时器消息的时候判断当前的光标位置,这段代码不知如何写的,估计直接调用了系统API获得光标位置

2、所以尝试使用PostMessage(WM_MOUSEMOVE)去触发ToolTip是可能的,但是无法显示,因为显示的代码在ToolTip的定时器中延时显示。

3、所以必须设置光标位置,但是ToolTip发现任何键盘消息时都会取消显示,所以在控件获得焦点时设置光标位置是不行的,因为后面会有键盘抬起消息,这样就立刻取消了ToolTip的显示。

4、所以必须在定时器中设置光标位置

void CDlg::OnEnSetFucusxXXX() { KillTimer( TIMER_SET_CTRL_FOCUS ) ; SetTimer( TIMER_SET_CTRL_FOCUS , 200 , NULL ) ; } void CDlg::OnTimer(UINT_PTR nIDEvent) { CRect rc ; GetDlgItem( IDC_XXX )->GetWindowRect( rc ) ; VERIFY( SetCursorPos( rc.CenterPoint().x , rc.CenterPoint().y ) ) ; KillTimer( TIMER_SET_CTRL_FOCUS ) ; __super::OnTimer(nIDEvent); }

注意控件获得焦点时ON_EN_SETFOCUS

组合框获得焦点时ON_CBN_SETFOCUS

 

其实最好还是去网上下载别人写好的ToolTip类代码,那样有更多功能,比如多行显示、字体、颜色等等

你可能感兴趣的:(timer,api,null)