Конструктор CDialogEx и унаследованный метод Create () - PullRequest
1 голос
/ 24 апреля 2020

Когда я программно создаю немодальное диалоговое окно из идентификатора ресурса диалога, я использую следующий код:

CDialogEx myDialog(IDD_DIALOG1, this);
...
myDialog.Create(IDD_DIALOG1, this);

Можно видеть, что это не очень практично, так как необходимо передать идентификатор диалога дважды. Я понял что-то не так в создании диалога? Есть ли способ избежать этого повторения?

По какой причине MF C class CDialogEx предоставляет конструктор

CDialogEx(UINT nIDTemplate, CWnd* pParent=NULL);

, но также унаследованный метод

virtual BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);

что заставляет меня повторить ID диалога?

Причина в том, что я хочу получить собственный класс myDialogClass из CDialogEx, но не хочу назначать идентификатор в этой точке. Можно ли было бы передать фиктивный идентификатор конструктору CDialogEx? Я хочу назначить идентификатор при создании диалогового окна, а не до этого.

class MyDialogClass: public CDialogEx{
    ...
    public:
    MyDialogClass(CWnd* pParent=NULL):CDialogEx(DUMMY_ID, pParent){}
}

Кроме того, я хочу извлечь свой класс диалога в собственную библиотеку (библиотека расширений MF C) и использовать его в некоторых другой код. Мой класс диалога предоставляет дополнительную память D C для обычного D C, но это может быть любая другая функциональность. Я хочу использовать эту дополнительную функциональность в нескольких контекстах.

1 Ответ

0 голосов
/ 26 апреля 2020

«Я что-то не так понял при создании диалога?» Существует два сценария ios. Может использоваться диалоговое окно: модальное и немодальное. Вы смешанные их:

afxwin.h

CDialog & CDialogEx предоставляет конструктор без параметров , который может использоваться с немодальным сценарием. Ваш код становится:

CDialogEx myDialog();
// ...
myDialog.Create(IDD_DIALOG1, this);

Для получения дополнительной информации о том, как правильно реализовать немодальный диалог, см. this .

...