Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1676046
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类:

2009-06-03 15:35:16

           VC精华教程:MFC入门系列(四)

   注意:在工具主菜单--子菜单--来源游览器,或按alt+F12可以查看Class and Members   

   上几章完成了一个程序的窗体,响应消息和菜单资源,现在为程序添具条(CToolBar)和状态栏(CStatusBar)。

使用说明定义步骤:
1.CToolBar类和CStatusBar类包含在afxext.h

2.实例化CToolBool toolbar;和CStatusBar statusbar;,仅仅是可以使用两个类。

3.工具栏:是条形窗口状,里面包含很多图片,每个按钮包含一个图片。
        即创建一个工具条时所需的按钮图片要准备好,在vc中一条工具        条只有一条形的图片。会切割成15*16个一个小图片,给对于按钮          1.创建一个工具条窗口(用Create方法)。  
         2.然后再加载一个位图(用LoadBitmap方法)
         3.还要创建几个按钮(使用SetButtons方法)

 状态条:一个条形的窗体,里面有很多的窗格,就是格子,我们要创建一个窗体(Create方法),在窗体上创建很多窗格(SetIndicators方法).

4.MFC的流程:
     在主窗体建成后,再创建工具条和状态条。在OnCreateClient这个方法里面写,不过要注意这个函数是框架的一部分,不要试图去调用它,她是在创建窗体时框架自动调用的。
/*********************************************************/
// Project:DemoApp
//
//注意:该项目通过Win32 Application创建,必须设置参数:use MFC in static Library.
//
/*********************************************************/
#include
#include //afx扩展库
#include "mfcdemo3_res.h" //包含资源文件
/*********************************************************/
//该类继承自CFrameWnd类
/*********************************************************/
class MainWnd:public CFrameWnd
{
public:
    /*****************************************/
    CToolBar   toolbar;   //定义工具栏
    CStatusBar statusbar;  //定义状态栏
       
    /***********************构造函数******************/
    MainWnd()
    {
        /*从资源文件中读入标题*/
        char MainWndTitle[280];
        LoadString(NULL,IDS_SYSTEM_TITLE,MainWndTitle,sizeof(MainWndTitle));

        /*调用CFrameWnd类中的Create方法来创建窗口*/
        Create(NULL,                                //Class Name
               MainWndTitle,                        //Window Name 
               WS_OVERLAPPEDWINDOW|WS_VSCROLL,      //Style
               rectDefault,                         //指定窗口的大小和位置
               NULL,                                //Praent handle
               MAKEINTRESOURCE(IDR_MAINMENU)        //Menu  
               );
    }
    
    /*****************************************/
    //响应鼠标左键按下事件
    afx_msg void OnLButtonDown()
    {
        ::MessageBox(NULL,"响应鼠标左键按下事件","Tt",MB_OK|MB_ICONQUESTION);
    }

    /*****************************************/
    BOOL OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
    {
        //sets each toolbar button's command ID
        UINT tools[]={ID_DISPLAY_UP,
                     ID_DISPLAY_DOWN,
                     ID_DISPLAY_LEFT,
                     ID_DISPLAY_RIGHT};

        UINT stats[]={0,
                      80,//ID_INDICATOR_NUM,
                      80,//ID_INDICATOR_CAPS
        };
       
        //创建工具栏
        toolbar.Create(this,WS_VISIBLE|WS_CHILD|CBRS_TOP|CBRS_FLYBY);
       
        //为工具栏加载图片
        toolbar.LoadBitmap(IDB_IMAGE_TOOLBAR);
       
        //设置按钮
        toolbar.SetButtons(tools,4);

        //创建工具栏
        statusbar.Create(this);
       
        //状态条设置窗格
        statusbar.SetIndicators(stats,3);
   
        return TRUE;
    }
    /*****************************************/
    //
    afx_msg void OnAbout()
    {
       ::MessageBox(NULL,"About","Tt",MB_OK|MB_ICONQUESTION);
    }

    /*****************************************/
    DECLARE_MESSAGE_MAP();


};

/***********************开始宏***/
BEGIN_MESSAGE_MAP(MainWnd,CFrameWnd) //参数:子类,父类
//{{AFX_MSG_MAP( CMyWindow )
     ON_WM_LBUTTONDOWN()//响应鼠标左键按下事件
    //ON_WM_PAINT()
    ON_COMMAND( IDD_ABOUT, OnAbout )
   //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/***********************结束宏**/


/*********************************************************/
//该类控制所有窗口
/*********************************************************/
class DemoApp:public CWinApp
{
public:
    //该函数在应用程序时初始化(相当于WinMain)
    BOOL InitInstance();
    //该函数在退出应用程序时
    BOOL ExitInstance();
};
/***********************************/
//(该函数相当于WinMain函数)
BOOL DemoApp::InitInstance()
{
    //定义并创建MainWnd类
    MainWnd *mainWnd = new MainWnd;
    
    //指定m_pMainWnd指向mainWnd( 其中:m_pMainWnd成员变量在CWinTread类中定义);
    m_pMainWnd=mainWnd;
    
    //显示窗口
    m_pMainWnd->ShowWindow(SW_SHOW);

    return TRUE;
}

/***********************************/
BOOL DemoApp::ExitInstance()
{
    return TRUE;
}

/*********************************************************/
//
/*********************************************************/

/*定义全局变量*/
DemoApp app;

  这里面的代码有两句没有讲

UINT tool[]={
           ID_DISPLAY_UP,
           ID_DISPLAY_DOWN,
           ID_DISPLAY_LEFT,
           ID_DISPLAY_RIGHT};

UINT stat[]={0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};

   这是因为我们要使用工具条必须要知道,用户到底点的是哪个按钮,所以,我们用一个数组标识她们,这两个数组里面的宏,必须要有对应的资源。我看到我们的 工具条都是灰色的,因为,我们没有写消息映射给他们,工具条也不可使用,必须要添加String Table才可以用。我们下次再讲。

阅读(1269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~