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

来源:互联网 发布:php框架怎么用 编辑:程序博客网 时间:2024/04/28 13:10

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 classif (message==WM_MENUSELECT){OnMenuSelect(LOWORD(wParam), HIWORD(wParam), (HMENU)lParam);}return CDialog::WindowProc(message, wParam, lParam);}

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

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

Email:1834428218@qq.com



1 0
原创粉丝点击