MFC之窗体改动工具栏编程状态栏编程程序启动画面
1窗体外观的改动
(1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs)
改动标题:cs.style&=FWS_ADDTOTITLE;
cs.lpszNamw="new title";
(2)窗体创建之后改动外观
在CMainframe::Create()中调用SetWindowLong(HWND hwnd,.....)依据參数改动指定的项
全部从CWnd派生的类都是窗体类在这些窗体类中都有一个公有的成员变量保存了和着个窗体对象相关的窗体句柄m_hWnd
获取窗体现有类型并在现有类型上加以改动:SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);
(3)窗体产生前改动图标光标背景(即改动窗体类)
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中创建自己的窗体类并加以注冊
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
WNDCLASS wclass;
wclass.cbClsExtra=0;
wclass.cbWndExtra=0;
wclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wclass.hCursor=LoadCursor(NULL,IDC_HAND);
wclass.hIcon=LoadIcon(NULL,IDI_ERROR);
wclass.hInstance=AfxGetInstanceHandle();//用全局函数获取应用程序实例句柄
wclass.lpfnWndProc=::DefWindowProc;//採用全局的缺省函数
wclass.lpszClassName=_T("www.csdn.net/luguifang2011");
wclass.lpszMenuName=NULL;//不影响自己主动创建的菜单
wclass.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wclass);
cs.lpszClass=_T("www.csdn.net/luguifang2011");//j将自己设计的类运用到生产窗体中
return TRUE;
}
注:在CMainframe中仅仅能改变图标光标背景无法改变,想改动背景和光标需再次在BOOL CMenuView::PreCreateWindow(CREATESTRUCT& cs)中进行cs.lpszClass=_T("www.csdn.net/luguifang2011");的改动
另外一种方法用全局函数afxWndRegisterWndClass()返回窗体类
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,0, LoadIcon(NULL,IDI_WARNING));
(4)窗体产生后改动图标光标背景等
使用全局函数SetClassLong()进行相关改动
(5)三种获取应用程序实例句柄的方法:
MakeintResource宏
2工具栏的编程
(1)创建工具栏
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
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("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
(2)工具栏的隐藏和显示
DockControlBar(&m_newToolBar);
另外一种用CFreamwnd::ShowControlBar()显示和隐藏
3状态栏的编程
(1)创建
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};//通过加入�状态指示器的内容加入�状态栏个数
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
(2)设置状态栏要显示的信息
CStatusBar::SetPaneText()
CStatusBar::CommandToIndex();//由id获取索引
CStatusBar::SetPaneInfo();//改动指示器信息包含状态栏宽度,和类型
CSize sz=dc.GetTextExtent(str)//获取文本宽度
(3)进度栏
CProgressCtrl类
成员函数:SetPos()//设置进度位置
设置进度栏到状态栏中
CStatusBar::GetItemRect()//获取状态栏某一指示器的矩形区域
注:对于获取状态栏的矩形区域须要在窗体产生之后即CMainframe::OnCreate()函数运行完毕之后,所以我们预先自己定义消息在CMainframe::OnCreate()函数中将自己定义消息通过PostMessage()投递到消息队列中在消息的响应函数中来获取指示器矩形区域(不能用sendMessage(),由于该函数会马上去运行响应函数,而不会等OnCreate()运行完)
另外一种能够再响应WM_PAINT消息函数中进行处理
4CFrameWnd::SetMessageText()
放置文本到最长的状态栏(四种方法)
GetDescendantWindow()为Cwnd的成员函数
5加入�程序启动画面
使用VC++组件库中的CsplasWnd
MFC之窗体改动工具栏编程状态栏编程程序启动画面的更多相关文章
- C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体
MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd 封装了工具栏控件相关操作 CToolBar - 父类是CControlBar 封装了工具栏和框架窗体之间的关系 工具栏使用: ...
- 三、PyQt5不同方法创建菜单栏、工具栏和状态栏
创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...
- 转:[你必须知道的异步编程]——异步编程模型(APM)
本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些 ...
- [你必须知道的异步编程]——异步编程模型(APM)
本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中 介绍了从C#1.0——C#4.0中一 ...
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
(一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...
- PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...
- 10Spring_AOP编程(传统编程)
注意我写这篇文章的思路,要想做切面编程,包含两个部分,通知和切点,通知是你要做哪些增强,切点是指你要拦截哪些方法.先介绍通知的定义再去介绍切点的定义.这篇文章我取名叫做Spring_AOP编程(传统编 ...
- Qt 学习之路 :菜单栏、工具栏和状态栏
在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...
- 【vc】14_网络编程_socket编程
1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...
随机推荐
- (1)ActivityThread分析
1. 入口. 曾经一直都说Activity的人口是onCreate方法.事实上android上一个应用的入口,应该是ActivityThread.和普通的java类一样,入口是一个main方法. pu ...
- CEGUI 输入法窗口实现
游戏中经常要输入汉字,但当我们游戏没有自己实现输入法窗口时,windows会使用用户安装的输入法,但这个输入法窗口只会显示在游戏窗口外头,而且当我们游戏全屏时(真全屏,不是那种窗口式的假全屏),屏幕上 ...
- xml总结图--(来自传智播客视频资料)
- 开源数据库连接池之C3P0
本篇介绍几种开源数据库连接池,同时重点讲述如何使用C3P0数据库连接池. 之前的博客已经重点讲述了使用数据库连接池的好处,即是将多次创建连接转变为一次创建而使用长连接模式.这样能减少数据库创建连接的消 ...
- fzu 1913 Easy Comparison(字符串)
题目链接:fzu 1913 Easy Comparison 题目大意:给出一个字符串,计算与它按照字典序排序排列后的字符串有多少个位置不同. 解题思路:水体,sort一下,然后遍历一遍就好. #inc ...
- 一道c++小编程题,
题目: 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词,程序应该找出满足以下条件的单词的输入位置:该单词的后面紧跟着再次出现自己本身,跟 踪重复次数量多的单词及其重复次数 ...
- perl EXPORT模块
Exporter - Implements default import method for modules 实现模块的默认导出方法: 简介: [tomcat@wx03 ~]$ cat hui.pm ...
- HDU ACM 1081 To The Max->最大子矩阵
分析:利用求最大子段和的思想进行求解. 1.首先累加s[i][j].表示第j列中i从第1行加到第i行的和. 2.对每一列的i1到i2行的和进行计算(0<i1<i2<=n),得出t[k ...
- 重载(overload),覆盖/重写(override),隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖/重写(override),隐藏(hide).在早期的C++书籍中,常常把重载(overload)和覆盖(override)搞错 ...
- 流式计算-Jstorm提交Topology过程(上)
Topology是Jstorm对有向无环图的抽象,内部封装了数据来源spout和数据处理单元bolt,以及spout和bolt.bolt和bolt之间的关系.它能够被提交到Jstorm集群. 本文以J ...