CClientDC dc(this);
CMapPen np;
CPen *op;
np.CreateMapPen(1,4,RGB(255,0,0));
op=dc.SelectObject(&(np.np));
^^^^^--应该可以.
........
dc.SelectObject(op);
CMapPen np;
CPen *op;
np.CreateMapPen(1,4,RGB(255,0,0));
op=dc.SelectObject(&(np.np));
^^^^^--应该可以.
........
dc.SelectObject(op);
operator CPen* () { return &np; }
添加成为成员函数。并且,去掉你的public CPen定义,根本没有起到继承的目的。
你说的其实和我用的一样。
to:jy(树)
对啊!那应该怎样写继承呢?
另外,我能不能不用在类里定义成员变量np?CPen类定义好像就没用一个成员变量来储存所创建的CPen对象,我不知道他怎么样存储实例的。
望点拨一二,多谢了。
如果需要,可以这样写:#define MY_NULL 0
#define MY_SOLID 1class CMapPen : public CPen {
BOOL m_bStock;
public:
CMapPen(): m_bStock(FALSE) {
}
virtual ~CMapPen(){
if(m_bStock){
//nothing to do now
}
}
BOOL CreateMapPen(long pStyle, long pWidth, long pColor){
switch (pStyle){
case MY_NULL:
m_bStock = TRUE;
return CreateStockObject(NULL_PEN);
//NOTICE:
// this->GetSafeHandle() is that HPEN handle
// (HPEN)(*this) is that HPEN handle case MY_SOLID:
m_bStock = FALSE;
return CreatePen(PS_SOLID, pWidth, pColor);
//NOTICE:
// this->GetSafeHandle() is that HPEN handle
// (HPEN)(*this) is that HPEN handle
}
return FALSE;
}
};
#define MY_SOLID 1
#define MY_2_1_2_2 2BOOL CMapPen::CreateMapPen(long pStyle ,long pWidth ,long pColor)
{
DWORD penType, penStyle, endCap, Join;
DWORD useWidth;
DWORD CustomStyleLength ;
long i;
LOGBRUSH BrushInfo;
bool Createdorno;
DWORD CustomStyle[16];
EXTLOGPEN Ep;switch (pStyle)
{
case MY_NULL:
return CreateStockObject(NULL_PEN);
break;
case MY_SOLID:
return CreatePen(PS_SOLID, pWidth, pColor);
break;
}penStyle = PS_SOLID;
penType = PS_GEOMETRIC;
endCap = PS_ENDCAP_ROUND ;
useWidth =(DWORD) pWidth;
Join = PS_JOIN_ROUND;
BrushInfo.lbHatch = HS_VERTICAL;
BrushInfo.lbStyle = BS_SOLID;
BrushInfo.lbColor = pColor;
penStyle = PS_USERSTYLE;switch (pStyle)
{
case MY_2_1_2_2:
CustomStyleLength = 2;
CustomStyle[0] = 1 ;
CustomStyle[1] = 2 ;
break;
}
this->FromHandle(::ExtCreatePen(penType|penStyle|endCap|Join,
useWidth, &BrushInfo, CustomStyleLength, CustomStyle));
}用pStyle=0或1可以正确返回,2就不行,不知道为什么?
另:可否告知你的em?