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

系统 1999 0

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中的图片已经有了。


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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论