我有这个 C++ Builder 2009 应用程序。这并不绝望——这是一个演示,但它驱使我去苏格兰。我现在全是单一麦芽威士忌,我不得不寻求帮助。
这个应用程序有一个主窗体和其他一些可以正常工作的东西。我没有理由认为它有什么问题。我添加了另一种形式,“TfoPNGload”,并添加了一些组件 - 没有什么不寻常的。我将它从自动创建列表中取出,以便可以按需创建实例。
作为测试,我在主窗体上添加了一个 SpeedButton,并在单击中创建了一个“TfoPNGload”窗体的实例并显示()它:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
myPNGform=new TfoPNGload(NULL);
myPNGform->Show();
}
这也很好用——我点击按钮,弹出一个表单。
一切正常。
我添加了一个消息处理程序,甚至在我发送任何消息之前事情就变得异常了。我添加了一个函数和宏,使其成为消息处理程序:
class TfoPNGload : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TPanel *Panel1;
TSpeedButton *SpeedButton1;
TTimer *tiSlideShow;
TLabel *Label1;
void __fastcall tiSlideShowTimer(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private:
PNGload *myLoad;
void __fastcall filesLoaded(TObject *Sender);
protected:
public: // User declarations
__fastcall TfoPNGload(TComponent* Owner);
MESSAGE void __fastcall WMAPP(TMessage& msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_APP, TMessage, WMAPP)
END_MESSAGE_MAP(TfoPNGload)
vector<PNGtask*> *PNGresult;
int vecSize;
};
然后,当我单击按钮创建表单时,会弹出经典的“堆栈溢出”消息框!
如果我注释掉宏:
// BEGIN_MESSAGE_MAP
// MESSAGE_HANDLER(WM_APP, TMessage, WMAPP)
// END_MESSAGE_MAP(TfoPNGload)
..表单创建得很好!
我还没有发布任何消息 - 只是处理宏似乎会在表单创建时产生溢出。WMAPP 函数无论如何都是空的。
任何人都见过这样的东西,或者更好的是,修复它?
如果迫在眉睫,我有一个解决方法——在主窗体中使用相同的宏确实有效,所以我可以在那里发布我的东西,然后调用“TfoPNGload”表单。它可能会起作用,但它使我的代码结构变得一团糟,TBH,它很难按照原样遵循:((
Rgds,马丁