【问题标题】:How can I get the handle to the property sheet in CPrintDialogEx如何在 CPrintDialogEx 中获取属性表的句柄
【发布时间】:2020-03-04 22:02:07
【问题描述】:

我正在尝试将属性页添加到 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 之后添加它。创建后如何获取属性表的句柄。如果有人有一种勇敢的方式来完成这项工作,并在将祖父母的 txt 设置为 OnInitDialog 中的对话框之外将 CPrintDialogEx 命名为@

【问题讨论】:

  • 显示OptionsPropertyPageDlgProc的定义
  • 如何添加 DlgProc.它正在编译我超过 327 个字符!
  • 单击编辑按钮并更改您的问题。如果您有 DLL,则取决于 IDD_QUICKREPORT_OPTIONS 所在的位置。如果在错误的位置查找资源,则会出现 1814 错误。
  • @user9778277 我认为您正在尝试将其添加为具有字符限制的评论。但系统会要求您自行编辑问题。

标签: winapi visual-c++ mfc


【解决方案1】:

在调用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;
    }
};

【讨论】:

  • @user9778277 Barmak 要求您提供 cquickreport::OptionsPropertyPageDlgProc 的定义。请更新您的问题并提供足够的上下文来重现您的场景。
  • LRESULT CQuickReport::OptionsPropertyPageDlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam);
  • 你已经展示了函数的声明,这里没有任何意外,也不会重现任何错误。
  • 在将所有内容移入 DLL 之前,我还必须添加它确实有效。
  • 评论区不要乱码。改为编辑您的问题。您的IDD_QUICKREPORT_OPTIONS 资源可以存储在 DLL 或 EXE 文件中。在您的情况下,它存储在错误的位置并导致 1814 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2014-05-22
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2018-06-02
  • 2018-05-15
相关资源
最近更新 更多