gpt4 book ai didi

c++ - 如何计算 CMFCRibbonStatusBarPane 的大小

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:07 27 4
gpt4 key购买 nike

我有一个基于 MFC 功能区的应用程序,它包括如下三个状态栏;

CString LongString;
LongString.Format("%0*lf", 60, 0.0);
m_pStatusWnd = new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, _T(""), TRUE,NULL, LongString);
m_pStatusCommand = new CMFCRibbonStatusBarPane(ID_INDICATOR_PROMPT, _T("Command"), TRUE, NULL, "000000000000000000000000000000");
m_pStatusSnap = new CMFCRibbonStatusBarPane(ID_INDICATOR_SNAP, _T("Snaps"), TRUE, NULL, "00000000000000000000");
ui.GetStatusBar().AddElement(m_pStatusWnd, "Status");
ui.GetStatusBar().AddExtendedElement(m_pStatusCommand, "Command");
ui.GetStatusBar().AddExtendedElement(m_pStatusSnap, "Snaps");
ui.GetStatusBar().RecalcLayout();

屏幕右下角的两个扩展状态 Pane 具有固定大小,但我希望左侧状态 Pane 将剩余空间占用到框架的边缘。我能找到的唯一设置 Pane 宽度的方法是 SetAlmostLargeText 方法,该方法并不是很有用,因为值会根据框架的大小而变化。从测试来看,如果我给的值太大,状态面板根本不显示任何内容。同样,如果我调整框架大小并使其变小,一旦低于 AlmostLargeTextSize

,左 Pane 中的内容将完全丢失

是否有一种方法可以根据可用的框架空间计算左侧 CMFCRibbonStatusBarPane 的大小?我能找到的最近的是 CMFCRibbonBaseElement::GetSize,当它与平均字体大小指标结合使用时,我可能会计算出最大可用文本大小,但它看起来相当粗糙。

最佳答案

我的工作如下;

void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMyMainFrame::OnSize(nType, cx, cy);
if (!m_MyFrameInitialised)
return; // Only proceed if frame creation has been completed
CString SnapStr = m_pStatusSnap->GetAlmostLargeText();
CString CommandStr = m_pStatusCommand->GetAlmostLargeText();
int SnapChars = SnapStr.GetLength(),CommandChars = CommandStr.GetLength(), StatusChars = 0;
CDC *pDC = GetWindowDC();
CSize SnapSize = m_pStatusSnap->GetSize(pDC);
pDC->LPtoDP(&SnapSize);
double CharWidth = SnapSize.cx;
CharWidth /= SnapChars;
double TotalChars = cx / CharWidth;
StatusChars = TotalChars - (SnapChars + CommandChars);
CString LongStatusString;
LongStatusString.Format("%0*.0lf", StatusChars, 0.0);
m_pStatusWnd->SetAlmostLargeText(LongStatusString);
ui.GetStatusBar().RecalcLayout();
}

基本上,当框架窗口在初始创建后随时调整大小时,根据状态 Pane 字符计算框架宽度的大小,减去已知 Pane 的字符数,并设置左 Pane 根据结果​​。

对于一个应该提供高层次抽象的 UI 来说似乎有点麻烦,但这是我能想到的最好的。

关于c++ - 如何计算 CMFCRibbonStatusBarPane 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com