MFC对话框添加菜单、状态栏,并在状态栏显示菜单提示信息

1、添加菜单、状态栏

  1、添加菜单的方法比较多,可以在VS studio的Resource View里面分别添加一个菜单资源和状态栏资源;

  2、在对话框头文件添加菜单和状态栏成员变量:

	// 菜单
	CMenu m_Menu;
	//状态栏
	CStatusBar m_StatusBar;
             

  3、完成菜单与状态栏的初始化(在OnInitDialog()添加以下代码):

(1)菜单的初始化:

//添加自定义菜单
	m_Menu.LoadMenuA(IDR_MENU1);
	SetMenu(&m_Menu);

            小技巧:菜单栏的初始化也可以不用代码实现,直接修改对话框的Menu属性:


(2)状态栏的初始化

在这里我给状态栏添加两栏:


所以先创建两个字符串资源,显示状态栏的文字:

然后创建一个局部数组,存储这两个字符串资源:
static UINT indicators[]={IDS_STATESTRING1,IDS_STATESTRING2};

接下来就可以初始化状态栏了:
//添加状态栏

	if(!m_StatusBar.Create(this)|| !m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Can't create status bar\n");
		return false;
	}
	m_StatusBar.GetClientRect(&stateRect);
	m_StatusBar.MoveWindow(0,rect.bottom-stateRect.Height(),rect.right,stateRect.Height());// 调整状态栏的位置和大小
	m_StatusBar.SetPaneInfo(0,m_StatusBar.GetDlgCtrlID(),SBPS_NOBORDERS,250);//设置状态栏的宽度
	m_StatusBar.SetPaneInfo(1,m_StatusBar.GetDlgCtrlID(),SBPS_STRETCH,20);

	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//显示状态栏

我们希望,当窗口大小变化是,状态栏始终在底部,就需要在对话框的OnSize()函数里面添加相应的代码:
//根据窗口的大小自动调整工具栏、状态栏的大小
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

到此时,菜单和状态栏就添加完成。

2、状态栏显示菜单提示信息

状态栏的一个重要作用就是要显示提示信息,列如:我们将鼠标放在菜单栏某个菜单时,在状态栏给出菜单键相应的提示信息


我们手动添加的状态栏不能响应OnMenuSelect()消息,这就需要我们自己手动添加一个函数OnMenuSelect()
对话框头文件声明:
void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
源文件实现:
void MeasurementDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
	CString   strStatusText;   
	strStatusText.LoadString( nItemID);
	m_StatusBar.SetPaneText(0, strStatusText);
	return ;
}

但是这时候我们发现状态栏任然没有提示,为什么呢?原因在于OnMenuSelect()这个函数并没有被调用。
下面重载对话框的WindowProc()
LRESULT MeasurementDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: Add your specialized code here and/or call the base class
	if (message==WM_MENUSELECT)	
	{
		OnMenuSelect(LOWORD(wParam), HIWORD(wParam), (HMENU)lParam);
	}
	return CDialog::WindowProc(message, wParam, lParam);
}

如此,就会响应鼠标落在菜单上的消息了并调用OmMenuSelect()函数进行处理。

为了实现菜单与工具按钮同步响应请阅读这篇博客: 点击打开链接

Email:1834428218@qq.com



  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值