在vc 技术内幕GDI一节中提到不能把:
CFont* pOldFont = pDC->SelectObject(m_pNewFont);
pOldFont保存到一个成员变量里。而应该把该指针转化为window的句柄。说这样才可以永
久保存
我不太明白为什么就不能保存指针? 我看了一下msdn 中的technical note #3里面提到Fromhandle函数返回一个临时对象,因
为临时性,所以不能用保存指针。我想在SelectObject 函数是不是也是返回一个临时对象
的指针呢?
还有这篇文章中提到这个临时对象是在OnIdle里调用临时对象的DeleteTempMap 来清除该
临时对象的。我想不明白,一个临时对象创建后,退出作用范围,不就自动删除了吗?怎么
非得到那时候才删除呢,最说退出作用范围,程序也就无法知道这个临时对象的存在与否
了,除非有一个管理临时对象的机制,且在堆中创建,每创建一个临时对象,就到这个管
理机构注册一下????(感觉没这个必要啊?)我实在想不明白!!!!!!!
CFont* pOldFont = pDC->SelectObject(m_pNewFont);
pOldFont保存到一个成员变量里。而应该把该指针转化为window的句柄。说这样才可以永
久保存
我不太明白为什么就不能保存指针? 我看了一下msdn 中的technical note #3里面提到Fromhandle函数返回一个临时对象,因
为临时性,所以不能用保存指针。我想在SelectObject 函数是不是也是返回一个临时对象
的指针呢?
还有这篇文章中提到这个临时对象是在OnIdle里调用临时对象的DeleteTempMap 来清除该
临时对象的。我想不明白,一个临时对象创建后,退出作用范围,不就自动删除了吗?怎么
非得到那时候才删除呢,最说退出作用范围,程序也就无法知道这个临时对象的存在与否
了,除非有一个管理临时对象的机制,且在堆中创建,每创建一个临时对象,就到这个管
理机构注册一下????(感觉没这个必要啊?)我实在想不明白!!!!!!!
如:
pDC->SelectObject(m_pNewFont1);
CFont* pOldFont = pDC->SelectObject(m_pNewFont);
此时, pOldFont = pNewFont1;
指针的值是一个 4 字节的整数,表示一个内存地址;要保存的显然是内存里面的值而非一个地址,所以应该把该指针转化为window的句柄