二,自定义异常的抛出,即throw一个自定义异常.
函数代码列如下:
//ComboProp.h:interfacefortheCComboPropclass.
//
//////////////////////////////////////////////////////////////////////
#if!defined(AFX_COMBOPROP_H__B155C456_9EA6_42DB_87B9_30540D83B5D8__INCLUDED_)
#defineAFX_COMBOPROP_H__B155C456_9EA6_42DB_87B9_30540D83B5D8__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include"bcgpproplist.h"
classCSelItemException:publicCException//trow的异常类的定义
{
public:
CSelItemException(constint&SelIndex,constint&ItemCount)//修改构造函数,使catch时可以获取要报告的参数
{
this->m_IndextoSeled=SelIndex;
this->m_ItemCount=ItemCount;
}
CSelItemException(CSelItemException&m)//缺省拷贝构造函数,若没有这个函数,则需要使用throw&CSelItemException(SeledIndex,pCombo->GetCount());的方式
{
this->m_IndextoSeled=m.m_IndextoSeled;
this->m_ItemCount=m.m_ItemCount;
}
virtual~CSelItemException();
public:
intm_IndextoSeled;
intm_ItemCount;
};
classCComboProp:publicCBCGPProp
{
public:
CComboBox*CreateCombo(CWnd*pWndParent,CRectrect,intSeledIndex=-1,LPCTSTRItemString1=NULL, ...);
BOOLAddOption(intnSeledIndex=-1,LPCTSTRItemString1=’’,...);//向属性列表中增加下列选项
CComboProp(constCString&strGroupName,DWORD_PTRdwData=0,BOOLbIsValueList=FALSE)
:CBCGPProp(strGroupName,dwData,bIsValueList){}
CComboProp(constCString&strName,const_variant_t&varValue,LPCTSTRlpszDescr=NULL,
DWORD_PTRdwData=0,LPCTSTRlpszEditMask=NULL,LPCTSTRlpszEditTemplate=NULL,LPCTSTRlpszValidChars=NULL)
:CBCGPProp(strName,varValue,lpszDescr,dwData,lpszEditMask,lpszEditTemplate,lpszValidChars){}
virtual~CComboProp();
};
#endif//!defined(AFX_COMBOPROP_H__B155C456_9EA6_42DB_87B9_30540D83B5D8__INCLUDED_)
//ComboProp.cpp:implementationoftheCComboPropclass.
//
//////////////////////////////////////////////////////////////////////
#include"stdafx.h"
#include"GDFCheck.h"
#include"ComboProp.h"
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSelItemException::~CSelItemException()
{
}
CComboProp::~CComboProp()
{
} BOOLCComboProp::AddOption(intnSeledIndex,LPCTSTRItemString1,...)
{
LPCTSTRstrArg=NULL;
va_listargList;
va_start(argList,nSeledIndex);//取头个参数地址
_variant_tvtDefault;
intnCount=0;
for(strArg=va_arg(argList,LPCTSTR);strArg!=NULL;strArg=va_arg(argList,LPCTSTR))
{
CBCGPProp::AddOption(strArg,FALSE);
if(nSeledIndex==nCount++)
{
vtDefault.SetString(strArg);
}
}
va_end(argList);
if(nSeledIndex>=0)
{
if(nSeledIndex
}
else
{
throwCSelItemException(nSeledIndex,nCount);//抛出设定异常
}
}
returnTRUE;
}
CComboBox*CComboProp::CreateCombo(CWnd*pWndParent,CRectrect,
intSeledIndex,LPCTSTRItemString1,...)
{
CComboBox*pCombo=CBCGPProp::CreateCombo(pWndParent,rect);
intnArgCout=0;
LPCTSTRstrArg=NULL;
va_listargList;
va_start(argList,SeledIndex);//获取SeledIndex参数的地址
//va_startva_arg va_end是三个宏,内容参照mfc代码
for(strArg=va_arg(argList,LPCTSTR);//按LPCTSTR类型获取下一个参数的地址,考试,大提示提取参数值,这里的参数类型必须自己指定,Format是根据%s,%c等符号来判断的
strArg!=NULL;//判断参数是否0,即最后一个参数,所以这里约定最后一个参数必须传0,或’’;也可以自定义其他截止符
strArg=va_arg(argList,LPCTSTR))//获取下一个参数值
{
pCombo->AddString(strArg);
}
va_end(argList);//善后工作,体现coder品质的地方
if(SeledIndex>=0)
{
if(pCombo->GetCount()>SeledIndex)
{
if(pCombo->SetCurSel(SeledIndex)==CB_ERR)
{
throwCSelItemException(SeledIndex,pCombo->GetCount());//catch时将调用CSelItemException的拷贝构造函数,若缺少默认拷贝构造函数定义则编译无法通过,报cannotthrowCSelItemException
}
}
else
{
throw&CSelItemException(SeledIndex,pCombo->GetCount());//抛出设定异常
}
}
returnpCombo;
}
本文来自 280文秘网(https://www.it280.com),转载请保留网址和出处
【VC不定参数的传递和自定义异常的抛出】相关文章:
2025年外省高中学业水平合格性考试成绩转入江苏认定的通告公布03-23
Vb中控件的自动排列03-23
写未来的作文300字03-23
Our Mother Is the Same 我们的妈妈是一样的03-23
小学父爱的作文600字03-23
广西壮族自治区财政厅会计继续教育报名登录入口:https://czt.gxzf.gov.cn/kjgl/03-23
汪涵讲述小时候成长经历:鸡毛掸子的故事03-23
关于清明节的英语作文:清明节03-23
