没有合适的资源?快使用搜索试试~ 我知道了~
首页VC++实例详解-4(不可多得的MFC教程)
资源详情
资源评论
资源推荐

下载
本部分的实例将把重点放在应用程序用户界面的各个方面,这些界面可以由 D e v e l o p e r
S t u d i o 、M F C和Visual C++来创建。用户界面开发工具是本部分密切关注的内容,所以该部分
内容包括了本书的大部分实例。本部分的各个章节是:
第4章 应用程序和环境
本章的实例覆盖了应用程序与其所处环境交互的各个方面,内容包括应用程序如何运行
以及应用程序的外观如何显现。实例的范围包括寻找空间添加标识以及阻止同时运行同一个
应用程序等。
第5章 菜单和控件条
这一章的内容涉及应用程序的菜单和控制条,这也许是用户同应用程序之间进行交互的
主要方式。A p p Wi z a r d自动地为应用程序添加基本的菜单、工具栏和状态栏,但是这些菜单和
控制条是很简单的,连 Developer Studio的都比不上。自己动手费点力可以为自己的应用程序
增加与Developer Studio类似的外观。
第6章 视
如果创建S D I 或者M D I应用程序,则此时应用程序的视将是用户与应用程序,特别是与正
在编辑中的属于应用程序的文档之间进行交互的主要方式。本章所有的实例都与视相关,从
创建一个属性表、打印视到拖放文件到视中等等。
第7章 对话框和对话条
对话框和对话条用于提示用户使用不同类型的控件,比如按钮和列表框等等。 M F C 和
Developer Studio自动创建对话框和对话框类。本章将探讨手工修改对话框的各种方式,使之
更加符合用户的要求。
第8章 控件窗口
对话框上添加了按钮和编辑框等控件窗口(操作系统提供的子窗口 )。不仅可以在对话框中
采用它们,还可以把它们放在视、控制条和任何窗口之内。程序员甚至可以自己绘制它们。
第9章 绘图
位图和图标可以为自己的应用程序增加颜色和风格。因为所有的窗口界面都类似,所以
标识符和s p l a s h 屏幕才是真正区别不同程序外观的唯一方式。显而易见,绘图对创建自己的控
件以及在C A D应用程序中显示图表也是很重要的。
第二部分 用户界面实例

第10章 帮助
比起阅读手册里的各种命令,在线帮助有助于大量减少学习应用程序所需要的时间和困
难,用户可以直接查询控件,本章实例描述了如何实现 3种类型的在线帮助。
第11章 普通窗口
视、对话框和控制条、控件窗口和工具栏等组成了 M F C 应用程序的界面,但它们都是建
立在低级窗口的基础之上。为什么在其他元素都很复杂的情况下却采用这样类型的窗口呢?
这是因为,在这个级别上编写程序可以达到高级窗口才能达到的效果。
第12章 特定的应用程序
本章用一些专门的 M F C应用程序来概述全部分。本章的实例包括一对简单的文本编辑器
和两个数据库编辑器。其中一个实例提供了创建自己的浏览器风格应用程序的全部内容。最
后,本章还包括了如何创建简单的 Wi z a r d的内容。
第 4 章 应用程序和环境
本章探讨应用程序和环境之间在各方面如何交互。本章的内容包括所有应用程序的运行
方式以及它们向用户呈现出的外观表现。这里的实例有:寻找新地方来添加标识符,在环境
中添加图标以及防止同时运行两个相同的应用程序。这些实例具体包括:
实例1 在工具栏中添加一个静态标识符,即在工具栏中添加一个程序附属的图片,使之
一直可见。
实例2 在工具栏中添加一个动态标识符 ,即上例中静态标识符的动态版本。
实例3 只启动一个实例,本例将防止同时运行应用程序中的多个实例。
实例4 创建一个对话框/ M D I混合式应用程序,本例将创建这两类标准的应用程序类型。
实例5 在系统托盘(System Tr a y )中添加图标,本例将单击系统托盘中用户自己的图标(系
统托盘是一个位于桌面上的图标集,与时间显示相邻 )。
实例6 在主窗口标题栏上显示标识符,本例利用应用程序的标题栏来显示标识符或其他
位图。
4.1 实例1:在工具栏中添加静态标识符
1. 目标
如图4 - 1所示,在应用程序工具栏的右上角处显示一个标识符。
2. 策略
工具栏是单控件窗口,可以在其客户区内绘制各类按钮。当用户单击某个按钮时,工具
栏就会根据该按钮的图像来触发相应的命令。这里只是简单地给应用程序的工具栏添加一个
子窗口,而且该子窗口远离其他按钮。所添加的子窗口是一个普通窗口,它可以显示一幅位
图,并且随着工具栏尺寸的改变而不断移动。
3. 步骤
64第第第二部分第用户界面实例
下载

