Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用修改后的DLGTEMPLATEEX调用CDialog::DoModal()_C++_Windows_Mfc_Modal Dialog - Fatal编程技术网

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

C++ 如何使用修改后的DLGTEMPLATEEX调用CDialog::DoModal(),c++,windows,mfc,modal-dialog,C++,Windows,Mfc,Modal Dialog,我知道我可以使用内存中的模板创建一个对话框窗口 但是使用MFC可以在调用DLGTEMPLATEEX之前动态修改DLGTEMPLATEEX吗?我让它工作了。事实证明,MFC有自己的未记录类:CDialogTemplate。我发现使用以下代码可以设置字体及其大小。然后可以通过CDialogTemplate类方法中的以下逻辑访问DLGTEMPLATEEX——使用调试器进入SetFont方法: #include <afxpriv.h> //Needed for CDialogT

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


但是使用MFC可以在调用DLGTEMPLATEEX之前动态修改DLGTEMPLATEEX吗?

我让它工作了。事实证明,MFC有自己的未记录类:
CDialogTemplate
。我发现使用以下代码可以设置字体及其大小。然后可以通过
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;
}
#包含//CDialogTemplate所需
int CSimpleDialog::DoModal()
{
cdialog模板dlt;
结果;
//加载对话框模板
如果(!dlt.Load(MAKEINTRESOURCE(CSimpleDialog::IDD))){
返回-1;
}
//设置自己的字体,例如“Arial”,10分。
dlt.SetFont(“Arial”,10);
//获取指向修改的对话框模板的指针
LPSTR pdata=(LPSTR)GlobalLock(dlt.m_hTemplate);
//让MFC知道您正在使用自己的模板
m_lpszTemplateName=NULL;
InitModalIndirect(pdata);
//显示对话框
nResult=CDialog::DoModal();
//解锁内存对象
GlobalUnlock(dlt.m_hTemplate);
返回结果;
}

我让它工作了。事实证明,MFC有自己的未记录类:
CDialogTemplate
。我发现使用以下代码可以设置字体及其大小。然后可以通过
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;
}
#包含//CDialogTemplate所需
int CSimpleDialog::DoModal()
{
cdialog模板dlt;
结果;
//加载对话框模板
如果(!dlt.Load(MAKEINTRESOURCE(CSimpleDialog::IDD))){
返回-1;
}
//设置自己的字体,例如“Arial”,10分。
dlt.SetFont(“Arial”,10);
//获取指向修改的对话框模板的指针
LPSTR pdata=(LPSTR)GlobalLock(dlt.m_hTemplate);
//让MFC知道您正在使用自己的模板
m_lpszTemplateName=NULL;
InitModalIndirect(pdata);
//显示对话框
nResult=CDialog::DoModal();
//解锁内存对象
GlobalUnlock(dlt.m_hTemplate);
返回结果;
}

理论上,您可以重载
CDialog::DoModal
,MFC就是在这里加载对话框模板的。我想我在前一段时间玩过这个,并设法在对话框模板中更改了一些东西,但我放弃了,因为它太复杂了。你想做什么是用简单的API做不到的?从你链接的文档中可以看出:“要从内存中的模板构造一个模态对话框,首先调用无参数、受保护的构造函数,然后调用InitModalIndirect。”从理论上讲,你可以重载
CDialog::DoModal
,这就是MFC加载对话框模板的地方。我想我在前一段时间玩过这个,并设法在对话框模板中更改了一些东西,但我放弃了,因为它太复杂了。你想做什么是简单API做不到的?从你链接的文档中可以看出:“要从内存中的模板构造一个模态对话框,首先调用无参数、受保护的构造函数,然后调用InitModalIndirect。”