当前位置: 首页 > news >正文

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

相关文章:

  • UNIX环境编程学习笔记(9)——文件I/O之文件访问权限的屏蔽和更改
  • SoftLayer®凭借Flex Images™消融物理与虚拟服务器之间的界线
  • 康动仪数据传输不成功可以用如下办法解决
  • 如何使用MSDN
  • JavaScript document 对象
  • [Git].gitignore失效的原因
  • 不知道能不能写小说
  • Appserv配置虚拟主机设置教程
  • 深入理解linux内核: linux内核
  • spring中context:property-placeholder/元素
  • 第二十章、启动流程、模块管理与 Loader
  • 一个体检系统设想
  • 彩生活_百度百科
  • ios 使用自定义字体
  • 从一堆数中随机取出一些值的方法
  • ES6指北【2】—— 箭头函数
  • 2017前端实习生面试总结
  • 78. Subsets
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • chrome扩展demo1-小时钟
  • conda常用的命令
  • const let
  • dva中组件的懒加载
  • ES6之路之模块详解
  • ESLint简单操作
  • Git初体验
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Nacos系列:Nacos的Java SDK使用
  • node和express搭建代理服务器(源码)
  • node入门
  • Objective-C 中关联引用的概念
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 人脸识别最新开发经验demo
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用agvtool更改app version/build
  • 手机app有了短信验证码还有没必要有图片验证码?
  • Hibernate主键生成策略及选择
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 达梦数据库知识点
  • #数学建模# 线性规划问题的Matlab求解
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)(1.9) MSP (version 4.2)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (层次遍历)104. 二叉树的最大深度
  • (剑指Offer)面试题34:丑数
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)chrome浏览器收藏夹(书签)的导出与导入