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。”