• 关于菜单栏和状态栏的使用


    1.工具条

         假设已经新建好了一个资源文件菜单栏(IDR_MENU1),现在需要将该菜单栏加载到我们的对话框中去,在OnInitDialog()函数内添加,具体代码如下:

    // TODO: 在此添加额外的初始化代码
    //ADD
    //加载菜单
    m_menu.LoadMenu( IDR_MENU1 );
    SetMenu( &m_menu );
    m_menu.Detach();//因为这里是类成员变量,可以不使用这句,但是局部变量的话必须要有这个

    这样的话就可以在运行界面中看到我们的菜单栏了。这里的m_menu我是声明为CMenu的成员变量,这里可以不加最后一行代码。

    这样做完后,可以看到菜单并操作,但是不能进行消息响应。对菜单进行消息响应的时候,据说可以使用响应UPDATE_COMMAND_UI来实现,但是我尝试了下,发现没有反应,最后我是使用了响应消息WM_COMMAND来实现菜单响应的。具体代码如下:

    BOOL CImportTableDlg::OnCommand(WPARAM wParam, LPARAM lParam)
    {
    	// TODO: 在此添加专用代码和/或调用基类
    	int menuID = LOWORD(wParam);
    	CAboutDlg dlgAbout;
    	CFileDialog fdlg( TRUE, NULL, NULL, 6UL, _T("可执行文件(*.exe)||动态链接库(*.dll)||"), (CWnd *)this );
    	TCHAR szFileName[MAX_PATH];
        switch(menuID)
    	{
    	case ID_ABOUT:
    		dlgAbout.DoModal();
    		break;
    	case ID_OPEN:
    		fdlg.DoModal();
    		lstrcpy( szFileName, fdlg.GetPathName() );
    		m_pro.ResetContent();
    		m_pro.AddString( szFileName );
    		ListImportTable( GetProHandle(szFileName, FALSE) );
    		break;
    	case ID_EXIT:
    		this->EndDialog( IDOK );
    		break;
    	default:
    		break;
    	}
    
    	return CDialogEx::OnCommand(wParam, lParam);
    }
    附上图片:



    2.状态栏

        这个纠结了很久,开始使用CStatusBar的时候搞了好久也没显示,最后只好转向CStatusBarCtr了。

        这个用法比较简单,先贴代码:

     初始化代码:

    //设置状态栏
    this->m_statebar.Create( WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, CRect(0, 0, 0, 0), this, ID_BAR );
    CRect rt;
    this->GetClientRect( &rt );
    int pnWidth[2] = { rt.Width()/2, -1};
    this->m_statebar.SetParts( 2, pnWidth );
    
    SYSTEMTIME t;
    GetLocalTime(&t);
    CString str;
    CClientDC dc(this);
    str.Format( _T("当前时间为:%d年%d月%d日%d时%d分%d秒"), t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );
    CSize sz;
    sz = dc.GetTextExtent( str );
    this->m_statebar.SetText( str, 200, 0 );
    this->m_statebar.SetText( _T("准备中..."), 0, 0 );
    SetTimer( ID_BAR, 10, NULL );//ID_BAR是自定义的一个整数值,用来识别状态栏

    状态栏更新代码:

    void CImportTableDlg::OnTimer(UINT_PTR nIDEvent)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	SYSTEMTIME t;
    	GetLocalTime(&t);
    	CString str ;
    	CClientDC dc(this);
    	CSize sz;
    	switch( nIDEvent )
    	{
    	case ID_BAR:
    		str.Format( _T("当前时间为:%d年%d月%d日%d时%d分%d秒"), t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );
    		sz = dc.GetTextExtent( str );
    		this->m_statebar.SetText( str, 1, 0 );
    		break;
    	default:
    		break;
    	}
    	CDialogEx::OnTimer(nIDEvent);
    }

    效果的话,1中的图片已经有了。


  • 相关阅读:
    5W1H聊开源之What——开源协议有哪些?
    5W1H聊开源之What——开源是什么?
    测试开发专题-开篇
    痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
    痞子衡嵌入式:以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程
    痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程
    《痞子衡嵌入式半月刊》 第 34 期
    痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)
    痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记番外(1)
    痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现(轮询)
  • 原文地址:https://www.cnblogs.com/arbboter/p/4225264.html
Copyright © 2020-2023  润新知