有难度的COM问题:关于Font的问题?

vcmfc 2000-12-27 03:12:00
我在创建ActiveX中使用其默认字体属性,在生成控件后,在IDL中如下东东:
[propputref, id(DISPID_FONT)]
HRESULT Font([in]IFontDisp* pFont);
[propput, id(DISPID_FONT)]
HRESULT Font([in]IFontDisp* pFont);
[propget, id(DISPID_FONT)]
HRESULT Font([out, retval]IFontDisp** ppFont);
在CLabel.h中有如下东东:
CComPtr<IFontDisp> m_pFont;
在你的提醒下,我在OnDraw中用如下代码:
IFont *pFont;
HFONT hFont=NULL;
HRESULT hr;
if(m_pFont)
hr=m_pFont->QueryInterface(IID_IFont,(void**)&pFont);
else
hr=GetAmbientFont(&pFont);
if(SUCCEEDED(hr))
{
pFont->get_hFont(&hFont);
::SelectObject(di.hdcDraw,hFont);
}
结果Label控件在创建时没有问题,可在VB的对象属性页中对Font属性的改变后,出现错误:无效的属性值(Invlid Property Value),我是哪里工作没有做呀!,问题在哪里呀!,如果用自已的属性页却正常,why?大大哥,我真的很急呀!经理每天都问我呢?,再不就...?

...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmfc 2000-12-29
  • 打赏
  • 举报
回复
找到解决方案了,简单之极,妈了,可困惑了N天,把它从上面移到下面就可了,可气的是我看了KnowLedge却看了N个小时,该死的Micorosoft,至于警告,得动用系统头文件,其它就加入一个关键字,dual就OK了.
vcmfc 2000-12-28
  • 打赏
  • 举报
回复
大哥能请细一点吗?
vcmfc 2000-12-28
  • 打赏
  • 举报
回复
陆大哥,那该如何解决这个字体问题?
luxyi 2000-12-28
  • 打赏
  • 举报
回复
在VB的Object Browser(或Viewer?记不清了)中可以看到,VB的FORM中用的字体对象是stdFont,而VC中用的是IFontDisp,虽然这两个在VB中都是Object,且都在一个Type Library中,但是通过#import那个.tlb文件得到的两个文件来看,stdFont是一个coclass,而IFontDisp是一个interface。说不定VC中的这个FONT属性真的和VB不兼容。
luxyi 2000-12-28
  • 打赏
  • 举报
回复
在VB的Object Browser(或Viewer?记不清了)中可以看到,VB的FORM中用的字体对象是stdFont,而VC中用的是IFontDisp,虽然这两个在VB中都是Object,且都在一个Type Library中,但是通过#import那个.tlb文件得到的两个文件来看,stdFont是一个coclass,而IFontDisp是一个interface。说不定VC中的这个FONT属性真的和VB不兼容。
iamfool 2000-12-27
  • 打赏
  • 举报
回复
你在VC中用一下,看看行不行,要是不行,

就可能要派遣接口的说,
因为VB这破玩意不支持指针,MS为它也不知操了多少心,加这个规定,加那个协议

另外Font 用后可能真的要FREE一下,否则最多也就是系统字体变一下子,
vcmfc 2000-12-27
  • 打赏
  • 举报
回复
现在不是取得HFONT的问题,而是该属性是ATL中插入Active X中的默认属性,在VB的属性页中进行赋值时会产生错误:无效的属性值(Invlid Property Value),如何去掉这个错误?
xubin_sh 2000-12-27
  • 打赏
  • 举报
回复
返回的都是IFont**,而你用HFONT去接受它,就......
我没试过
pFont->get_hFont(&hFont);
pFont->AddRefHfont(hFont);
并且将hFont记为成员变量,当有新的值的时候用ReleaseHfont释放他
vcmfc 2000-12-27
  • 打赏
  • 举报
回复
加上pFont->Release()也还是这样呀!,高手呀!救命.....
随风bj 2000-12-27
  • 打赏
  • 举报
回复
猜:不知道是不是应该在OnDraw的最后把接口释放(release),:0

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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