博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于CDialogBar的编程
阅读量:7097 次
发布时间:2019-06-28

本文共 3334 字,大约阅读时间需要 11 分钟。

        今天编程过程中,涉及到了CDialogBar的编程,在网上看了一些资料,虽然看明白了,但是写的不是很透明,如果对于一个初学者来说,肯定会头疼,下面,我在这里详细的介绍一下这方面的知识,以及怎样编程。

        在CDialogBar编程之前,我们首先要明确一点,CDialogBar是CControlBar派生出来的,而CControlBar又是从CWnd派生出来的,所以CDialogBar并不是从CDialog派生出来的,这点一定注意,它是从CWnd间接派生出来的!明确这一点之后,我们开始写一个CDialogBar的程序。在CDialogBar创建完成之后,我们看上去效果好像和一个CToolBar一样,因此呢,在显示过程中,也有类似CToolBar在窗口中的设置。下面是编程的操作步骤:

1、首先,我们新建一个工程,工程名字可以随便输入,在这里我们设置为MyDlgBar,进入下一步,选择“单文档应用程序”,然后直接点击完成即可。

2、我们既然要创建一个CDialogBar,那么我们首先在资源窗口中,插入一个对话框资源,然后我们打开资源向导,这时,向导会提示我们插入的对话框是一个新的资源,它要我们创建这个资源,我们直接点击确定,输入资源名称,这里我输入的是CNewDlgBar,在选择基类的时候呢,我们会发现,并没有我们想要的CDialogBar类,没关系,我们可以选择CDialog这个类,注意:并不是因为CDialog是CDialogBar的基类,而作出这样的选择!而是因为CDialogBar非常的类似dialog box(对话框),CDialogBar也是可以在里面添加控件的,因此我们选择CDialog这个类,选择之后是要进行必要的修改的。修改步骤如下:

        1)在CNewDlgBar的头文件中,在“class CNewDlgBar : public CDialog”这行代码中将“CDialog”更改为CDialogBar,也就是将我们新建的这个类的基类,改为CDialogBar作为基类。

        2)在CNewDlgBar的源文件中,在“CNewDlgBar::CNewDlgBar(CWnd* pParent /*=NULL*/)

: CDialogBar(CNewDlgBar::IDD, pParent)”中,我们将CDialogBar的参数全部删除,结果是“CNewDlgBar::CNewDlgBar(CWnd* pParent /*=NULL*/)
: CDialogBar()”,因为在CDialogBar的构造函数中,是没有任何参数的。

然后我们编译目前的工程,不会再有错误发生了。接下来,我们要创建这个CDialogBar,并且将它在我们的窗口中显示出来。

3、创建CDialogBar,我们是在Create这个虚函数中完成的。那么我们首先在CNewDlgBar这个类中,增加一个Create虚函数。我们知道,现在我们所做的修改,都是基于CDialog之上进行的,因为在创建的时候,我们是将CDialog作为基类创建的,因此,系统给我们增加的这个函数的参数都是针对CDialog类的,我们也要进行如下修改:

        1)在CNewDlgBar的头文件中,找到定义Create这个虚函数的地方,对参数进行修改,修改结果是:

virtual BOOL Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID);

        2)在CNewDlgBar源文件中,做同样的修改,修改结果是:BOOL CNewDlgBar::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID) ;

修改之后,我们就要在里面修改代码,去覆盖基类的Create函数。

4、添加代码后,结果是:

BOOL CNewDlgBar::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID) 

{
// TODO: Add your specialized code here and/or call the base class
BOOL bRes= CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID );
OnInitDialog();
return bRes;
//return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

5、细心的人,会看见,我在上面的代码中增加了一个消息处理函数:OnInitDialog();

这个函数是在窗口创建完成之后发送的,因此我们要对这个消息进行处理。步骤如下:

        1)在CNewDlgBar的头文件中,在

class CNewDlgBar : public CDialogBar

{

。。。。。。

// Implementation

protected:

// Generated message map functions

//{
{AFX_MSG(CNewDlgBar)
。。。。。。

//}}AFX_MSG

//在此处定义

afx_msg BOOL OnInitDialog ();

DECLARE_MESSAGE_MAP()

。。。。。。

};

中定义相应消息的函数原形。

        2)在CNewDlgBar的源文件中,定义消息影射,在

BEGIN_MESSAGE_MAP(CNewDlgBar, CDialogBar)

//{
{AFX_MSG_MAP(CNewDlgBar)
。。。。。。
//}}AFX_MSG_MAP

//在此处定义

ON_MESSAGE(WM_INITDIALOG, OnInitDialog)
END_MESSAGE_MAP()

中定义消息影射。接下来,我们就要编写消息相应代码。

6、也是在源文件中完成,结果如下:

BOOL CNewDlgBar::OnInitDialog()   

{
UpdateData(FALSE);//数据交换重点.....必须有使得数据可以进行交换
return TRUE;
}

7、万事俱备,只欠东风,我们只要在CMainFrame中,将其创建并且显示就可以了。这段代码,我们是放在CMainFrame的OnCreate函数中完成的,结果如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{
。。。。。。

if (!m_newdlgbar.Create(this, IDD_NEWDLGBAR, CBRS_LEFT | WS_VISIBLE | WS_CHILD | CBRS_GRIPPER, 

      IDD_NEWDLGBAR))
{
}
m_newdlgbar.SetBarStyle(m_wndToolBar.GetBarStyle() | 
      CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_newdlgbar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_newdlgbar);

。。。。。。

return 0;

}

     最后还有一步,也是很重要的,就是在资源窗口中,将我们新建的这个窗口的属性,改为child,这步也是很重要的,否则会出现致命的错误!其他的可以随自己意改,一般都选择None即可。

        至此我们便完成了CDialogBar的创建。我们可以在CDialogBar上,添加一个列表框,和编辑栏,或者其它的空间,并对其进行响应。这里我就不多说了。下面这个图片,是我编写完成之后的效果。

转载于:https://www.cnblogs.com/mysunnyday/archive/2012/02/07/2341867.html

你可能感兴趣的文章
row_number()over函数的使用(转)
查看>>
怎样在Delphi中屏蔽Flash控件的右键弹出菜单
查看>>
[BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
查看>>
DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)
查看>>
Html.ActionLink 几种重载方式说明及例子
查看>>
[转]spinlock 理解
查看>>
今天看腾讯在北航的演讲《1亿在线背后的技术挑战》想到的关于MD5算法。
查看>>
SQL高级---SQL Alias(别名)
查看>>
Android开发历程_5(Activity相对布局)
查看>>
OSI
查看>>
方法论、方法论——程序员的阿喀琉斯之踵 (转载)
查看>>
对架构师而言,什么最重要?
查看>>
ecshop foreach控制文章显示条数
查看>>
WPF Button添加图片
查看>>
TabHost的两种实现形式
查看>>
Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type
查看>>
半DDD架构 1
查看>>
数据库 收缩
查看>>
uva 10913 Walking on a Grid
查看>>
Swing中如何让一个TextField获得焦点
查看>>