如何右对齐 CMFCLinkCtrl?

How to right align a CMFCLinkCtrl?

我刚刚在我的对话框中添加了 CMFCLinkCtrl

CONTROL "od 9:42-44",IDC_MFCLINK_OD_REFERENCE,"MfcLink",WS_TABSTOP,289,143,42,11

看起来像:

目前它没有映射到任何变量,因为我已经在 IDE 中设置了 URL 和文本。但我希望此工具提示右对齐。它不会改变大小,但可以肯定的是我不希望它进一步向右流动。这可能吗?

我查看了 IDE 中的可用属性,但没有文本对齐控件:

最后我不得不使用CHyperlink控件。它源自 CMFCLinkCtrl.

在对我的问题的评论中,有人建议使用 m_nAlignStyle 属性。这似乎是合乎逻辑的,因为 link 控件派生自 CMFCButton。但那是行不通的。

CHyperlink 控件确实使用了前面提到的 属性,但有一个定制的 OnDraw 处理程序:

// ----------------------------------------------------------------------------------------------------
// Set the alignment for the hyperlink.
// ----------------------------------------------------------------------------------------------------
BOOL CHyperlink::SetTextAlignment(HyperlinkAlignment enumValue)
    {
    if (enumValue == Left)
        {
        m_nAlignStyle = ALIGN_LEFT;
        //SizeToContent(TRUE, FALSE);
        Invalidate();
        }
    else if (enumValue == Right)
        {
        m_nAlignStyle = ALIGN_RIGHT;
        //SizeToContent(TRUE, FALSE);
        Invalidate();
        }
    else if (enumValue == Center)
        {
        m_nAlignStyle = ALIGN_CENTER;
        //SizeToContent(TRUE, TRUE);
        Invalidate();
        }
    else
        {
        return FALSE;
        }

    return TRUE;
    }

请注意,我注释掉了 SizeToContent 调用,因为这样做没有意义。如果您根据内容调整控件的大小,那么支持对齐(除了垂直对齐)有什么意义?

就我而言,通过:

  1. 使用 CHyperlink.
  2. 调整SetTextAlignment方法。

它会起作用的。示例:

void CChristianLifeMinistryUtils::InitODLink(CHyperlink& rLinkCtrl)
{
    const LanguageMSA eForeignLang = theApp.GetForeignLanguageGroupLanguageID();
    const CString strODLink = GENERALLABEL3(eForeignLang, IDS_STR_OD_WOL_LINK);
    const CString strODTooltip = GENERALLABEL3(eForeignLang, IDS_STR_OD_WOL_TITLE);

    if (eForeignLang == LanguageMSA::Arabic)
    {
        rLinkCtrl.SetWindowText(_T("ش م 9:42-44"));
    }

    rLinkCtrl.SetURL(strODLink);
    rLinkCtrl.SetTooltip(strODTooltip);
    rLinkCtrl.SetTextAlignment(CHyperlink::Right);
}