[MFC] 动态按钮释放 [大三TJB_708]

基于VS2010MFC项目的单文档程序的动态按钮释放。包括动态按钮创建和动态按钮的释放。

所创建的项目名称为13Jan19Pro。

此文档主要是介绍释放MFC程序中的动态按钮控件空间。动态按钮是经new函数申请堆空间得来的,当我们不需要此段堆空间或程序结束时我们就要调用delete函数来释放相应的空间,以免内存泄露。


 

1、动态按钮创建及释放

1.1、设置动态按钮标识符、宏值、按钮名称

在解决方案资源管理器窗口中展开资源文件,双击13Jan19Pro.rc,在资源视图-13Jan19Pro窗口中展开String Table,双击String Table下的String Table编辑框。在弹出的13Jan19Pro.rc-String Table框中新添加动态按钮属性:

表格 1:添加动态按钮属性

ID

标题

IDC_MYBUT

101

双击!你想干嘛

IDC_DISAPPEAR

102

按钮消失

 

1.2、用消息触发动态按钮

1.2.1、添加消息映射宏及其对应函数

用“类向导”在CMy13Jan19ProView类(派生于CView类)中添加VM_LBUTTONDBLCLK消息映射宏。步骤为:项目-->类向导出现以下界面并对其进行设置如下。

其中OnLButtonDblClk为与VM_LBUTTONDBLCLK消息对应的函数,当程序在执行过程中出现VM_LBUTTONDBLCLK消息则程序自动调用OnLButtonDblClk函数执行。双击VM_LBUTTONDBLCLK对应函数就会生成,保存在类向导中的设置,回到CMy13Jan19ProView.cpp中编写OnLButtonDblClk函数。

图1
 

1.2.2、编写OnLButtonDblClk函数

//双击界面时会出现两个按钮
void CMy13Jan19ProView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	//CString 类对象m_Caption1, m_Caption2;
	CString m_Caption1, m_Caption2;

	//分别获取IDC_MYBUT,ê?IDC_DISAPPEAR标题
           m_Caption1.LoadStringW(IDC_MYBUT);
	m_Caption2.LoadStringW(IDC_DISAPPEAR);

	//为即将创建的动态按钮申请堆空间
	//若申请不成功则中断程序
	p_MyBut1	= new CButton();
	p_MyBut2	= new CButton();
	ASSERT_VALID(p_MyBut1);
	ASSERT_VALID(p_MyBut2);

	//创建IDC_MYBUT, IDC_DISAPPEAR	p_MyBut1->Create(m_Caption1, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,  Rect(10,10,200,50), this, IDC_MYBUT);
	p_MyBut2->Create(m_Caption2, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(50,50,200,80), this, IDC_DISAPPEAR);

	CView::OnLButtonDblClk(nFlags, point);

}

1.3、为动态按钮添加动态响应函数

为动态按钮添加响应函数需要手动添加,包括函数申明,消息映射宏添写,函数编写。

这里主要用IDC_DISAPPEAR控件来使出现的按钮消失(delete释放)。

 

1.3.1、声明自定义函数

声明一个函数正规的做法是到派生类的头文件中声明。13Jan19ProView.h文件:

// 生成的消息映射函数
protected:
	int Dyn_But_flag;
	CButton *p_MyBut1, *p_MyBut2;
	HWND hWnd;

	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	afx_msg void CMy13Jan19ProView::RespondClickOnDynamicBut();

          //自定义函数声明
	afx_msg void CMy13Jan19ProView::OnMyBut();
	DECLARE_MESSAGE_MAP()

1.3.2、添加消息映射宏

消息映射宏在类实现文件13Jan19ProView.cpp中添加:
BEGIN_MESSAGE_MAP(CMy13Jan19ProView, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMy13Jan19ProView::OnFilePrintPreview)
	ON_WM_CONTEXTMENU()
	ON_WM_LBUTTONDBLCLK()
	ON_BN_CLICKED(IDC_MYBUT, &CMy13Jan19ProView::RespondClickOnDynamicBut)
    
 //手动添加消息映射宏
	ON_BN_CLICKED(IDC_DISAPPEAR, &CMy13Jan19ProView::OnMyBut)
	ON_WM_PAINT()
END_MESSAGE_MAP()

1.3.3、编写自定义函数

//当点击IDC_DISAPPEAR控件时两个动态按钮消失(被释放)
void CMy13Jan19ProView::OnMyBut()
{
                  delete p_MyBut1;
		delete p_MyBut2;
}

2、执行结果


图2

窗口最初出现没有界面之上的两个按钮。当用鼠标左键双击中间空白界面时出现两个动态按钮,当点击“按钮消失”按钮时两个动态按钮消失。此操作可循环进行。

你可能感兴趣的:([MFC] 动态按钮释放 [大三TJB_708])