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操作符获得,