【问题标题】:What's the difference between return true and return false in OnInit() function of MFCMFC的OnInit()函数中的return true和return false有什么区别
【发布时间】:2018-06-04 10:53:52
【问题描述】:

在基于Dialog的MFC应用程序模板生成的源代码中,主应用程序的InitInstance(),派生自CWinApp,初始化应用程序环境,然后创建作为主应用程序界面的对话框并显示它与DoModal()。当显示的对话框返回时,应用程序完成并终止。

在从CDialogEx 派生的主应用程序界面对话框中,有一个方法OnInitDialog() 作为初始化对话框的一部分被调用。

从这个方法返回TRUE或返回FALSE有什么区别?

BOOL CMyTabDlgs::OnInitDialog() 
{ 
    CDialog::OnInitDialog() ;
    // Some code
    return true;
}

BOOL CMyTabDlgs::OnInitDialog() 
{ 
    CDialog::OnInitDialog() ;
    // Some code
    return false;
}

【问题讨论】:

标签: c++ visual-c++ mfc


【解决方案1】:

OnInitDialog() 成员函数由 MFC 框架在处理 WM_INITDIALOG 消息时调用。

这个成员函数的目的是提供一个地方来执行对话框的控件和界面的任何特殊初始化。

OnInitDialog() 方法中可以完成的事件之一是将焦点设置到对话框中的控件之一。此操作允许程序员决定对话框中显示的哪个控件(按钮、编辑窗口、组合框等)应首先获得焦点。

或者程序员可以让 MFC 框架为他们做出决定。

如果程序员将焦点设置到特定控件,OnInitDialog() 方法应返回 FALSE,以便 MFC 运行时知道焦点已设置。

如果程序员没有将焦点设置到特定控件,OnInitDialog() 方法应该返回 TRUE 以便 MFC 运行时知道它需要设置焦点。

这就是由 MFC 模板创建的 OnInitDialog() 方法框架中的 cmets 在 https://technet.microsoft.com/en-us/windows/fwz35s59(v=vs.60) 的代码示例中所指示的内容

BOOL CSimpleDlg::OnInitDialog() 
{ 
   CDialog::OnInitDialog(); 

   // TODO: Add extra initialization here 
   m_cMyEdit.SetWindowText(_T("My Name")); // Initialize control values 
   m_cMyList.ShowWindow(SW_HIDE);      // Show or hide a control, etc. 

   return TRUE;  // return TRUE unless you set the focus to a control 
   // EXCEPTION: OCX Property Pages should return FALSE 
}

MSDN article CPropertySheet::OnInitDialog对返回值有更全面的解释:

指定应用程序是否已将输入焦点设置为以下之一 属性表中的控件。如果 OnInitDialog 返回非零, Windows 将输入焦点设置为属性中的第一个控件 床单。应用程序只有在明确设置了 将焦点输入到属性表中的某个控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2011-08-26
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多