簡體   English   中英

如何使用修改后的DLGTEMPLATEEX調用CDialog :: DoModal()

[英]How to call CDialog::DoModal() with modified DLGTEMPLATEEX

我知道我可以使用DialogBoxIndirectParam在內存中使用DLGTEMPLATEEX模板創建對話框窗口。

但是使用MFC可以在調用DoModal之前在CDialog中動態修改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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM