分享
 
 
 

ATL问题集-#13 ~ #14

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

/*此文是我将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还属于原作者——作者:黄森堂*/

#13 如何使我的控件对IE来说是安全的?

要使控件对IE来说是安全的话,则必需实现IObjectSafety接口,ATL提供了IObjectSafetyImpl包装类,以下代码是演示这个功能,加精是新增加的:

class ATL_NO_VTABLE CNoteCtl :

public CComObjectRootEx<CComSingleThreadModel>,

...

// Derive from IObjectSafety

public IObjectSafety

{

...

BEGIN_COM_MAP(CNoteCtl)

COM_INTERFACE_ENTRY(INoteCtl)

COM_INTERFACE_ENTRY(IDispatch)

...

// Add it to our interface map

COM_INTERFACE_ENTRY(IObjectSafety)

END_COM_MAP()

...

// IObjectSafety implementation

STDMETHODIMP GetInterfaceSafetyOptions( REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions )

{

ATLTRACE(_T("CNoteCtl::GetInterfaceSafetyOptions()\n"));

*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER |

INTERFACESAFE_FOR_UNTRUSTED_DATA;

*pdwEnabledOptions = *pdwSupportedOptions;

return S_OK;

}

STDMETHODIMP SetInterfaceSafetyOptions(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)

{

ATLTRACE(_T("CNoteCtl::SetInterfaceSafetyOptions\n"));

return S_OK;

}

...

};

#14 如何在控件中使用字体?

在ATL 2.x开始支持内置字体属性,首先,处理这个属性不像MFC那么简单;第二,你需要在你的控件的IDL文件中加入字体属性的声明(其实在VC6的ATL向导中支持这些属性了,你在向导中选上的话,向导自动会在idl文件中加入相关声明)

ATL并没有完全实现内置字体属性,它提供了内部成员变量指向IFontDisp接口,可是你仍然需要进行OLE字体的初始化,以下代码是演示:

在你的控件类的构造函数中加入以下代码:

CMyCtl()

{

static FONTDESC _fontDesc =

{ sizeof(FONTDESC), OLESTR("MS Sans Serif"),

FONTSIZE( 12 ), FW_BOLD,

ANSI_CHARSET, FALSE, FALSE, FALSE };

OleCreateFontIndirect( &_fontDesc,IID_IFontDisp,(void **)&m_pFont );

}

在你需要使用的地方使用以下代码,一般是在控件的OnDraw方法中,如下:

//取得字体

CComQIPtr<IFont, &IID_IFont> pFont( m_pFont );

if ( pFont )

{

HFONT hOldFont = 0;

HFONT hFont;

pFont->get_hFont( &hFont );

hOldFont = (HFONT) SelectObject( hdc, hFont );

// 使用它...

if ( hOldFont )

SelectObject( hdc, hOldFont );

}

一般在VC6的ATL向导中选择了Font字体属性的话,向导会在IDL文件中自动产生以下代码,没有的话手工加入以下声明(加粗部分):

#include <olectl.h>

import "oaidl.idl";

[

uuid(E63A22F1-9BD3-11D0-A6D7-0000837E3100),

version(1.0),

helpstring("NoteIt 1.0 Type Library")

]

library NOTEITLib

{

importlib("stdole32.tlb");

importlib("stdole2.tlb");

// Interface is now inside the library block

[

object,

uuid(E63A2306-9BD3-11D0-A6D7-0000837E3100),

dual,

helpstring("INoteCtl Interface"),

pointer_default(unique)

]

interface INoteCtl : IDispatch

{

...

[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);

...

};

...

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有