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之窗体改动工具栏编程状态栏编程程序启动画面的更多相关文章

  1. C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体

    MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd  封装了工具栏控件相关操作 CToolBar - 父类是CControlBar  封装了工具栏和框架窗体之间的关系 工具栏使用: ...

  2. 三、PyQt5不同方法创建菜单栏、工具栏和状态栏

    创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...

  3. 转:[你必须知道的异步编程]——异步编程模型(APM)

    本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些 ...

  4. [你必须知道的异步编程]——异步编程模型(APM)

    本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中 介绍了从C#1.0——C#4.0中一 ...

  5. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  6. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束

    PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...

  7. 10Spring_AOP编程(传统编程)

    注意我写这篇文章的思路,要想做切面编程,包含两个部分,通知和切点,通知是你要做哪些增强,切点是指你要拦截哪些方法.先介绍通知的定义再去介绍切点的定义.这篇文章我取名叫做Spring_AOP编程(传统编 ...

  8. Qt 学习之路 :菜单栏、工具栏和状态栏

    在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...

  9. 【vc】14_网络编程_socket编程

    1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...

随机推荐

  1. 项目优化经验分享(六)SVN冲突和处理

    上一篇博客我们分享了新增需求的确定思想<站在全局看问题>.今天我们来分享项目开发中SVN冲突的解决经验:SVN冲突和处理! 引言 开发过项目的人都知道,公司开发一个项目都会使用到版本号控制 ...

  2. textarea内容有换行时存入数据库丢失问题的解决 (转载)

    http://blog.csdn.net/zhang_j_h/article/details/44563167 存入: function GetInputData(id, cmd) { var pos ...

  3. Qt布局管理

    原地址:http://blog.csdn.net/lastsoup/article/details/7028243 设计软件中各个部件的位置排列,有两种方法: 1.设置widget的在父窗体中的坐标和 ...

  4. WCF随笔3----消息编码器

    原文:WCF随笔3----消息编码器 我们都知道,message是wcf通信框架进行通信的最基本的单位,但是wcf开发人员其实根本不需要直接与message打交道,一样能够写好wcf相关的程序.这是因 ...

  5. Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

    Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...

  6. hdu 1760 一道搜索博弈题 挺新颖的题目

    A New Tetris Game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. appium 真机测试问题 出现 instruments crashed on startup

    1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...

  8. CButtonEx的实现

    要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制.这可以通过定义一个以CButton为基类的新按钮类来实现.以下为具体的实现方法: 方法一: 加入一个新类,类名:CB ...

  9. 暴力拆解CPU

    http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.htmlhttp://bbs.mydigit.cn/read.php?tid=110272http ...

  10. uva 705

    题意,给你迷宫算出其中个封闭空间的个数,以及求出所有封闭的空间的最大步长,但是给你的迷宫式“/”,“\”来标记的所以需要将每个格子分开来3*3的格子来算, 一开始按照2*2来算,2*2有临界情况不好算 ...