转载:https://www.cnblogs.com/LouMengzhao/p/6041464.html
转载:http://www.myexception.cn/vc-mfc/1742700.html
工作中没有小事:点石成金,滴水成河,只有认真对待自己所做的一切事情,才能克服万难,取得成功。
OnInitDialog的返回值告诉windows如何处置输入焦点,如果返回 TRUE,则windows将输入焦点指派给制表键控制次序中的第1个控件。如果要把输入焦点指派给其他控件,如IDC_EDIT,则需要调用控件的SetFocus函数,并且OnInitDialog的返回值为FALSE(禁止系统自己设置输入焦点)。通过将控件ID传递给GetDlgItem,可以获得调用SetFocus所需的CWnd指针,例子如下:
一般默认的是下面的返回值:
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
指定焦点:
GetDlgItem(IDC_BUTTON1)->SetFocus();
return FALSE;
上文提到的制表键控制次序,指的是一个窗口程序你按tab键的时候输入焦点会发生变化(按钮上的虚线框 编辑框出现光标闪烁),tab序为1的时候,窗口显示默认输入焦点就在tab序为1的控件上。
如何查看制表键次数:快捷点是 ctrl+D
用户自定义让指定控件获取焦点核心代码是:
GetDlgItem(IDC_BUTTON1)->SetFocus();//指定控件 return FALSE;
我们想要的结果是:
但我照着上面代码测试发现:
没效果,虽然按钮已获得焦点,但焦点的虚线框不显示。。。
但你来回切换当前活动窗口时,按钮边框又能高亮蓝色,但这不是我们想要的结果,我们想对话框初始化完毕,是哪个控件获取焦点,就是哪个控件边框蓝色高亮。
于是乎最终的解决办法是:在按钮获取焦点的同时修改按钮风格
CButton *pbtn=(CButton*) GetDlgItem(IDC_BUTTON1)->SetFocus();//指定控件 pbtn->SetButtonStyle(BS_DEFPUSHBUTTON, 0); //设置【默认按钮】样式 方法一 //::SendMessage(pbtn->m_hWnd, BM_SETSTYLE, BS_DEFPUSHBUTTON, TRUE); //设置【默认按钮】样式 方法二 return FALSE;