MFC基础知识(二)——工具条、菜单栏常见问题及鼠标形状设置

来源:互联网 发布:智睿高清网络电视安卓 编辑:程序博客网 时间:2024/06/08 15:23

本文主要介绍:在添加工具条和菜单栏时,根据网上的教程,有时候也会遇到一些问题,本文主要介绍几个常见问题,以及如何设置鼠标形状。

一、工具条创建及常见问题:

1.工具条的创建(网上方法)

<1>在MainFrm.h文件中声明一个工具条对象:

CMFCToolBar       m_wndSelectAoiBar; //变量名自己定义
<2>在MainFrm.cpp的OnCreate函数中添加工具条创建程序:

 if (!m_wndSelectAoiBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndSelectAoiBar.LoadToolBar(IDR_TOOLBAR_AOI))                          {TRACE0("未能创建工具栏\n");return -1;      // 未能创建}m_wndSelectAoiBar.EnableDocking(CBRS_ALIGN_ANY);//使可停靠DockPane(&m_wndSelectAoiBar);

2.存在问题:

<1>两个工具条总是横着排列:


显示上面创建的工具条,发现自己创建的工具条与自带的工具条横着排列,而不是上下并列,即使拖动使其并列,每次运行时,还会横着排列。

解决:

修改上面的创建程序,在风格设置后面,添加 ,CRect(3, 3, 3, 3), IDR_TOOLBAR_AOI),其中CRect大小可根据需要自己设:

//修改自带工具条if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(3, 3, 3, 3), theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME) ||!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)){TRACE0("未能创建工具栏\n");return -1;      // 未能创建}//创建画多边形工具栏if (!m_wndSelectAoiBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |CBRS_TOP  |CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(3, 3, 3, 3), IDR_TOOLBAR_AOI) ||!m_wndSelectAoiBar.LoadToolBar(IDR_TOOLBAR_AOI))                            //添加两个变量,CRect(3, 3, 3, 3), IDR_TOOLBAR_AOI),不然会和原工具条并排显示{TRACE0("未能创建工具栏\n");return -1;      // 未能创建}m_wndSelectAoiBar.EnableDocking(CBRS_ALIGN_ANY);//使可停靠DockPane(&m_wndSelectAoiBar);

运行程序,结果如下:


注:如果出现上下排列错位,手动拖动到正确位置,以后在运行时,都是拖动后的正确位置。

如果时一个工具条在另一个左侧,可用 DockPaneLeftOf(&m_wndToolBar2, &m_wndToolBar);      // 将m_wndToolBar2停靠在m_wndToolBar的左边

<2>视图的工具栏和停靠窗口中不能显示工具条名称:


点击标准下的空白,可以显示和隐藏刚刚创建的工具条。要设置工具条的名字,如果在MainFrm.cpp的OnCreate中设置,即:

m_wndSelectAoiBar.SetWindowText(_T("绘制AOI"));
结果仍是空白。

解决:

(1)将MainFrm.h中定义的工具条对象,设为公用变量,即放在public:下。

(2)在工程名.cpp的 InitInstance()函数中添加如下程序:

// 主窗口已初始化,因此显示它并对其进行更新pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow(); //下面一行为添加程序,上面为自带程序pMainFrame->m_wndSelectAoiBar.SetWindowTextA(_T("AOI工具")); //视图中显示“AOI工具”return TRUE;}
(3)运行程序:


二、菜单栏问题:

当下拉菜单有多个选项时,会出现下面情况,只有点击最下面圆圈,才能完全显示菜单选项:


解决:

视图->工具条和停靠窗口->自定义->选项  勾去菜单首先显示最近使用的命令,即可解决。

三、改变鼠标形状

重载OnSetCursor()函数,其对应的消息名称:WM_SETCURSOR,在资源视图中设计一个鼠标形状,并设置对应的ID号,然后在OnSetCursor()函数中加载所设计鼠标:

if(显示该形状鼠标条件){::SetCursor(AfxGetApp()->LoadCursor(ID号));return TRUE; //一定要返回}


1 0
原创粉丝点击