直接在 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
- 点击【break 测试】按钮循环执行到 i=3 → 弹出 break 提示
循环立刻停止
循环后面的代码继续执行,弹出第二句提示
结论:break 只跳出循环 /switch,不结束函数 - 点击【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);
}

