首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C+中给控件设置标签的方法

在C++中使用CreateWindow函数创建出的控件,例如列表框(listbox)、编辑框(edit)等,想让其被屏幕阅读器朗读其标签,我们可以实现IAccessible接口,具体步骤如下:

一、实现IAccessible

我们首先需要定义一个类,让其继承于IAccessible,在IAccessible中有很多方法,例如get_accName、get_accChild、get_accRole等,并非所有方法我们都需要实现,不实现的方法我们可以直接在方法中返回E_NOTIMPL即可。

我们要给控件添加标签,就要实现get_accName ,它的声明如下:

IFACEMETHODIMP get_accName(VARIANT varChild, BSTR * pszName);

参数一共就两个,我们首先来说varChild参数。

varChild中有一个lVal属性,此属性当varChild.vt等于VT_I4时有效,此属性的含义为要获取标签的控件ID。

lVal等于CHILDID_SELF时,表示要获取控件本身的标签,而等于其它值,则表示要获取控件中的子控件标签,例如要获取列表框中某一项的标签。

而第二个参数pszName,是用来保存标签名的缓冲区,我们可以直接使用如下代码给它赋值:

*pszName = SysAllocString(L"测试标签");

最后我们需返回S_OK表示调用成功。

二、给屏幕阅读器返回IAccessible

要想让屏幕阅读器调用我们自己实现的IAccessible,我们需要处理控件的WM_GETOBJECT消息。

在WM_GETOBJECT消息中使用LresultFromObject函数,将我们定义的IAccessible返回给屏幕阅读器,具体代码如下:

LresultFromObject(IID_IAccessible, wParam,static_cast(iAccessible));

这样当屏幕阅读器浏览到此控件的时候,就会调用我们自己实现的IAccessible,并调用get_accName方法,获取出我们定义的控件标签,并朗读出来。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200713A0NG8Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券