金山ヒントボックスを拡大し、色をつける


1.プロンプトが多すぎる場合、ユーザーが表示しやすいように色が必要になる場合があります.
2.調査ではCBkRichTextに色の設定があり、ここで再利用できることが分かった.
    BOOL SetRichText(UINT uItemID, LPCSTR lpszXml)
    {
        T* pT = static_cast<T*>(this);
        CBkWindow *pWnd = pT->FindChildByCmdID(uItemID);

        if (!pWnd)
            return FALSE;

        if (!pWnd->IsClass(CBkRichText::GetClassName()))
            return FALSE;

        TiXmlDocument xmlDoc;

        { // Free stack
            CStringA strXml;
            strXml = L'<';
            strXml += CBkRichText::GetClassName();
            strXml += L'>';
            strXml += lpszXml;
            strXml += L'<';
            strXml += L'/';
            strXml += CBkRichText::GetClassName();
            strXml += L'>';
            xmlDoc.Parse(strXml, NULL, TIXML_ENCODING_UTF8);
        }

        if (xmlDoc.Error())
            return FALSE;

        CBkRichText *pWndRichText = (CBkRichText *)pWnd;
        pWndRichText->LoadChilds(xmlDoc.RootElement());

        pT->_InvalidateControl(pWnd);

        if (pWnd->IsVisible(TRUE))
            pWnd->BkSendMessage(WM_SHOWWINDOW, TRUE);

        return TRUE;
    }
3.対応するxmlはrichtextを使用しなければなりません
        <dlg pos="0,0,-0,-20">
          <icon id="60005" pos="20,20" src="32516" oem="1" size="32"/>
          <richtext id="60006" pos="70,20,-0,-0" />
        </dlg>

4.プロンプトボックスをポップアップする前にフォントを下に設定する
"<c color='0000ff'>    !</c><br/>
"

5.注意深い友达は、金山のダイアログボックスが适応していることを発见して、文字数によって提示枠の幅を决めて、行数によって高さを决めて、しかし弱国私达は提示する内容に色を加えました
すると、計算された文字数は元の文字よりずっと大きくなるに違いありません.これはヒントボックスを見苦しくします.そこで色文字を消します.
CRect CAutoRunMsgBox4::GetTextRect(CString strTxt)
{
	CWindowDC dc(::GetDesktopWindow());
	CRect rcText(0, 0, 1000, 1000);

	const BkStyle& textStyle = BkStyle::GetStyle("msgtext");

	dc.SelectFont(textStyle.m_ftText);

	int nPos1 = strTxt.Find('<');
	if (nPos1!=-1)
	{
		CString strName = strTxt.Left(nPos1);

		int npos2 = strTxt.Find('>');
		strTxt= strTxt.Right(strTxt.GetLength()-npos2-1);
		int nPos3 = strTxt.Find('<');
		strTxt = strTxt.Left(nPos3);
		strTxt = strName+strTxt;
	}

	dc.DrawText(strTxt, strTxt.GetLength(), rcText, textStyle.m_nTextAlign | DT_CALCRECT);

	return rcText;
}

終わります.