c++ - 如何使用修改后的 DLGTEMPLATEEX 调用 CDialog::DoModal()

标签 c++ windows mfc modal-dialog

我知道我可以使用 DLGTEMPLATEEX 创建一个对话窗口内存中的模板使用 DialogBoxIndirectParam .

但是使用 MFC 我可以动态修改 CDialog 中的 DLGTEMPLATEEX吗?之前 DoModal叫什么?

最佳答案

我让它工作了。事实证明 MFC 有它自己的未记录的类:CDialogTemplate。我找到了 this page使用以下代码设置字体及其大小。然后可以按照 CDialogTemplate 类方法中的逻辑访问 DLGTEMPLATEEX -- 使用调试器进入 SetFont 方法:

#include <afxpriv.h>        //Needed for CDialogTemplate

int CSimpleDialog::DoModal()
{
    CDialogTemplate dlt;
    int nResult;

    // load dialog template
    if (!dlt.Load(MAKEINTRESOURCE(CSimpleDialog::IDD))) {
        return -1;
    }

    // set your own font, for example “Arial”, 10 pts.
    dlt.SetFont("Arial", 10);

    // get pointer to the modified dialog template
    LPSTR pdata = (LPSTR)GlobalLock(dlt.m_hTemplate);

    // let MFC know that you are using your own template
    m_lpszTemplateName = NULL;
    InitModalIndirect(pdata);

    // display dialog box
    nResult = CDialog::DoModal();

    // unlock memory object
    GlobalUnlock(dlt.m_hTemplate);

    return nResult;
}

关于c++ - 如何使用修改后的 DLGTEMPLATEEX 调用 CDialog::DoModal(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38019340/

相关文章:

c - 如何从 ListControl(ListView) 中检索数据?

c# - 在 .NET WinForms 中获取 MFC 功能包 GUI 元素

c++ - 我如何声明一个放在 main 之后的类模板?

c++ - 为什么我应该使用 "int input{0};"而不是 "int intput;"

windows - 如何在 Windows Vista 中模拟/替换/重新启用经典混音器控件(或命令)?

windows - 通过 ftp 部署 Symfony2

c++ - 没有匹配的函数调用未解析的函数类型

c++ - 如何将 string.erase() 与指针一起使用?

c++ - Windows 编程。用空括号创建对象

windows - 为什么使用自定义笔时 GetLogPen 会失败?