首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB 继承TWinControl用户自定义控件疑义

2013-12-11 
BCB 继承TWinControl用户自定义控件疑问我开发了一个继承于TWinControl控件,其中使用到了基类的Handle属性

BCB 继承TWinControl用户自定义控件疑问
我开发了一个继承于TWinControl控件,其中使用到了基类的Handle属性。
使用时,我直接拖控件的方式没有任何问题
当我通过 new的方式动态创建控件时,IDE提示我'has no parent window'的错误,
必须显示的执行 MyWinControl->Parent = this;才能正常工作

请问这个问题,是因为我哪里写法不对吗?因为BCB自带的控件就完全没有这个问题啊~~

另外我有其他的继承TComponent的控件内部也需要使用这个控件,
如果必须显式的对其父窗口赋值的话,这种应用场景就没法正确使用了~~


[解决办法]
可以用c++标准做法,不一定非要用rtti
用 if (dynamic_cast<TMyclass*>(Owner)) 来判断,如非NULL,Owner即是一个TMyclass

cb在rtti方面在2010版开始是非常强大的,rtti相关的功能可以自己利用智能提示看看class开头的这些函数,
有ClassName()、ClassInfo()、ClassParent()....具体俺F1看帮助。

如果利用rtti,可以这样做判断
if (Owner->ClassNameIs(__classid(TMyclass), "TMyclass"))
{
   // Owner 是个TMyclass
}
ClassNameIs() 第一个参数是一个元类型指针,第二个参数是你要判断的类型的名称字符串  
TMetaClass(称为元类,即类型的类型),可以通过__classid操作符获得,



 

热点排行