MFC基于对话框的菜单栏,工具栏和状态栏的创建



一、菜单栏,菜单栏的创建很简单,新建一个菜单资源,打开对话框属性,在菜单栏选项中选择新建的资源ID即可。

二、状态栏:由于状态栏和工具栏都是派生自CWND类,所以可以用create,进行创建

  1.                      在**dlg类头文件中声明状态栏对象    CStatusBar m_stb;
  2.                      在OnInitDialog函数中创建状态栏的显示
	UINT array[2]={12301,12302};//状态栏分为两个
	m_stb.Create(this);
	m_stb.SetIndicators(array,sizeof(array)/sizeof(UINT));
	
	//显示状态栏
	
	CRect rect;
	GetWindowRect(rect);
	m_stb.SetPaneInfo(0,array[0],SBPS_NORMAL,rect.Width()/3);//第一栏占三分子一
	m_stb.SetPaneInfo(1,array[1],SBPS_STRETCH,rect.Width()/3*2);//第一栏占三分子二
	m_stb.SetPaneText(0,"lamber");
        RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); 
	m_stb.GetStatusBarCtrl().SetBkColor(RGB(100,100,100));//设置背景色
	SetTimer(10,1000,NULL);//设置状态栏显示时间,创建定时器
ontimer里面的函数如下
void CCSlm_SoftwareDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CTime stm;
	stm=CTime::GetCurrentTime();
// 	CString str;
// 	str.Format("%s",stm.Format("%y-%m-%d %H:%M:%S"));

	m_stb.SetPaneText(1,stm.Format("%H:%M:%S"));
	
	CDialog::OnTimer(nIDEvent);
}//最终效果如下图
  • 下面编写工具栏                                                                                   三、工具栏:
  • 同上声明变量:
  • CToolBar m_toolbar;
  • 同样在初始化函数中创建工具栏,我的工具栏ID号为IDR_TOOLBAR2,
  • 	if (!m_Toolbar.CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
    		CRect(4,4,0,0)) ||!m_Toolbar.LoadToolBar(IDR_TOOLBAR2) )
    	{
    		TRACE0("failed to create toolbar/n");
    		return FALSE;
    	}
    	m_Toolbar.ShowWindow(SW_SHOW);
        RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0)


  • 接下来添加提示信息
  • 在**Dlg类定义中添加映射函数的定义, //{{AFX_MSG(CDlgMenuToolbarDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
  • 在**Dlg.cpp添加息映射,请看如下代码中的黑体部分 BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
    //{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
    ON_WM_PAINT()
    ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
  • 在**Dlg.cpp添加函数的实现代码 //工具栏提示
    BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

    // UNICODE消息
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    //TCHAR szFullText[512];
    CString strTipText;
    UINT nID = pNMHDR->idFrom;

    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    // idFrom为工具条的HWND 
    nID = ::GetDlgCtrlID((HWND)nID);
    }

    if (nID != 0) //不为分隔符
    {
    strTipText.LoadString(nID);
    strTipText = strTipText.Mid(strTipText.Find(''/n'',0)+1);

    #ifndef _UNICODE
    if (pNMHDR->code == TTN_NEEDTEXTA)
    {
    lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
    }
    else
    {
    _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    }
    #else
    if (pNMHDR->code == TTN_NEEDTEXTA)
    {
    _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
    }
    else
    {
    lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    }
    #endif

    *pResult = 0;

    // 使工具条提示窗口在最上面
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
    SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
    return TRUE;
    }
    return TRUE;
    }
  • 最后一步,你必须打开添加的工具栏资源属性,查看工具栏的按钮下面会有一个提示,写上你需要的提示信息即可
  • 
    

你可能感兴趣的:(MFC基于对话框的菜单栏,工具栏和状态栏的创建)