}
int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CFrameWnd::OnCreate(lpCreateStruct);
SetWindowText(〃ToolBar〃);
MyToolBar。CreateEx(this; TBSTYLE_FLAT;
WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER);
MyToolBar。LoadToolBar(IDR_MYTOOL1);
MyToolBar。EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&MyToolBar);
return 0;
}
CMyWnd::~CMyWnd()
{
}
void CMyWnd::OnButton10()
{
AfxMessageBox(〃Click button 10〃);
}
void CMyWnd::OnButton11()
{
AfxMessageBox(〃Click button 11〃);
}
void CMyWnd::OnButton12()
{
AfxMessageBox(〃Click button 12〃);
}
void CMyWnd::OnButton13()
{
AfxMessageBox(〃Click button 13〃);
}
程序运行结果如图 2…26 所示。
·35 ·
…………………………………………………………Page 45……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 2…26 MyToolbar 示例程序运行结果
2。5。4 状态栏
利用 AppWizard 自动创建的工程文件中,一般都自动添加了状态栏,在编程过程中,只
要在原有状态栏的基础上进行修改就可以了。
状态栏实际上是个窗口,一般分为几个窗格,每个窗格显示不同的信息。AppWizard 会
为应用程序自动创建一个默认的状态栏,该状态栏包括几个窗格,分别用来显示状态栏提示、
大小写锁定键(CAPS LOCK )、数字锁定键(NUM LOCK )和滚动锁定键(SCROLL LOCK)
的状态。在 MFC 中,状态栏的功能由 CStatusBar 类实现,创建一个状态栏需要以下几个步
骤:
o 构建一个 CStatusBar 对象;
o 调用 CStatusBar::Create 创建状态栏窗口;
o 调用 CStatusBar::SetIndicators 函数分配窗格,并将状态栏的每一个窗格与一个字符串
ID 相联系。
if (!m_wndStatusBar。Create(this) ||
!m_wndStatusBar。SetIndicators(indicators; sizeof(indicators)/sizeof(UINT)))
{
TRACE0(〃Failed to create status barn〃);
return …1; // fail to create
}
实例 2…7 :电子时钟。源代码在光盘中“02实例 2…7EClock ”目录下。
下面将通过一个电子时钟(在状态栏中嵌入一个电子时钟 )的例程来向读者详细讲述工
具栏的使用。
首先在 indicators 数组的 ID_SEPARATOR 项之后插入一个名为 ID_INDICATOR_CLOCK
的 ID,然后找到并双击字符串资源,打开字符串资源编辑窗口,接着在编辑窗口内按 Insert
键以插入一个新的字符串,指定字符串的 ID 为 ID_INDICATOR_CLOCK,内容为 00:00:00 。
由于状态栏将根据字符串的长度来确定相应窗格的默认宽度,所以指定为 00:00:00 就为时间
的显示预留了空间。添加该字符串资源的结果如图 2…27 所示。
·36 ·
…………………………………………………………Page 46……………………………………………………………
第 2 章 应用程序基本框架
时间窗格显示的时间必须每隔一秒钟更新一次。更新时间窗格的正文可调用 CStatusBar::
SetPaneText 函数,要定时更新,则应利用定时器消息(WM_TIMER )。在 Windows 中用户可
以安装一个或多个计时器,计时器每隔一定的时间间隔就会自动发出一个 WM_TIMER 消息,
而这个时间间隔可由用户指定。MFC 的 Window 类提供了 WM_TIMER 消息处理函数
OnTimer,可以在该函数内进行更新时间窗格的工作。
图 2…27 添加 ID_INDICATOR_CLOCK 字符串资源的结果
可以利用 ClassWizard 工具给 CMainFrame 类加入 WM_TIMER 的消息处理函数 OnTimer
和 WM_CLOSE 消息的处理函数 OnClose 。具体方法是在 Class name 栏中选择 CMainFrame,
在 Object IDs 栏中选择 CMainFrame,在 Messages 栏中找到 WM_TIMER 和 WM_CLOSE 项,
分别双击之然后单击“OK ”按钮退出 ClassWizard 。CMainFrame::OnClose 函数是在关闭主框
架窗口是被调用的,程序可以在该函数中做一些清除工作。部分核心代码如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
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(〃Failed to create toolbarn〃);
return …1; // fail to create
}
if (!m_wndStatusBar。Create(this) ||
!m_wndStatusBar。SetIndicators(indicators;
sizeof(indicators)/sizeof(UINT)))
{
TRACE0(〃Failed to create status barn〃);
return …1; // fail to create
}
·37 ·
…………………………………………………………Page 47……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
m_wndToolBar。EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
SetTimer(1;1000;NULL); //设置时钟定时器
return 0;
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime time;
time=CTime::GetCurrentTime(); //得到当前时间
CString s=time。Format(〃%H:%M:%S〃);//格式化时间显示格
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 文学名著
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 魔法玄幻
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 魔法玄幻
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 都市言情
- 最新章:第28章