
第一步:添加一个按钮
1、首先在**View.h中定义一个按钮标识
#define ID_BUTTON 100
2、 其次给C**View类添加一个成员变量
CButton m_myButton //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型
3、然后创建按钮实例
m_myButton.Create(_T("示例按钮"), //按钮的caption属性,按钮的显示
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN。
CRect(20,320,50,340), //这个参数指出按钮在视图中的位置和按钮的大小。
this, //这个指针指向按钮这个窗体的父窗体
ID_BUTTON) //这是刚才为按钮定义的常量,按钮的控制ID
4、然后调用函数m_MyButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_MyButton.ShowWindow(SW_SHOW)显示出按钮。
说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。
int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1
m_MyButton.Create(_T("示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON,
CRect(20,320,50,340), this, ID_BUTTON)
m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE)) //给按钮加载一个图标
m_MyButton.ShowWindow(SW_HIDE)
return 0
}
第二步:消息函数
此时的按钮是不能响应任何消息的。下面我们手动添加按钮的消息。
1、声明函数原型
在C**View类的声明中声明一个protected类型的函数
//{{AFX_MSG(CSoftView)
afx_msg void OnMyButton()
//}}AFX_MSG
通常的做法,也是VC6.0向导的做法,会将消息处理函数声明在//{{AFX_MSG(CSoftView)~~~ //}}AFX_MSG标记中,当然,在VS.NET 2003中,我们将看不到这个标记。真正起作用的是afx_msg,它表明随后的函数是一个消息处理函数。
2、函数的实现
下面实现函数,显然,这个函数也是C**View类的一个成员函数,所以在**View.cpp中实现
void C**View::OnMyButton()
{
MessageBox("你点击了我")
}
3、如果这个时候你就运行程序的话,按钮依然不会响应任何事件。因为事件的产生的消息是交给视图的,所以我们需要把消息从视图传给按钮,实现起来很简单,在**View.cpp中找到如下的标记:
BEGIN_MESSAGE_MAP(C**View, CView)
END_MESSAGE_MAP()
在这个标记中写入如下代码:ON_BN_CLICKED(ID_BUTTON, OnMybutton)
这句代码是说,让ID_BUTTON所指的对象响应单击(ON_BN_CLICKED)事件,事件的处理函数是OnMybutton。这是MFC的消息映射机制。对于这个机制,在此不多说,待后续。
到此,一个可以响应单击事件的按钮就创建好了。如果要响应其他事件,可以按照这个方式创建,只需要改动这个过程中的第3步,将ON_BN_CLICKED改成希望响应的消息类型就可以了。
推荐个学习交流群:8721441o71、 构造CToolBar类型的对象 CToolBar tool
2、 调用CreateEx()函数 tool.CreateEx(…)
3、 在资源编辑器中新建一个工具栏资源,假定ID为IDT_MYTOOL
4、 调用CToolBar的函数LoadToolBar(IDT_MYTOOL)
5、 (可选)如果想让工具条可以停靠,那么可以调用tool.EnableDocking(TRUE)
此后还必须调用父窗口的EnableDocking(TRUE)意思是父窗口可以被停靠。
6、 (可选)如果希望工具条可以隐藏和显示,需要调用ShowControlBar(CControlBar*
pcontrol)
至此,工具栏就添加完成了。
接下来我们希望让工具栏中的按钮可以在我们鼠标经过时显示提示信息,如图:
实现这个功能需要做以下工作:
1、 在cpp文件的OnInitDialog()中添加:tool.EnableToolTips(TRUE)或者在CreateEx()函数中设置CBRS_TOOLTIPS标识。
在头文件中添加
BOOL OnToolTipsNotify(UINT id,NMHDR * pNMHDR,LRESULT* pResult)
2、 在.Cpp文件添加如下红色代码:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipsNotify) //声明
工具栏提示 通知消息 ( 必须手动添加)
END_MESSAGE_MAP()
3、定义如下函数:
BOOLCMainFrame::OnToolTipsNotify(UINT id, NMHDR* pNMHDR,LRESULT* pResult)
{
TOOLTIPTEXT* pT =(TOOLTIPTEXT*)pNMHDR //将pNMHDR转换成TOOLTIPTEXT指针类型数据
UINTnID =pNMHDR->idFrom //获取工具条上按钮的ID
if(nID== IDC_XXX) //如果nID是希望获取的ID,那么就设置相应提示信息到TOOLTIPTEXT结构体的lpszText中。
{
pT->lpszText = "显示文字"
}
return FALSE
}
要在view中添加按钮,就只能动态创建了,先new一个CButton对象,然后调用成员Create创建这个按钮。Create中有一个参数ID,你可以在消息映射中添加ON_COMMAND(ID, func) 来相应按钮的单机消息。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)