В чем разница между возвращением true и возвращением false в функции OnInit () MFC - PullRequest
0 голосов
/ 04 июня 2018

В исходном коде, сгенерированном шаблоном для приложения 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;
}

1 Ответ

0 голосов
/ 29 июня 2018

Функция-член OnInitDialog() вызывается платформой MFC при обработке сообщения WM_INITDIALOG.

Цель этой функции-члена - предоставить место для выполнения любой специальной инициализации диалогового окна.элементы управления и интерфейс.

Одним из событий, которые можно выполнить в методе OnInitDialog(), является установка фокуса на один из элементов управления в диалоговом окне.Это действие позволяет программисту решить, какой элемент управления (кнопка, окно редактирования, поле со списком и т. Д.), Отображаемый в диалоговом окне, должен иметь фокус в первую очередь.

Или программист может просто позволить структуре MFC принять это решениедля них.

Если программист устанавливает фокус на определенный элемент управления, метод OnInitDialog() должен вернуть FALSE, чтобы MFC Runtime знал, что фокус уже установлен.

Если программист не устанавливает фокус на конкретный элемент управления, метод OnInitDialog() должен вернуть TRUE, чтобы MFC Runtime знал, что ему нужно установить фокус.

Это то, что комментарии вOnInitDialog() Скелет метода, созданный шаблоном MFC, указывает, как в примере кода из 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 CPropertySheet :: OnInitDialog есть более полное объяснение возвращаемого значения:

Указывает, установило ли приложение фокус ввода для одного из элементов управления в окне свойств.Если OnInitDialog возвращает ненулевое значение, Windows устанавливает фокус ввода на первый элемент управления в окне свойств.Приложение может вернуть 0, только если оно явно установило фокус ввода на один из элементов управления в окне свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...