赞助

MFC的OnInitDialog的返回值(转载)

转载: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;

 

posted @ 2020-05-16 22:15  车臣  阅读(473)  评论(0编辑  收藏  举报