在c++builder 中,如何使口令窗口在mdi主窗体出现后再出现?(100分)

  • 主题发起人 主题发起人 philips
  • 开始时间 开始时间
P

philips

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi5中,可在active事件中加入,但在c++builder5中无效(得不到执行),请各路高手
出手相助。
 
view|project source
修改工程文件。
代码加在Application->Initialize()前
 
可以在OnShow事件中加入
 
To Reboot:
我按你说的,将代码修改如下:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DWORD lTime;

MainForm = new TMainForm(MainForm);
MainForm->Show();

Application->Initialize();
SPLASHFORM = new TSPLASHFORM(SPLASHFORM);
SPLASHFORM->Show();
SPLASHFORM->Update();

lTime = GetTickCount();

//Application->CreateForm(__classid(TMainForm), &MainForm);

Application->CreateForm(__classid(TDM), &DM);
Application->CreateForm(__classid(TMDIChild), &MDIChild);
Application->CreateForm(__classid(TLogDlg), &LogDlg);
Application->CreateForm(__classid(TForm1), &Form1);

while((GetTickCount()-lTime)/1000 < 2) Application->ProcessMessages();

SPLASHFORM->Hide();
SPLASHFORM->Free();
//MainForm->Show();

Application->Run();
return 0;
}
但编译器提示: [C++ Error] mdiapp.cpp(36): E2450 Undefined structure 'TMainForm'
而修改之前,没有问题(认得TMainForm)。

to liujingnan:
你的方法我没有成功,还是在mdi主窗口出现之前就要口令。
 
//这样试试:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DWORD lTime;

Application->Initialize();

lTime = GetTickCount();

Application->CreateForm(__classid(TMainForm), &MainForm);
//只有用Application->CreateForm创建的第一个窗口会被认为是主窗口。
MainForm->Show();
MainForm->Update();

SPLASHFORM = new TSPLASHFORM(SPLASHFORM);
SPLASHFORM->Show();
SPLASHFORM->Update();

Application->CreateForm(__classid(TDM), &DM);
Application->CreateForm(__classid(TMDIChild), &MDIChild);
Application->CreateForm(__classid(TLogDlg), &LogDlg);
Application->CreateForm(__classid(TForm1), &Form1);

while((GetTickCount()-lTime)/1000 < 2) Application->ProcessMessages();

SPLASHFORM->Hide();
SPLASHFORM->Free();
//MainForm->Show();

Application->Run();
return 0;
}
 
不好意思,没仔细看题目。
是在出现后,以为是出现前。
那你响应CM_ACTIVATE即可。
 
To DreamTiger:
我按你说的修改后,编译不能通过。 系统提示:
[C++ Error] mdiapp.cpp(57): E2315 'Show' is not a member of 'TMainForm',
because the type is not yet defined
 
你可以将显示口令窗体的代码加到 OnShow 事件中,就向 liujingnan所说的,但仅仅这样
还不够,因主窗体此时还未显示,为能达到在mdi主窗体显示后在显示口令窗体的目的,
应在显示口令窗体之前加入改变主窗体状态的代码。
例如,如果设计时主窗体状态为 wsNormal
就应加入 :
MainForm->WindowState = wsMaximized;
LogDlg->ShowModal();

这样就搞定了。
 
多人接受答案了。
 
后退
顶部