VC++学习(一)

       看了几天的vc++,发现还是知道一点。毕竟以前是学过c语言的。关键是得用心去学,MFC的建立也挤出来点门缝了,只是挤出来了点门缝而已。下面说说我学到的东西吧!

1MFC向导创建工程:

       这个大概就不用冗述了吧。按照向导一步一步的走下去就可以啦,但是有一点还是要提一下,就是最后一步,为项目的view选择baseclass的时候。假设你想在主面板上添加一些控件,比如list之类的,建议继承CFormVIew,默认是继承CView的。这样之后,主窗体就会像对话框一样啦,直接在上面拖控件就可以啦,否则得话,需要自己写代码创建控件,就会比较麻烦,目前为止我是不知道怎么用代码添加控件的。

       工程创建完成后,会有三个与你的项目名很相似的三个类,XXDOCXXView,XXApp,还有一个mainFrame类。以及一个关于对话框类。

2、添加自己的对话框

在资源视图dialog上右键就会出现熟悉的英文单词“Add”,选择了add之后,一个添加资源的对话框就出现了,或者直接点Insert Dialog就会新添加一个对话框,添加了对话框资源后,激活它,打开属性面板就可以编辑对话框的ID

下面是很重要的一步。

双击打开对话框资源,我们就可以看到对户框的设计界面啦。我们可以在这个面板上随意添加各种控件。要想使用这个对话框我们需要做很重要的一步,那就是为新建的对话框构建类。在该视图下,右键,选择Add Class系统会弹出添加类对话框,该对话框只需要填入创建的类名称就可完成对话框类的创建。

至此我们就完成对话框的创建。

3、菜单调用对话框

       2中我们已经创建好了一个对话框,如何调用显示这个对话框那?下面就说一下在菜单中调用对话框的方法。

首先,打开资源视图,在Menu里面打开项目自动生成的菜单IDR_MAINFRAME。加入菜单项。

在对话框上右键选择编辑ID,这个时候就可以为新添加的菜单项设置ID了。此处设置为:ID_SHOWDIA

选中添加的菜单项,右键-Add Event Handler,就会出现添加该菜单项点击时的事件监听。出现如下对话框:

Class List中选择XXView,直接点击Add就可以啦。当然此处关于此事件监听是添加到主界面的其他类是可以的,但是我们习惯上最好添加到View类中,方便做相关处理。

添加完成后,代码自动定位到刚添加的函数处,在函数体中添加如下代码即可完成对话框的显示:(注意添加#include "MyDialog.h"

void CMFCAppView::OnShowdia()

{

    CMyDialog pDia;

    pDia.DoModal();

    // TODO: Add your command handler code here

}

弹出这个对话框后,有程序基础的同志们应该就有点明白啦,对话框其实就是一个类而已,那么就可以处理很多操作啦。在对话框类中写各种函数完成复杂功能。

下面看看原理:

首先,我们看下增加了这样一个事件之后,程序里面多了那些代码:

1、 view的头文件里面多了一条函数声明:

public:

  afx_msg void OnShowdia();

2、 viewcpp文件里消息队列中多了一条:

 BEGIN_MESSAGE_MAP(CMFCAppView, CView)

     // 标准打印命令

     ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)

     ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)

     ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)

     ON_COMMAND(ID_SHOWDIA, &CMFCAppView::OnShowdia)//多出来的一条

END_MESSAGE_MAP()

这两条就完成了一个消息的添加,也就是事件监听的处理。消息循环得到ID_SHOWDIA的命令后,就会执行OnShowdia函数,实现监听事件。

4、工具条显示对话框

工具条显示原理同菜单一样,只是工具条按钮不能右键添加事件监听,通常情况下工具条就是将菜单中常用的功能拉出来,基于这个原理,我们就可以直接把工具条的ID设置成与其对应的菜单项的ID,就完成了工具条的作用。

当然,也可以自己在上述的两个地方添加消息循环来完成工具条按钮的功能。

对于如何添加工具条按钮,资源视图下,直接打开toolbar,双击工具条,就会出现工具条编辑界面啦。

选中工具条中空白的按钮,直接在视图中绘制就可以啦。修改其id时,在属性视图里面修改即可。

5、创建自己的工具条

     同创建对话框一样,资源视图下,右键添加。就可以添加一个工具条啦。根据功能修改掉工具条的ID,在添加几个按钮,就完成了一个工具条。下面主要介绍如何在程序中添加使用这个工具条。

     打开MainFrame.cpp,我们可以看到以下代码:

 

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("未能创建工具栏/n");

         return -1;      // 未能创建

     }

 

     if (!m_wndStatusBar.Create(this) ||

         !m_wndStatusBar.SetIndicators(indicators,

           sizeof(indicators)/sizeof(UINT)))

     {

         TRACE0("未能创建状态栏/n");

         return -1;      // 未能创建

     }

 

     // TODO: 如果不需要工具栏可停靠,则删除这三行

     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

     EnableDocking(CBRS_ALIGN_ANY);

     DockControlBar(&m_wndToolBar);

 

     return 0;

}

 

其实复制粘贴这里面的代码,在稍作修改就可以啦。

 

首先在头文件中声明一个CToolBar变量:

CToolBar    m_myToolBar;

然后重新写一遍OnCreate函数里面的一些代码,将对应的CToolBar变量名称替换掉就可以啦。

完成后的代码如下:

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("未能创建工具栏/n");

         return -1;      // 未能创建

     }

    //添加

     if (!m_myToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

         | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

         !m_myToolBar.LoadToolBar(IDR_TOOLBAR1))

     {

         TRACE0("未能创建工具栏/n");

         return -1;      // 未能创建

     }

     if (!m_wndStatusBar.Create(this) ||

         !m_wndStatusBar.SetIndicators(indicators,

           sizeof(indicators)/sizeof(UINT)))

     {

         TRACE0("未能创建状态栏/n");

         return -1;      // 未能创建

     }

     // TODO: 如果不需要工具栏可停靠,则删除这三行

     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

     m_myToolBar.EnableDocking(CBRS_ALIGN_ANY);

     EnableDocking(CBRS_ALIGN_ANY);

     DockControlBar(&m_wndToolBar);

     DockControlBar(&m_myToolBar);//添加

     return 0;

}

上述代码的原理,在此就不多说啦,一般的书上都有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值