CClientDC dc(this);
CMapPen np;
CPen *op;
np.CreateMapPen(1,4,RGB(255,0,0));
op=dc.SelectObject(&(np.np));
                     ^^^^^--应该可以.
........
dc.SelectObject(op);

解决方案 »

  1.   

    operator HPEN () { return (HPEN)np; }
    operator CPen* () { return &np; }
    添加成为成员函数。并且,去掉你的public CPen定义,根本没有起到继承的目的。
      

  2.   

    to:pecker_z(啄木鸟)
    你说的其实和我用的一样。
    to:jy(树)
    对啊!那应该怎样写继承呢?
    另外,我能不能不用在类里定义成员变量np?CPen类定义好像就没用一个成员变量来储存所创建的CPen对象,我不知道他怎么样存储实例的。
    望点拨一二,多谢了。
      

  3.   


    如果需要,可以这样写:#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;
    }
    };
      

  4.   

    to jy(树,路) :#define MY_NULL   0
    #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?