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

标签 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;
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之后。创建属性表后如何获取属性表的句柄。如果有人有一个勇敢的方法来完成这项工作,并在将祖 parent 的txt设置为OnInitDialog

中的对话框之外为CPrintDialogEx命名

最佳答案

在调用DoModal之前应添加属性表。

OnInitDialogDoModal 之后调用,因此初始化页面为时已晚。

只需覆盖 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;
    }
};

关于winapi - 如何获取 CPrintDialogEx 中属性表的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535372/

相关文章:

windows - Windows 上网络接口(interface)准备就绪时的通知

c++ - 查找 std::wstring 的长度

winapi - 如何确定事件键盘布局的名称?

c++ - 将粒子位置(glm vec3s)顶点传递给顶点缓冲区对象

winapi - Vista 上的 IPC(服务和应用程序)

c++ - 为什么 sprintf_s 在不同版本的 Visual Studio 中给出不同的结果?

c++ - 如何获取通过网络驱动器访问的文件的 UNC 路径?

c++ - 为 CString 创建 unordered_map 作为键

c++ - 如何在不卡住窗口的情况下在 MFC 中连续运行函数?

c++ - Visual Studio 2017 中是否有自动保存功能来处理其错误和崩溃?