MFC中的菜单、工具栏及重组工具栏

如何创建与菜单相关联的工具栏?

1.         在资源编辑器编辑主菜单,增加相应的菜单项。如在菜单Draw下标题为CircleidID_DRAW_CIRCLE的菜单项,并在属性对话框中的Prompt框中输入想要显示的文本,如Draw a Circle/nCircle。前面将在状态栏中显示,/n后面是工具提示。

2.         使用资源编辑器编辑更新应用程序的工具栏。展开Toolbar,打开IDR_MAINFRAME,双击最右边的空白按钮,增加新工具按钮,id设为ID_DRAW_CIRCLE。设计位图,画一个圆形作为工具栏图标。

3.         使用ClassWizard为视图添加相应的ID_DRAW_CIRCLE的消息处理函数。如void CMy14aView::OnDrawCircle()

如何在状态栏中显示相应的信息(例)?

1.         编辑StringTable,增加新的条目。如添加idID_INDICATOR_LEFT字符串值为Left的条目和idID_INDICATOR_RIGHT字符串值为Rightt的条目。

2.         编辑应用程序标记。View->Resource Symbols,添加新的状态栏标识符ID_MY_STATUS_BAR,并接受默认值。

3.         使用ClassWizard在类CMainFrame中添加View菜单命令处理程序。加入命令消息处理程序:

ID_VIEW_STATUS_BAR     COMMAND               OnViewStatusBar

ID_VIEW_STATUS_BAR     UPDATE_COMMAND_UI   OnUpdateViewstatusbar

4.         MainFrm.h中手动添加函数原型:

Afx_msg void OnUpdateLeft(CCmdUI* pCmdUI);

Afx_msg void OnUpdateRight(CCmdUI* pCmdUI);

并使m_wndStatusBarpublic

5.         编辑MainFrm.cpp文件,的indicators数组:

static UINT indicators[] =

{

       ID_SEPARATOR,           // status line indicator

       ID_SEPARATOR,          

       ID_INDICATOR_LEFT,

       ID_INDICATOR_RIGHT,

//    ID_INDICATOR_CAPS,

//    ID_INDICATOR_NUM,

//    ID_INDICATOR_SCRL,

};

修改OnCreate90函数的插入颜色标记的代码

       if (!m_wndStatusBar.Create(this,

WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, ID_MY_STATUS_BAR) ||

              !m_wndStatusBar.SetIndicators(indicators,

                sizeof(indicators)/sizeof(UINT)))

       {

              TRACE0("Failed to create status bar/n");

              return -1;      // fail to create

       }

6.         CMainFrame类添加消息映射入口

       ON_UPDATE_COMMAND_UI(ID_INDICATOR_LEFT, OnUpdateLeft)

       ON_UPDATE_COMMAND_UI(ID_INDICATOR_RIGHT, OnUpdateRight)

同时,添加以下两个函数:

void CMainFrame::OnUpdateLeft(CCmdUI* pCmdUI)

{

       pCmdUI->Enable(::GetKeyState(VK_LBUTTON) < 0);

}

 

void CMainFrame::OnUpdateRight(CCmdUI* pCmdUI)

{

       pCmdUI->Enable(::GetKeyState(VK_RBUTTON) < 0);

}

编辑以下函数,添加颜色显示的代码:

void CMainFrame::OnViewStatusBar()

{

       // TODO: Add your command handler code here

       m_wndStatusBar.ShowWindow((m_wndStatusBar.GetStyle() & WS_VISIBLE) == 0);

       RecalcLayout();

}

 

void CMainFrame::OnUpdateViewStatusBar(CCmdUI* pCmdUI)

{

       // TODO: Add your command update UI handler code here

       pCmdUI->SetCheck((m_wndStatusBar.GetStyle() & WS_VISIBLE) != 0);

       }

7.         在视图类添加WM_MOUSEMOVE消息处理函数

void CMy14bView::OnMouseMove(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       CString str;

       CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;

       CStatusBar* pStatus = &pFrame->m_wndStatusBar;

       if (pStatus)

       {

              str.Format("x = %d", point.x);

              pStatus->SetPaneText(0, str);

              str.Format("y = %d", point.y);

              pStatus->SetPaneText(1, str);

       }

      

       CView::OnMouseMove(nFlags, point);

}

运行此程序,将在状态栏第一第二个消息行显示鼠标所在左边的xy值;第三、第四个状态指示器将在鼠标左键、右键按下时显示LeftRgiht

如何在程序中添加重组菜单栏?

1.         创建MFC应用程序的时候,在第四步选上:Internet Explorer ReBars

2.         使用资源编辑器编辑Dialog标题下idIDR_MAINFRAME的对话栏资源。添加组合框等各种元素。

3.         把对话栏与CMainFrame类相关联。双击对话栏的某一元素,启动ClassWizard,在Adding a Class对话框中选中Select an existing class,在弹出的对话框中选中CMainFrame

4.         为对话栏编程。可应用如

CProgressCtrl* pProgress = (CProgressCtrl*)m_wndDlgBar.GetDlgItem(IDC_PROGRESS1);

来获得一个指向进度条控件的指针,并用这个指针调用相应的控件的函数进行编程。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值