MFC文档添加多个按钮(及响应函数)

1 篇文章 0 订阅

本文介绍如何在MFC文档工程中添加多个按钮

样例中添加了两个按钮,如果有需要,可以使用数组来动态添加,参见 CSDN论坛某贴7L的回答。

1.添加ID

在Resource.h文件中添加按钮的ID,编号不与之前重复就可以,这里我添加了两个按钮。
#define IDB_BTN_NTRANS 307//旋转、缩放变换的按钮
#define IDB_BTN_SHEAR 308//错切的按钮

别忘了保存。

2.在view中添加成员变量

在项目中的View文件添加按钮变量,比如我的工程是ShapeTransform,我就在ShapeTransformView.h中添加。
private:
	CButton* btn_transform;//缩放、旋转的变换
	CButton* btn_shear;//斜切的按钮

3.添加OnCreate()函数

类视图中给view添加onCreate函数,头文件中有了:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
在cpp文件中编辑函数,将动态按钮生成并添加到屏幕上:

int CShapeTransformView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码

	btn_transform = new CButton;//一定要通过new CButton的形式来创建,否则不会显示
	btn_transform->Create( _T("自由变换"), WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(20,20,100,60),this, IDB_BTN_NTRANS);
       //上一行,第一个参数为按钮字样,CRect表示按钮的位置和大小,最后一个参数为第一步添加的ID名称
	btn_transform->ShowWindow(SW_SHOWNORMAL);

	
	btn_shear = new CButton;
	btn_shear->Create(_T("斜切"), WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(220,20,300,60),this, IDB_BTN_SHEAR);
	btn_shear->ShowWindow(SW_SHOWNORMAL);

	return 0;
}



接下来添加响应函数。

4.添加成员函数

在view.h文件中添加函数:
protected: // 仅从序列化创建
	CShapeTransformView();
	DECLARE_DYNCREATE(CShapeTransformView)
	//edit here
	afx_msg void OnBtnNTransformDown();
	afx_msg void OnBtnShearDown();

5.将按钮与响应函数对应

在view.cpp文件的开头BEGIN_MESSAGE_MAP(CShapeTransformView, CView)和END_MESSAGE_MAP()之间添加语句,将按钮ID和响应函数对应起来:

	ON_COMMAND(IDB_BTN_NTRANS, OnBtnNTransformDown)
	ON_COMMAND(IDB_BTN_SHEAR,OnBtnShearDown)


6.编辑响应函数

这里自由发挥,比如先来个提示框:
void CShapeTransformView::OnBtnNTransformDown(){
	MessageBox(_T("点击了按钮!"));

}
void CShapeTransformView::OnBtnShearDown(){

	MessageBox(_T("错切变换!"));
}


OK,运行以下试试看吧。
没想到简单的两个按钮折腾了1个小时……
这实验还怎么继续做啊(掀桌)

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MFC文档编程中,可以通过以下步骤来使用一个按钮打开一个子窗口: 1. 首先,在主窗口类(一般是CMainFrame)的头文件中添加一个成员变量,用于保存子窗口对象的指针。例如,声明一个成员变量CChildFrame* m_pChildFrame。 2. 在主窗口类的初始化函数OnInitInstance()中创建子窗口对象。可以使用CreateNewWindow()函数来创建子窗口。例如,m_pChildFrame = (CChildFrame*)RUNTIME_CLASS(CChildFrame)->CreateObject(); 3. 在主窗口类的消息映射中添加一个响应按钮点击事件的函数。例如,添加一个响应按钮点击事件的函数OnOpenChildWindow()。 4. 在响应按钮点击事件的函数OnOpenChildWindow()中,使用m_pChildFrame->ActivateFrame()来激活并显示子窗口。例如, void CMainFrame::OnOpenChildWindow() { if (m_pChildFrame != nullptr) { m_pChildFrame->ActivateFrame(); } } 5. 在主窗口的视图类(一般是CView或者CMDIChildWnd)中创建一个按钮对象。可以使用Create()函数创建按钮,并设置位置、样式和文字等属性。例如, BOOL CMyView::CreateButton() { CRect rectButton(10, 10, 110, 40); m_btnOpenChild.Create(_T("打开子窗口"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rectButton, this, IDC_OPEN_CHILD_BUTTON); return TRUE; } 6. 在主窗口的视图类中添加一个响应按钮点击事件的消息映射。例如, ON_BN_CLICKED(IDC_OPEN_CHILD_BUTTON, CMyView::OnOpenChildWindow) 7. 在响应按钮点击事件的函数OnOpenChildWindow()中,调用主窗口类的函数来打开子窗口。例如, void CMyView::OnOpenChildWindow() { CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); pMainFrame->OnOpenChildWindow(); } 通过以上步骤,就可以在MFC文档编程中使用一个按钮来打开一个子窗口了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值