簡體   English   中英

如何在 MFC 應用程序中調整應用程序菜單欄的大小?

[英]How can I resize an application menu bar in a MFC application?

我正在使用 MFC,並且成功地創建了自定義繪制的菜單。 除了 mainlevel-items 之外,每個菜單項都被正確測量和繪制。 我唯一無法完成的是重繪應用程序菜單欄。

我附上了兩張圖片:

  1. 第一個顯示菜單欄的一部分。 字體 Consolas 11pt 繪制正確。 按鈕的寬度計算正確,按鈕需要分布在兩行上。
  2. 第二張圖片顯示了相同的菜單欄,字體為 Consolas 20pt。 現在菜單需要三行來包含所有菜單項。 但是,每個單獨行的高度不會更新。 (在調試時,我看到 MeasureItem 覆蓋計算每個菜單項的正確高度)。 在菜單欄下方,有一個工具欄 (BCGToolBar),用於計算其欄的正確高度。

那么無論字體大小是多少,應用程序菜單欄永遠不會改變它的高度?

如何在此 MFC 應用程序中調整應用程序菜單欄的大小?

兩行菜單,字體大小正常 兩行大字體的菜單

到目前為止,我嘗試過的事情是以不同的順序遵循代碼行:

RECT barRect;
barRect.top = 0;
barRect.left = 0;
barRect.bottom = 100;
barRect.right = 1020;
m_pMainWnd->RepositionBars(0, 0, 0, 2, &barRect);

m_pMainWnd->GetTopLevelFrame()->RecalcLayout();
m_pMainWnd->DrawMenuBar();

for (POSITION pos = m_pMainWnd->GetTopLevelFrame()->m_listControlBars.GetHeadPosition(); pos != NULL;)
{
    CControlBar* controlBar = reinterpret_cast<CControlBar*>(m_pMainWnd->GetTopLevelFrame()->m_listControlBars.GetNext(pos));
    controlBar = nullptr; //Let's see what we can do with this. Is the menuBar a ControlBar? Didnt think so.
}
m_pMainWnd->RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

第一部分不是直接問題的答案,但它應該澄清為什么不需要它。

菜單是全局 UI 的一部分。 菜單項的大小也是全局設置的一部分。

如果用戶需要,他可以更改 Windows 設置以獲得更大的菜單。

我認為這不是改變標准行為的好方法。 UI 應該是穩定、持久和一致的。 所有程序都應該具有相同的外觀和感覺。 這包括菜單欄。

現在回答你的問題。

您收到WM_MEASUREITEM消息。 響應它,您可以更改 onwerdraw 菜單的高度。

請參閱: http : //www.codeguru.com/cpp/controls/menu/article.php/c3719/The-Easiest-Way-to-Code-the-Owner-Drawn-Menu.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM