gpt4 book ai didi

c++ - 如何使 MFC 功能区状态栏像常规 CStatusBar

转载 作者:行者123 更新时间:2023-11-30 01:42:05 25 4
gpt4 key购买 nike

第一张图片显示了我想做的事情。第二个显示了我得到的结果。

我希望状态栏显示特殊键 CAPS LOCK、NUM LOCK 和 SCROLL LOCK 的状态。此图像来自使用 CStatusBar 的旧项目。此快照来自 CMainFrame 类。

这张图片展示了我是如何在 Visual C++ 2015 MFC 中进行操作的,以及我得到的结果。此快照也来自 CMainFrame 类。

我的问题是:谁能告诉我我的应用程序如何拦截切换按钮 CAPS LOCK 和 NUM LOCK 的更改,然后更新用户界面。

我尝试使用此代码,但它不起作用:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_STYLE, &CMainFrame::OnUpdateStyle)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_FOLD, &CMainFrame::OnUpdateFold)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_OVR, &CMainFrame::OnUpdateInsert)

提前致谢。

最佳答案

首先,CMFCRibbonStatusBar 不支持 CStatusBar 的标准行为。

好消息是实现相同的行为非常容易。为了在您的应用程序中实现它,您必须执行以下操作:

如果是 MDI,请将此添加到主框架类或子框架的消息映射中:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, &CMainFrame::OnUpdateButtonsState)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, &CMainFrame::OnUpdateButtonsState)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, &CMainFrame::OnUpdateButtonsState)

实际的更新处理程序应该是这样的:

void CMainFrame::OnUpdateButtonsState(CCmdUI* pCmdUI)
{
UINT nVK;
UINT flag = 0x0001;

switch (pCmdUI->m_nID)
{
case ID_INDICATOR_CAPS:
nVK = VK_CAPITAL;
break;

case ID_INDICATOR_NUM:
nVK = VK_NUMLOCK;
break;

case ID_INDICATOR_SCRL:
nVK = VK_SCROLL;
break;

case ID_INDICATOR_KANA:
nVK = VK_KANA;
break;

default:
TRACE(traceAppMsg, 0, "Warning: OnUpdateKeyIndicator - unknown indicator 0x%04X.\n",
pCmdUI->m_nID);
pCmdUI->ContinueRouting();
return; // not for us
}

pCmdUI->SetCheck(::GetKeyState(nVK) & flag);

}

关于c++ - 如何使 MFC 功能区状态栏像常规 CStatusBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134023/

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