MFC и Немодальные Диалоговые окна
Так как AutoCAD пытается забирать центр от всех его дочерних окон, немодальные диалоги имеют специальное требование. Равномерно, немодальный диалог получит сообщение окна WM_ACAD_KEEPFOCUS, которое определено в adscodes.h как 1001. Когда ваш диалог получает это сообщение, это возвратило бы ИСТИНУ, если это сохранило центр. Если ответ на это сообщение ЛОЖНЫЙ (который является также значением по умолчанию), то ваше диалоговое окно будет терять центр, как только пользователь перемещает указатель от окна поля диалога.
Вы можете делать это с картой сообщения поля диалога, и ON_MESSAGE () объявление типа
BEGIN_MESSAGE_MAP (HelloDlg, CDialog)
ON_COMMAND (IDCLOSE, OnClose)
ON_COMMAND (IDC_DRAW_CIRCLE, OnDrawCircle)
ON_MESSAGE (WM_ACAD_KEEPFOCUS, onAcadKeepFocus)
END_MESSAGE_MAP ()
В этом примере, диалоговый класс приложения - HelloDlg, который получен из CDialog. Когда Вы добавляете этот вход в карту сообщения, Вы должны также записать функцию обработчика для сообщения. Предположите, что Вы написали функцию, вызвал keepTheFocus(), который возвращает ИСТИНУ, если ваш диалог хочет сохранить фокус ввода и ЛОЖЬ, если диалог желает выдавать фокус AutoCAD. Обработчик сообщения примера обеспечивается здесь:
afx_msg LONG HelloDlg::onAcadKeepFocus(UINT, LONG)
{
return keepTheFocus() ? TRUE : FALSE;
}