Borland C+中的窗口子类化+;建设者 我们试图将一个C++代码写在MFC中,它使用CWND子类窗口方法,进入Borland C++ Builder代码。有人知道如何进行子类化(使用TForm对象的子类)吗?我们完全被卡住了。任何指点都将不胜感激!蒂亚

Borland C+中的窗口子类化+;建设者 我们试图将一个C++代码写在MFC中,它使用CWND子类窗口方法,进入Borland C++ Builder代码。有人知道如何进行子类化(使用TForm对象的子类)吗?我们完全被卡住了。任何指点都将不胜感激!蒂亚,c++,subclass,c++builder,C++,Subclass,C++builder,具体内容: 我们有一个Borland C++中的继承基类,它继承了TForm,用于提供从它继承的所有形式的某种外观和感觉(例如它处理WMJNCFrand和WMnnQuestTeSavy)。 现在,我们想用这段代码为用其他语言(确切地说是MSVC++/MFC和C#)编写的表单提供相同的外观 我们认为使用windows子类将是一个好主意,而不是重写所有代码。然后我们可以把所有现有的和测试过的代码塞进一个DLL,然后用一个hWnd调用它,窗口将自动获得新的外观和感觉 P>确切地说为什么这是不可能的,

具体内容:

我们有一个Borland C++中的继承基类,它继承了TForm,用于提供从它继承的所有形式的某种外观和感觉(例如它处理WMJNCFrand和WMnnQuestTeSavy)。 现在,我们想用这段代码为用其他语言(确切地说是MSVC++/MFC和C#)编写的表单提供相同的外观

我们认为使用windows子类将是一个好主意,而不是重写所有代码。然后我们可以把所有现有的和测试过的代码塞进一个DLL,然后用一个hWnd调用它,窗口将自动获得新的外观和感觉

<> P>确切地说为什么这是不可能的,我真的不应该说——我自己不在Borland C++中编码。我在MFC中写了一个存根,只需几分钟就可以展示Borland C++开发人员想要的东西,他们花了好几天时间来模仿MFC CWND::子类窗口方法,但没有成功。
据我所知,问题在于,当您执行“new TForm()”时,在您有机会停止之前,会自动创建一个新窗口。因此,替换WindowProc是可行的,但是屏幕上有一个不需要的TForm窗口在浮动,没有任何用处

我想你指的是VCL。您可以将TControl对象的WindowProc属性设置为您自己的窗口过程或其他控件的WindowProc

编辑:根据更多细节提供更多答案

要防止
new TForm
创建一个在屏幕上无效浮动的窗口,只需将其Visible属性设置为false。或者,您可以覆盖CreateParams以从窗口中删除WS_VISIBLE样式:

void __fastcall TBlahForm::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params);
    Params.Style&=~WS_VISIBLE;
}
//---------------------------------------------------------------------------
仍然会有一个不可见的窗口被创建,但正如我对用例的理解,这应该不是什么大问题

重写
TCustomForm::CreateWnd
可能是解决同一问题的另一种方法

我的另一个建议是将代码从BCB移植到VC++。如果它在
WM\u NCPAINT
WM\u NCHITTEST
上做了大量的乱七八糟的事情,那么它听起来不太可能有很多VCL特定的东西在里面——它可能只是在直接敲打Win32 API?如果那里没有VCL,那么用VC++编译应该可以神奇地工作

无论如何,这几乎肯定是可能的。我有一个用BCB5(它比WinXP早)构建的应用程序,通过巧妙地使用窗口挂钩、子类化等(其中大部分不是我自己的)仍然非常乐意处理XP甚至Aero(这并不是说维护起来并不痛苦)。如果这是可能的,你的申请当然应该是。VCL遵循与MFC不同的范例,但它仍然很灵活。

看看,它描述了用于子类化的WindowProc机制


C++ +Builder使用底层的Delphi VCL,因此搜索“Delphi窗口子类”将比尝试找到特定C++的东西更富有成效。C++Builder程序员必须至少能够阅读Delphi代码,即使他们不必编写任何代码

你真的是指Borland在10多年前停止销售和支持的猫头鹰吗?我还以为它叫so。。。我只是一个M$家伙,我正试图找出为什么这些Borland C++开发人员无法模仿我可以做什么,在MFC的一行代码…我不能把我的答案到评论的300个字符,所以我编辑了原来的问题,而不是!非常感谢你的回答!!!然而,我已经看过了代码,我真的很想避免重新编译到MSVC++中。除此之外,它有近100个小位图资源,我担心我必须逐个手动添加这些资源。寻找Delphi示例听起来是个好主意,谢谢!:-)(您发送给我的示例恐怕不适用,因为我想对已由另一个应用程序创建的窗口(尽管是在同一过程中创建的)进行子锁定)。