如何将焦点设置到一个按钮,使边境和重点虚线是可见的?
题
我使用Visual Studio编辑器创建一个简单的基于对话框的应用程序,并在默认的CDialog加入三个按钮(通过拖动和丢弃它们)。
默认OK和Cancel按钮是有太多。
我想将焦点设置到按钮1当我点击按钮3。
我为MUY按钮设置属性平为true在属性。
我编码这样的:
void CbuttonfocusDlg::OnBnClickedButton3()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BUTTON1)->SetFocus();
Invalidate();
}
但是,在按钮1的畦从不绘制。插入符号(虚线指示焦点)如果我按下TAB点击之前的任何时间仅绘制按钮3
我想按钮看起来完全一样照顾我点击它。表示按钮内部的虚线编程,将是一个加。
我想什么:
我得到什么:
解决方案 3
此绘制按钮周围的粗边框:
static_cast<CButton*>(GetDlgItem(IDC_BUTTON1))->SetButtonStyle(BS_DEFPUSHBUTTON);
一个更优雅的方式来做到这将是在CbuttonfocusDlg以限定一个CButton构件变量并将其关联到IDC_BUTTON1控制,然后调用
this->m_myButton.SetButtonStyle(BS_DEFPUSHBUTTON);
这使得按钮到我设置的焦点默认按钮,但请注意,当焦点转到控制(在对话框内)不是一个按钮,默认的按钮是一次原来的默认按钮在对话框资源集,在这种情况下,“确定”按钮。
其他提示
使用WM_NEXTDLGCTL
。
void SetDialogFocus(HWND hdlg, HWND hwndControl)
{
SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)hwndControl, TRUE);
}
通过调用UpdateWindow,按钮被焦点改变之前重绘生效。的的Invalidate应该是本身就足以,该窗口将得到重新绘制当一切平息下来。
我下面乔尔的建议。但与在该链路中使用的API略有不同,我的一个是:
PostMessage的(WM_NEXTDLGCTL,(WPARAM)(pwnd-> GetSafeHwnd()),TRUE);
不隶属于 StackOverflow