Как я могу получить дескриптор листа свойств в CPrintDialogEx - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь добавить страницу свойств к CPrintDialogEx, но с треском проваливаюсь. Мой код в настоящее время

PROPSHEETPAGE optionsPage1;
HPROPSHEETPAGE hOptionsPage = NULL;

memset(&optionsPage1, 0, sizeof(PROPSHEETPAGE));
optionsPage1.dwSize = sizeof(PROPSHEETPAGE);
optionsPage1.dwFlags = PSP_DEFAULT | PSP_USETITLE;
optionsPage1.hInstance = AfxGetInstanceHandle();
optionsPage1.pszTemplate = MAKEINTRESOURCE(IDD_QUICKREPORT_OPTIONS);
optionsPage1.hIcon = NULL;
optionsPage1.pszIcon = NULL;
optionsPage1.pszTitle = _T("Options");
optionsPage1.pfnDlgProc = (DLGPROC)CQuickReport::OptionsPropertyPageDlgProc;
optionsPage1.lParam = NULL;
m_pdex.nPropertyPages = 1;
hOptionsPage = CreatePropertySheetPage(&optionsPage1);
m_pdex.lphPropertyPages = &hOptionsPage;

INT_PTR nResult = CPrintDialogEx::DoModal();

Страница свойств НЕ отображается, поэтому я хочу добавить ее после WM_INITDIALOG в CPrintDialogEx. Как я могу получить дескриптор на листе свойств после его создания. Если у кого-то есть смелый способ сделать эту работу и назовите CPrintDialogEx за пределами установки txt бабушки и дедушки в диалоге в OnInitDialog

1 Ответ

2 голосов
/ 05 марта 2020

Список свойств должен быть добавлен до вызова DoModal.

OnInitDialog вызывается после DoModal, поэтому слишком поздно инициализировать страницу.

Просто переопределить DoModal вместо:

class CMyPrintDialogEx : public CPrintDialogEx
{
public:
    INT_PTR DoModal()
    {
        PROPSHEETPAGE optionsPage1;
        memset(&optionsPage1, 0, sizeof(PROPSHEETPAGE));
        optionsPage1.dwSize = sizeof(PROPSHEETPAGE);
        optionsPage1.dwFlags = PSP_DEFAULT | PSP_USETITLE;
        optionsPage1.hInstance = AfxGetInstanceHandle();
        optionsPage1.pszTemplate = MAKEINTRESOURCE(IDD_QUICKREPORT_OPTIONS);
        optionsPage1.pszTitle = _T("Options");
        optionsPage1.pfnDlgProc = (DLGPROC)CQuickReport::OptionsPropertyPageDlgProc;
        optionsPage1.lParam = NULL;
        m_pdex.nPropertyPages = 1;
        HPROPSHEETPAGE hOptionsPage = CreatePropertySheetPage(&optionsPage1);
        m_pdex.lphPropertyPages = &hOptionsPage;

        INT_PTR nResult = CPrintDialogEx::DoModal();

        return nResult;
    }
};
...