如何右对齐 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
调用,因为这样做没有意义。如果您根据内容调整控件的大小,那么支持对齐(除了垂直对齐)有什么意义?
就我而言,通过:
- 使用
CHyperlink
.
- 调整
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);
}
我刚刚在我的对话框中添加了 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
调用,因为这样做没有意义。如果您根据内容调整控件的大小,那么支持对齐(除了垂直对齐)有什么意义?
就我而言,通过:
- 使用
CHyperlink
. - 调整
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);
}