2011-11-26 75 views
0

无论将在C++ builder中创建的组件将被分配TComponentName。 例如,当我创建一个表单并为其分配MyWidget时,它将继承TForm 的类获取class TMyWidget : TForm{}表单。使用spy ++类似的检查器,你可以看到你的应用程序的注册类名称。名称&注册您的类与所需的名称而不是前缀T

关于这个问题我的问题如下。

  • 是否有可能,然后如何创建我们的表单,组件 与我们所需的名称(不包括前缀T)?

我这样做了,我创建了VCL Forms App并保存了它。然后用我自己想要的类名取代TForm1,比如我的例子WidgetCl0x01在.h,.dfm,__classid()arg中的项目源文件中,但是存在编译和链接问题!

向我展示如何通过改变VCL源代码来实现这个目标!

回答

1

您可以重写虚CreateParams()方法来改变分配到被分配给TForm窗口HWND类名称,如:

void __fastcall TMyWidget::CreateParams(TCreateParams &Params) 
{ 
    TForm::CreateParams(Params) 
    StrLCopy(Params.WinClassName, _D("WidgetCl0x01"), (sizeof(Params.WinClassName)/sizeof(Char)) - 1); 
} 

使用Name属性Object Inspector中更改类在您的代码中,TForm类本身的名称,请勿尝试通过名称进行调整。只要知道它总是以T为前缀,那么除非您禁用TForm的DFM并手动创建代码中的所有内容,否则无法避免这种情况,那么类名称无关紧要。

+0

我高兴地感谢您的帮助!我同意你的看法,只有在这里重写作品,这是一个很棒的OOP特性,可以帮助我们提供我们自己的具体实现。 –

+0

其他控件是否使用虚函数CreateParams以相同的方式覆盖?(例如TButton,...) –

+0

所有'TWinControl'派生类都使用'CreateParams()'方法。总是首先调用基类'CreateParams()'来建立默认值,然后根据需要自定义'TCreateParams'。 –

相关问题