MFC中return和break用法示例

直接在 VC6.0 里新建 MFC 工程就能运行的完整程序,包含按钮点击界面,清晰区分 break(跳出循环 /switch)和 return(退出函数)的用法。

打开 VC6.0 → File → New → Projects → MFC AppWizard(exe)

工程名:TestReturnBreak → 选择 Dialog based(基于对话框)→ 一路 Finish

对话框上放 两个按钮:

按钮 1:break 测试 → ID:IDC_BUTTON_BREAK

按钮 2:return 测试 → ID:IDC_BUTTON_RETURN

  1. 点击【break 测试】按钮循环执行到 i=3 → 弹出 break 提示
    循环立刻停止
    循环后面的代码继续执行,弹出第二句提示
    结论:break 只跳出循环 /switch,不结束函数
  2. 点击【return 测试】按钮
    弹出 return 提示
    函数直接结束
    后面的提示框永远不会弹出
    结论:return 直接退出整个函数

break

只能用在:for/while 循环、switch 语句

作用:跳出当前一层循环 /switch,函数继续执行

return

用在函数里(MFC 里常用在按钮点击函数)

作用:直接结束整个函数,后面代码全都不执行

TestReturnBreakDlg.h

cpp 复制代码
#if !defined(AFX_TESTRETURNBREAKDLG_H__INCLUDED_)
#define AFX_TESTRETURNBREAKDLG_H__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg dialog

class CTestReturnBreakDlg : public CDialog
{
// Construction
public:
	CTestReturnBreakDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CTestReturnBreakDlg)
	enum { IDD = IDD_TESTRETURNBREAK_DIALOG };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CTestReturnBreakDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	virtual BOOL OnInitDialog();
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CTestReturnBreakDlg)
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnButtonBreak();
	afx_msg void OnButtonReturn();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

#endif // !defined(AFX_TESTRETURNBREAKDLG_H__INCLUDED_)

TestReturnBreakDlg.cpp

cpp 复制代码
// TestReturnBreakDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TestReturnBreak.h"
#include "TestReturnBreakDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg dialog

CTestReturnBreakDlg::CTestReturnBreakDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestReturnBreakDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestReturnBreakDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CTestReturnBreakDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_BREAK, OnButtonBreak)
	ON_BN_CLICKED(IDC_BUTTON_RETURN, OnButtonReturn)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestReturnBreakDlg message handlers

BOOL CTestReturnBreakDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	return TRUE;
}

void CTestReturnBreakDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CTestReturnBreakDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this);
		SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);

		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CTestReturnBreakDlg::OnQueryDragIcon()
{
	return (HCURSOR)m_hIcon;
}

// break 按钮
void CTestReturnBreakDlg::OnButtonBreak() 
{
	for(int i=1; i<=5; i++)
	{
		if(i == 3)
		{
			MessageBox("循环到 i=3,break 跳出循环", "演示", MB_OK);
			break;
		}
	}
	MessageBox("break 结束,循环外代码继续执行", "结果", MB_OK);
}

// return 按钮
void CTestReturnBreakDlg::OnButtonReturn() 
{
	MessageBox("执行 return,直接退出函数", "演示", MB_OK);
	return;
	
	MessageBox("这行永远不会执行", "结果", MB_OK);
}


相关推荐
2401_841495643 小时前
Linux C++ TCP 服务端经典的监听骨架
linux·网络·c++·网络编程·ip·tcp·服务端
春栀怡铃声3 小时前
【C++修仙录02】筑基篇:类和对象(中)
c++
楼田莉子3 小时前
同步/异步日志系统:日志器管理器模块\全局接口\性能测试
linux·服务器·开发语言·c++·后端·设计模式
故事和你913 小时前
洛谷-数据结构-1-3-集合3
数据结构·c++·算法·leetcode·贪心算法·动态规划·图论
春栀怡铃声3 小时前
【C++修仙录02】筑基篇:类和对象(上)
开发语言·c++·算法
ulias2123 小时前
leetcode热题 - 3
c++·算法·leetcode·职场和发展
大彼方..4 小时前
深入学习cpp初阶模板
开发语言·c++·学习
老四啊laosi4 小时前
[C++进阶] 25. C++11新特性(一)
c++·c++11·右值
零号全栈寒江独钓4 小时前
基于c/c++实现linux/windows跨平台ntp时间戳服务器
linux·c语言·c++·windows