如何使用修改过的DLGTEMPLATEEX调用CDialog :: DoModal()

时间:2016-06-24 17:49:00

标签: c++ windows mfc modal-dialog

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

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

1 个答案:

答案 0 :(得分:2)

我得到了它的工作。事实证明,MFC有自己的未记录的类:DLGTEMPLATEEX。我发现this page使用以下代码来设置字体及其大小。然后,可以按照CDialogTemplate类方法中的逻辑访问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; } 方法:

<? 
setlocale (LC_TIME, 'fr_FR.utf8','fra'); 
echo (strftime("%A %d %B")); 
?>