1) 创建一个用来绘制标识符的普通窗口
用Class Wizard 创建一个来自
generic CWnd的通用窗口。
在该通用窗口中,用光盘中为本
例提供的位图类嵌入一个位图变量,
如下所示:
CWzdBitmap m_bitmap;
注意 在本系列的第一本书中,
创建位图类时不仅装入了一个位
图资源,而且也装入了位图的调
色板,其目的是用来准确地修改位图的颜色。
在该类中添加一个C r e a t e B X ( )成员函数,该函数将装入位图标识符,并同时在工具栏中创
建一个实际的窗口:
void CWzdLogo::CreateBX( CWnd *pWnd, UINT nBitmapID, UINT nChildID )
{
m_bitmap.LoadBitmapEx( nBitmapID,TRUE );
CRect rect( 0,0,0,0 ); // will be resizing constantly anyways
Create( NULL,_T( " " ),WS_CHILD|WS_VISIBLE, rect, pWnd, nChildID );
}
添加另一个成员函数,该函数使得工具栏可以移动窗口:
void CWzdLogo::MoveLogo( int nWidth, int nHeight )
{
M o v e Window( nWi d t h - m _ b i t m a p . m _ Wi d t h , 0 , m _ b i t m a p . m _ Width,nHeight );
}
应用Class Wi z a r d添加一个在窗口中绘制位图的 W M _ PA I N T 消息处理函数句柄,并以此来
结束该类:
void CWzdLogo::OnPaint()
{
CPaintDC dc( this ); // device context for painting
// get bitmap colors
CPalette *pOldPal =
dc.SelectPalette( m_bitmap.GetPalette(), FALSE );
d c . R e a l i z e P a l e t t e ( ) ;
// get device context to select bitmap into
CDC dcComp;
dcComp.CreateCompatibleDC( &dc );
dcComp.SelectObject( &m_bitmap );
// draw bitmap
dc.BitBlt( 0,0,m_bitmap.m_Width, m_bitmap.m_Height, &dcComp,
0,0,SRCCOPY );
// reselect old palette
可以在此处放置任
意类型的位图图片
图4-1 在工具栏中添加一个静态标识符
第 4 章第应用程序和环境第第65
下载

dc.SelectPalette( pOldPal, FALSE );
}
要查看该普通窗口类的总体情况,请参考本实例结尾处的程序清单
—
标识符类。
2) 创建一个包含普通窗口类的自定义工具栏
使用Class Wizard 从C To o l B a r C t r l中创建一个新类。编辑所有生成的 . h和. c p p 文件,以修
改所有从C ToolBarCtrl 到C To o l B a r的引用( C l a s s Wi z a r d 不允许从C To o l B a r类派生一个类)。
在新的工具栏中嵌入新的普通窗口类,如下所示:
C W z d L o g o m _ L o g o ;
使用Class Wi z a r d 给工具栏添加一个 W M _ C R E AT消息处理函数句柄。用该句柄调用普通
窗口类的C r e a t B X ( )函数:
int CWzdToolbar::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
if ( CToolBar::OnCreate( lpCreateStruct ) = -1 )
return -1;
m_Logo.CreateBX( this,IDB_LOGO,-1 );
return 0;
}
再一次使用Class Wi z a r d 来添加一个W M _ S I Z E 消息处理函数,这里要调用普通窗口类的
M o v e L o g o ( ) 函数:
void CWzdToolbar::OnSize( UINT nType, int cx, int cy )
{
C ToolBar::OnSize( nType, cx, cy );
m_Logo.MoveLogo( cx,cy );
}
要看该工具栏类的总体,请参考本实例结尾处的程序清单
—
工具栏类。
3) 在应用程序中使用新的工具栏类
现在,在M a i n F r m . h文件中用新的工具栏类替换 C To o l B a r :
// change CToolBar to CWzdTo o l B a r
C W z d Toolbar m_wndTo o l B a r ;
不幸的是,本实例对可停靠的工具栏就不起作用了。这是因为可停靠的工具栏仅仅与它
所包括的最后一个按钮长度相同。而该实例却依赖于具有大量额外空间的工具栏,以便在结
尾处粘贴普通窗口。因此必须在注释工具栏处将其设为非停靠式 ( u n - d o c k a b l e ),或者在
C m a i n F r a m e : : O n C r e a t ( )中删除以下各列:
int CMainFrame::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
: : :
// comment out or delete these lines
// m_wndTo o l B a r.EnableDocking( CBRS_ALIGN_ANY );
// EnableDocking( CBRS_ALIGN_ANY );
// DockControlBar( &m_wndToolBar );
66第第第二部分第用户界面实例
下载

return 0;
}
4. 注意
■ 实际上,可以利用本实例在父窗口的任何空白区粘贴标识符。只要在父窗口的类中嵌
入这个窗口,并使用Class Wizard 添加一个W M _ C R E AT 消息处理函数句柄就可以创建标识符
窗口。
■ 如果想在可停靠的工具栏中粘贴一个标识符,请参考第 2章。在第2章中,你会发现:
通过在C ToolBar 类中重载C a l C D y n a m i c L a y o u t ( ) 可以扩大工具栏的尺寸使之包含你的标识符。
无论如何都要确保提供该标识符的水平和垂直两个版本。
5. 使用光盘时注意
运行随书附带光盘上的工程时,会注意到右手方向的工具栏上写有 Your Company的字
样。
6. 程序清单
—
标识符类
#if !defined WZDLOGO_H
#define WZDLOGO_H
// WzdLogo.h : header file
/ /
#include "WzdBitmap.h"
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// CWzdLogo window
class CWzdLogo : public CWnd
{
// Construction
p u b l i c :
C W z d L o g o ( ) ;
// Attributes
p u b l i c :
// Operations
p u b l i c :
void CreateBX( CWnd *pWnd, UINT nBitmapID, UINT nChildID );
void MoveLogo( int nWidth, int nHeight );
// Overrides
// ClassWizard generated virtual function overrides
// {{AFX_VIRTUAL( CWzdLogo )
// }}AFX_VIRT U A L
// Implementation
p u b l i c :
virtual ~CWzdLogo();
// Generated message map functions
第 4 章第应用程序和环境第第67
下载
剩余21页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论1