#c #mfc #cdialog #showwindow #setparent
#c #mfc #cdialog #showwindow #setparent
Вопрос:
У меня есть SDI-приложение. В приложении есть немодальный диалог, который используется для отображения некоторого сообщения, например, для связи с сервером во время выполнения работы. Вопрос в том, что когда родительское окно диалогового окна установлено в основной фрейм, метод ShowWindow работает не так, как ожидалось. Кажется, что диалоговое окно закрыто основным фреймом. Если я помещу вызов режима ожидания рядом с вызовом ShowWindow, я смогу увидеть диалоговое окно. И когда режим ожидания заканчивается, диалоговое окно исчезает.Если я не задаю родительский параметр диалогового окна, вызов ShowWindow работает нормально. Но я действительно хочу установить родительское окно диалогового окна. Итак, как это решить?
Комментарии:
1. Почему вы хотите, чтобы немодальное диалоговое окно было дочерним по отношению к основному? Передайте NULL родительскому файлу, если нет веской причины, по которой вы хотите установить эту связь. Я чувствую, что вы, вероятно, неправильно поняли семантику родительского окна для немодальных диалоговых окон.
2. Основная причина заключается в том, что если родительское окно диалогового окна не установлено, при отображении у него будет кнопка на панели задач. И я также обнаружил, что если диалоговое окно создается как pDlg-> Create(IDD, AfxGetMainWnd()), которое автоматически устанавливает родительское окно, вызов ShowWindow работает нормально. Есть ли какая-либо разница между двумя способами настройки родительского окна?
3. Вы можете установить стили, которые не будут отображать эту кнопку на панели задач. Например, установка его в качестве окна всплывающей подсказки (если это то, что вы хотите)
4. Слишком много вызовов, один для создания с NULL в качестве второго параметра, а другой для SetParent
5. Рассматривали ли вы окно сообщения для своих нужд? (CWnd::MessageBox(): msdn.microsoft.com/en-us/library/0eebkf6f (ПРОТИВ 80).aspx ). Также посмотрите: msdn.microsoft.com/en-us/library/ms645505 (VS.85).aspx
Ответ №1:
Проблема с ‘sleep’, заставляющая его работать некоторое время, заставляет меня думать, что вы создаете диалоговое окно в стеке, и оно выходит за рамки, следовательно, уничтожая себя.