最新做这样一个界面,下图中的前两个图(见下图1、图2)切换显示效果是正常的,但是第三个图(见下图3)显示切换是不正常的,本来当点击“取消”按钮时,“未带”按钮的背景颜色不应该变化,但是现在却发生了变化,经过分析,代码没有发现问题,经过一番查找原因,结果得出“未带”按钮在点击“取消”按钮后获得了焦点,也就是说,要解决这个问题,就要想法使点击“取消”按钮后,“未带”按钮不能获取焦点,这里为啥“未带”按钮会自动获得焦点呢?!忽然想到了按钮的属性Tabstop,该属性作用是“指定用户可以用Tab键移动到该控件”,如下图4,当其值为"true"时,表示可以使用Tab键移动到该控件。
分析产生该问题的原因,由于当鼠标点击按钮“取消”后,启用该属性"Tabstop"的值为"true"后,系统焦点会自动移动到下一个Tab键设置的tab值顺序的按钮,即“未带”按钮,结果由于代码中设置了当鼠标操作按钮的变色属性值,结果触发了该代码,造成了按钮背景、字体发生了改变。
解决方案:将涉及到的按钮的属性Tabstop值改为"False"即可解决。或者点击“取消”按钮后使“未带”按钮失去焦点也可以,可以使用“m_btn_oppointment_not_take.PostMessage(WM_KILLFOCUS, 0, 0);”使其失去焦点。
失去焦点可以使用以下几种:
GetDlgItem(要失去焦点的控件名)->PostMessage(WM_KILLFOCUS, 0, 0);
::SendMessage(GetDlgItem(要失去焦点的控件名)-> m_hWnd,WM_KILLFOCUS,-1,0);
SendDlgItemMessage(要失去焦点的控件名,WM_KILLFOCUS,0,0);
获得焦点:
GetDlgItem(另一个控件名)->SetFocus();
当然也可以用控件的属性Tabstop,设置值为"true"后再设置顺序号来激活焦点。如下图5
(图1) (图2) (图3) (图4) (图5)