友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第14章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






 ·32 ·  


…………………………………………………………Page 42……………………………………………………………

                                                          第 2 章    应用程序基本框架  



2。5。3    工具栏  



    工具栏由一系列的按钮和间隔(Seperator )组成。一般功能相关的按钮组成一组,各组 

                                                                     MFC 中使 

按钮之间以一定的间隔分开 。通常,工具栏作为主框架窗口中的一个子窗口存在。 

用 CToolBar 类来封装工具条控件的各种操作,可以在资源编辑器的 ToolBar 上单击鼠标右键, 

选择 Insert  ToolBar  项,选中一个工具栏后,鼠标左键双击该工具栏就可以编辑,如图 2…24 

所示。  



                                                  



                          图 2…24    添加一个新的 ToolBar 资源  



    工具栏上所有按钮的图形在资源中实际上是以一个位图文件存在的。在利用 AppWizard 

创建的工程中,自动创建的工具栏位图文件名为 ResToolBar。bmp 。在位图中每个按钮占用一 

个宽为 16 像素、高为 15 像素的区域。可以用图形工具条及颜色盒绘制按钮的外表,它的属 

性包括 ID、长、宽及鼠标指向它时的说明。一般在 CMainFrame 中定义 CToolBar,其实现在 

CMainFrame 的 OnCreate 函数中完成,在该函数中用于创建工具栏的具体特征。  

    在工具栏中嵌入编辑框等控件,可以通过下面的方法:  

    o  定义一个编辑控件对象,不能是局部变量,否则会被释放掉;  

    o  调用 Create,惟一注意的是要在工具条中调用。  



    CRect rect;  



    m_wndToolBar。GetItemRect(1;&rect);  



    edit。Create(WS_CHILD|WS_VISIBLE;rect;&m_wndToolBar;ID_EDIT);  



    实例 2…6 :添加工具栏程序。源代码在光盘中“02实例 2…6MyToolBar ”目录下。  



    下面是一个 MyToolbar  的示例程序,集中演示了 ToolBar 在框架窗口中的应用。新建一 

个空的 Win32 Application 工程,然后加入下面的 MyToolBar。cpp 源文件,按照前面给出的步 

骤加入新的工具栏资源,这里工具栏的 ID 设置为 IDR_MYTOOL1 ,其属性如图 2…25 所示。  



                                                                          ·33 ·  


…………………………………………………………Page 43……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



                                                                                                     



                                                  图 2…25    工具栏属性对话框  



       #include     



       #include     



       #include 〃resource。h〃  



       class CMyApp:public CWinApp  



       {    



       public:    



                 virtual BOOL InitInstance();  



       };    



       class CMyWnd:public CFrameWnd  



       {    



       public:    



               ~CMyWnd();    



                 CToolBar MyToolBar;    



                 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);    



                 afx_msg void OnButton10();    



                 afx_msg void OnButton11();    



                 afx_msg void OnButton12();    



                 afx_msg void OnButton13();    



                 DECLARE_MESSAGE_MAP()    



       };    



       CMyApp MyApp;  



       BEGIN_MESSAGE_MAP(CMyWnd;CFrameWnd)    



                 ON_WM_CREATE()    



                 ON_MAND(ID_BUTTON40010;OnButton10)  



                 ON_MAND(ID_BUTTON40011;OnButton11)  



                 ON_MAND(ID_BUTTON40012;OnButton12)  



                 ON_MAND(ID_BUTTON40013;OnButton13)  



       END_MESSAGE_MAP()  



       BOOL CMyApp::InitInstance()  



       {    



                 CMyWnd* pCWindow=new CMyWnd;  



                 pCWindow…》LoadFrame(IDR_MYTOOLBAR1);//创建主窗口,加载菜单    



                 m_pMainWnd = pCWindow;    



 ·34 ·  


…………………………………………………………Page 44……………………………………………………………

                                                                                                    第 2 章    应用程序基本框架  



          pCWindow…》ShowWindow(m_nCmdShow);  



          pCWindow…》UpdateWindow();  



          return TRUE;    



}    



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 栏中选择 CMainFram
返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!