gpt4 book ai didi

c++ - 将CComboBox添加到CMFCStatusBar Pane 的问题

转载 作者:行者123 更新时间:2023-12-01 14:52:58 25 4
gpt4 key购买 nike

我有这个简单的代码来创建CComboBox并将其显示在CMFCStatusBar的 Pane 中:

CRect rcPane;
m_StatusBar.GetItemRect(panePageBreaks, &rcPane);
CFont *pFont = m_StatusBar.GetFont();

m_myCombo.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, rcPane, &m_StatusBar, 2500);
m_myCombo.SetFont(pFont);
m_myCombo.AddString(_T("Page Breaks: None"));
m_myCombo.AddString(_T("Page Breaks: 1 Week"));
m_myCombo.AddString(_T("Page Breaks: 2 Weeks"));
m_myCombo.AddString(_T("Page Breaks: 3 Weeks"));
m_myCombo.AddString(_T("Page Breaks: 4 Weeks"));
我可以使状态栏足够大以包含此组合吗?目前这是一个或两个像素的高度太短:
StatusBar

更新资料
如果我使用:
rcPane.InflateRect(1, 2, 0, 2);
似乎更好。但是我不想捏造它。其他用户的PC可能不同。我希望此组合在特定的 Pane 中是准确的。

更新资料
我现在有点生气。我发现了一个类似的问题 here,它暗示要做两件事:
  • 更改字体高度。
  • 使用SetItemHeight

  • 所以我同时使用了这两种方法,发现要使控件具有正确的高度,我需要将字体高度设置为-6:
    CRect rcPane;
    m_StatusBar.GetItemRect(panePageBreaks, &rcPane);
    CFont *pFont = m_StatusBar.GetFont();
    LOGFONT sLF;
    pFont->GetLogFont(&sLF);
    sLF.lfHeight = -6;
    pFont->CreateFontIndirect(&sLF);

    m_myCombo.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, rcPane, &m_StatusBar, 2500);
    m_myCombo.SetItemHeight(-1, rcPane.Height());
    m_myCombo.SetFont(pFont);
    m_myCombo.AddString(_T("Page Breaks: None"));
    m_myCombo.AddString(_T("Page Breaks: 1 Week"));
    m_myCombo.AddString(_T("Page Breaks: 2 Weeks"));
    m_myCombo.AddString(_T("Page Breaks: 3 Weeks"));
    m_myCombo.AddString(_T("Page Breaks: 4 Weeks"));
    Status Bar with Combo
    您会看到,可以设置编辑控件的高度,但是如果字体高度较大,则会使编辑控件变大。所以我不能超过-6。并且状态栏文本为-12。所以这不是一个选择。
    我试图做的就是为用户提供一种简单的方法,即通过状态栏以及菜单导航来更改此设置。但是看来我做不到。
    如果有的话, CMFCStatusBar的高度需要比默认的 CComboBox编辑控件的高度高一点。

    最佳答案

    此代码显示了如何增加状态栏的高度。这样,您可以在状态栏中使用stardard控件,而无需进行任何修改。

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;

    if (!m_wndStatusBar.Create(this))
    {
    TRACE0("Failed to create status bar\n");
    return -1; // fail to create
    }
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

    m_wndStatusBar.GetStatusBarCtrl().SetMinHeight(70); // or, whatever you need

    return 0;
    }

    关于c++ - 将CComboBox添加到CMFCStatusBar Pane 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61216951/

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