Winapi 如何获取CPrintDialogEx中属性表的句柄

Winapi 如何获取CPrintDialogEx中属性表的句柄,winapi,visual-c++,mfc,Winapi,Visual C++,Mfc,我试图向CPrintDialogEx添加属性页,但失败惨重。我的代码目前是 PROPSHEETPAGE optionsPage1; HPROPSHEETPAGE hOptionsPage = NULL; memset(&optionsPage1, 0, sizeof(PROPSHEETPAGE)); optionsPage1.dwSize = sizeof(PROPSHEETPAGE); optionsPage1.dwFlags = PSP_DEFAULT | PSP_USETITLE

我试图向
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();

属性页未显示,因此我想在
CPrintDialogEx
中的
WM_INITDIALOG
之后添加它。属性表创建后,如何获取其句柄。如果有人有一个勇敢的方法来实现这一点,并且在调用
DoModal
之前,应该添加属性表,将祖父母的txt设置为
OnInitDialog

中的对话框之外,将其命名为
CPrintDialogEx

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;
    }
};

显示选项属性页DlgProc的定义
如何添加DlgProc。这太复杂了,我超过了327个字符的限制!单击编辑按钮并对问题进行更改。如果您有DLL,它取决于
IDD\u QUICKREPORT\u OPTIONS
的位置。如果在错误的位置查找资源,则会出现1814错误。@user9778277我认为您试图将其添加为具有字符限制的注释。但要求您编辑问题本身。@user9778277 Barmak要求您提供cquickreport::OptionPropertyPageDlgProc的定义。请更新您的问题并提供足够的上下文来重现您的场景。LRESULT CQuickReport::optionPropertyPageDlgProc(HWND hWndDlg,UINT Msg,WPARAM WPARAM,LPARAM LPARAM);您已经显示了函数的声明,这不包含任何意外情况,也不会再现任何错误。我还必须添加它。在我将所有内容移动到DLL之前,它确实有效。不要在注释部分添加随机代码。改为编辑您的问题。您的
IDD\u QUICKREPORT\u选项
资源可以存储在DLL或EXE文件中。在您的情况下,它存储在错误的位置,并导致1814错误。