请问CPen成员变量如何读取HPEN句柄中的信息呢?

hw110 2003-08-20 09:03:45
我的测试代码如下,但是始终画笔是系统默认的画笔,黑色的单线,得不到我在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);
}
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hw110 2003-08-20
  • 打赏
  • 举报
回复
非常感谢!通过你的方法已经搞定,但是还是有不解,为什么msdn里面例子直接就是这样的呢?
CPen myPen;
myPen.CreateSolidPen( PS_COSMETIC, 1, RGB(255,255,0) );
HPEN hMyPen = (HPEN) myPen;
难道有问题?
databasesql 2003-08-20
  • 打赏
  • 举报
回复
当然了,问题就在这,因为CPen在函数结束的时候会释放资源的,你可以这样做:
DeleteObject(hGloPen);
hGloPen = (HPEN)m_Pen.Detach();
hw110 2003-08-20
  • 打赏
  • 举报
回复
我的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指针又不为空,真的好奇怪呀!
Anikan 2003-08-20
  • 打赏
  • 举报
回复
不好意思不小心敲回车.
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);
Anikan 2003-08-20
  • 打赏
  • 举报
回复
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);
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