如何在CMFCPropertyGridCtrl中插入一个编辑框来使用密码?

How to insert an edit box into CMFCPropertyGridCtrl for password usage?

我想在 CMFCPropertyGridCtrl 中插入一个编辑框来输入密码。但是CMFCPropertyGridProperty 只能创建普通的编辑框。我如何为密码使用创建一个新密码?

CMFCPropertyGridProperty 派生一个新的 class 并覆盖两个函数:OnDrawValue()CreateInPlaceEdit().

代码原型可能如下所示:

void CMyGridProperty::OnDrawValue(CDC* pDC, CRect rect)
{
    // pre-processing
    // ...

    CString strVal = FormatProperty();
    if(!strVal.IsEmpty())
    {
        strVal = _T("******");  // NOTE: replace the plain text with "******"
    }
    rect.DeflateRect(AFX_TEXT_MARGIN, 0);
    pDC->DrawText(strVal, rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS);

    // post-processing
    // ...
}

CWnd* CMyGridProperty::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
    // pre-processing
    // ...

    CEdit* pWndEdit = new CEdit;
    DWORD dwStyle = WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_PASSWORD;   // NOTE: add 'ES_PASSWORD' style here
    pWndEdit->Create(dwStyle, rectEdit, m_pWndList, AFX_PROPLIST_ID_INPLACE);

    // post-processing
    // ...

    return pWndEdit;
}