我的测试代码如下,但是始终画笔是系统默认的画笔,黑色的单线,得不到我在HPEN里面设置的颜色值不知道哪里错了,请指正
CPen m_Pen;
m_Pen.CreatePen(PS_COSMETIC,5,RGB(130, 120, 120));
hGloPen = (HPEN)m_Pen;
CPen* pPen ;
CPen* ppPen = pPen->FromHandle(hGloPen);
CPen* oldPen;
oldPen = m_pCurDC->SelectObject(ppPen);
m_pCurDC->MoveTo(m_ptOld);
m_pCurDC->LineTo(point);
m_ptOld = point;
if(hGloPen != NULL)
{
m_pCurDC->SelectObject(oldPen);
}

解决方案 »

  1.   

    CPen m_Pen;
    m_Pen.CreatePen(PS_COSMETIC,5,RGB(130, 120, 120));
    hGloPen = (HPEN)m_Pen;
    CPen* pPen ;
    CPen* ppPen = pPen->FromHandle(hGloPen);
    CPen* oldPen;
    oldPen = m_pCurDC->SelectObject(ppPen);
    m_pCurDC->MoveTo(m_ptOld);
    m_pCurDC->LineTo(point);
    m_ptOld = point;
    if(hGloPen != NULL)
    {
    m_pCurDC->SelectObject(oldPen);
    }
      

  2.   

    不好意思不小心敲回车.
    CPen m_Pen;
    m_Pen.CreatePen(PS_COSMETIC,5,RGB(130, 120, 120));
    CPen *oldPen;
    oldPen = m_pCurDC->SelectObject(m_Pen);
    m_pCurDC->MoveTo(m_ptOld);
    m_pCurDC->LineTo(point);
    m_ptOld = point;
    m_pCurDC->SelectObject(oldPen);LOGPEN logpen;
    读取HPEN的信息m_Pen.GetObject(sizeof(LOGPEN),&logpen);
      

  3.   

    我的HPEN定义的是全局变量,我现在遇到很怪的事情,同一函数体内如果对HPEN赋值然后再读出完全可以选取正确的画笔,如
    CPen m_Pen;
    m_Pen.CreatePen(PS_COSMETIC,5,RGB(130, 220, 220));
    hGloPen = (HPEN)m_Pen;
    CPen* pPen ;//= new CPen(PS_COSMETIC,5,RGB(230, 120, 120));
             CPen::FromHandle(hGloPen);
    CPen* ppPen = pPen->FromHandle(hGloPen);
    CPen* oldPen;
    if(ppPen != NULL)
    {
    oldPen = m_pCurDC->SelectObject(ppPen);
    }
    else
    {
    oldPen = m_pCurDC->SelectObject(&m_Pen);
    }

    m_pCurDC->MoveTo(m_ptOld);
    m_pCurDC->LineTo(point);
    m_ptOld = point;
    m_pCurDC->SelectObject(oldPen);
    但是如果一旦我把HPEN的赋值放到其他函数中,系统选取的画笔就是默认画笔,但是ppPen指针又不为空,真的好奇怪呀!
      

  4.   

    当然了,问题就在这,因为CPen在函数结束的时候会释放资源的,你可以这样做:
    DeleteObject(hGloPen);
    hGloPen = (HPEN)m_Pen.Detach();
      

  5.   

    非常感谢!通过你的方法已经搞定,但是还是有不解,为什么msdn里面例子直接就是这样的呢?
    CPen myPen;
    myPen.CreateSolidPen( PS_COSMETIC, 1, RGB(255,255,0) );
    HPEN hMyPen = (HPEN) myPen;
    难道有问题?