孙鑫VC++深入详解:Lesson9 Part4---工具栏编程
来源:互联网 发布:锁定3g网络上网软件 编辑:程序博客网 时间:2024/06/01 09:14
//---
1. 工具栏类CToolBar是CControlBar的子类,而CControlBar是CWnd的子类...因此工具栏是个窗口.
1.将工具栏的图标的ID与子菜单项的ID设置成一样的,这样工具栏图标就可以响应子菜单项的消息.
2. 怎么将子菜单项目带有勾标记,即设置取消复选标记(勾):方法是添加UPDATED_COMMAND_UI消息即可.
//----
创建工具栏的过程:
1).定义一个工具栏对象. CToolBar m_NewToolBar; // 自定义工具栏 对象
2). 模仿CMainFrame::OnCreate中的写法 ,调用Create,EnableDocking(),DockControlBar()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;//------关联工具栏对象m_wndToolBar与资源IDR_MAINFRAME--- 即创建工具栏,工具栏就是一个窗口,其由CWnd...派生if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create status bar\n");return -1; // fail to create}// TODO: Delete these three lines if you don't want the toolbar to// be dockable//CControlBar::EnableDocking,这里是指明工具栏IDR_MAINFRAME是否可以停泊在父窗口上,以及如何停泊m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);// 这是调用的CFrameWnd::EnableDocking,指明主框架窗口可以停泊工具栏,不具体指定哪个工具栏.这样其他任何新建的工具栏也可以停泊了.EnableDocking(CBRS_ALIGN_ANY); //停泊工具栏具体的工具栏: 由对象m_wndToolBar关联的工具栏IDR_MAINFRAMEDockControlBar(&m_wndToolBar); //------自定义工具栏的实现//------关联工具栏对象m_NewToolBar与资源IDR_TOOLBAR1--- 改在右边CBRS_RIGHT if (!m_NewToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_NewToolBar.LoadToolBar(IDR_TOOLBAR1)){TRACE0("Failed to create toolbar\n");return -1; // fail to create} //CControlBar::EnableDocking,这里是指明工具栏m_NewToolBar是否可以停泊在父窗口上,以及如何停泊m_NewToolBar.EnableDocking(CBRS_ALIGN_ANY);//停泊工具栏具体的工具栏: 由对象m_newToolBar关联的工具栏IDR_TOOLBAR1DockControlBar(&m_NewToolBar); //------先加载图标到数字m_hIcon[], 用SetClassLong()调用,修改标题图标,放置一个定时器m_hIcon[0] =LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));extern CStyleApp theApp; // 要用theApp这个全局的应用程序对象,需要申明下它是CStyleApp中定义过的.m_hIcon[1] =LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));m_hIcon[2] =LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3)); SetClassLong(this->m_hWnd,GCL_HICON,(LONG)m_hIcon[0]);//把m_hIcon[0]设置为窗口创建后的默认图标SetTimer(1,1000,NULL); //设置一个定时器,定时产生WM_TIMER消息 return 0;}
用子菜单项显示/隐藏工具栏:
//----方式1: 调用ShowWindow,RecalcLayout,DockControlBar
这里有问题,就是工具栏隐藏后,再显示,怎么在原来的位置显示?
保存原来显示时工具栏窗口的位置......
//----方式2: 调用ShowControlBar 是CFrameWnd::ShowControlBar 框架类的函数
void CMainFrame::OnViewNewtoolbar() {// TODO: Add your command handler code here//----方式1: 调用ShowWindow,RecalcLayout,DockControlBar /*static CRect rect; //保存工具栏的位置if(m_NewToolBar.IsWindowVisible()){//m_NewToolBar.GetWindowRect(&rect);m_NewToolBar.ShowWindow(SW_HIDE);}else {m_NewToolBar.ShowWindow(SW_SHOW);//m_NewToolBar.MoveWindow(rect);}RecalcLayout(true);//重构窗口layoutDockControlBar(&m_NewToolBar); *///----方式2: 调用ShowControlBar 是CFrameWnd::ShowControlBar 框架类的函数ShowControlBar(&m_NewToolBar,!m_NewToolBar.IsWindowVisible(),FALSE);}// 给子菜单"新工具栏"增加 勾选复选设置void CMainFrame::OnUpdateViewNewtoolbar(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_NewToolBar.IsWindowVisible());}
//---
//---
- 孙鑫VC++深入详解:Lesson9 Part4---工具栏编程
- 孙鑫VC++深入详解:Lesson9 Part5---状态栏编程
- 孙鑫VC++深入详解:Lesson9 Part1---修改应用程序窗口
- 孙鑫VC++深入详解:Lesson9 Part3---模拟动画图标
- 孙鑫VC++深入详解:Lesson9 Part2---修改窗口光标,图表,背景
- 孙鑫VC++深入详解:Lesson9 Part6---在状态栏中添加进度条
- 孙鑫VC++深入详解:Lesson9 Part7---在状态栏中显示鼠标的位置
- 孙鑫VC++深入详解:Lesson9 Part8---给程序加个启动画面
- 孙鑫VC++深入详解:Lesson5 Part4 屏幕字符串滚动输出,DrawText,SetTimer,WM_Timer消息
- 孙鑫VC++深入详解:Lesson7 Part4 ---对话框上各个控件之间循环接受回车键获得焦点
- VC++6.0 工具栏编程
- VC工具栏编程
- 孙鑫VC++深入详解:Lesson6 Part4 ---CMenu 类的应用:添加子菜单项AppendMenu,插入子菜单项InsertMenu,删除菜单DeleteMenu
- 孙鑫《vc ++深入详解》第五章文本编程
- 孙鑫VC++深入详解(4):文本编程
- VC++ 深入详解 学习笔记 对话框编程
- VC++深入详解(12):网络编程
- 孙鑫VC++深入详解:Lesson1
- html 5 画布,画线条,画圆
- 编程珠玑笔记~~开篇
- UIResponder响应链 找到需要的视图或controller
- php页面请求原理
- oracle中dual表的用途介绍
- 孙鑫VC++深入详解:Lesson9 Part4---工具栏编程
- 导入导出数据库
- 持续集成 编年史 之 持续集成建设---自主研发(总括)
- 解决错误:build.properties does not exist
- Java 内存管理研究
- 直接选择排序法
- spring3与 quartz job 任务调度的整合
- java结构化参数调用存储过程
- gcc 链接(-l, -L)和编译(-include, -I)参数