首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

程序的子窗体Form2在任务栏没图标

2013-12-13 
程序的子窗体Form2在任务栏没有图标?我的程序有3个Form,第1个登录窗口,任务栏有显示,登录通过后Hide(),主

程序的子窗体Form2在任务栏没有图标?
我的程序有3个Form,第1个登录窗口,任务栏有显示,登录通过后Hide(),主窗口Form2->Show(),然后任务栏就没有图标了,如果Form2最小化以后就找不到了,怎么办?
Application->MainFormOnTaskbar是等于true的。
[解决办法]
关键点是不要把登陆窗体作为主窗体,如果一定要作为主窗体的话在完成登陆后将此登陆窗体隐藏而不是关闭,然后在默认界面窗体中使用如下代码即可:

步骤一、在Unit2.h中添加如下代码:

private:// User declarations
  void __fastcall CreateParams(Controls::TCreateParams &Params); // 子窗体显示最小化图标,标题栏上必须有最小化图标才好用,否则无效果
public:// User declarations

步骤二、在Unit2.cpp的空位置上添加:

  void __fastcall TForm2::CreateParams(
    Controls::TCreateParams &Params
  ){ // 子窗体显示最小化图标,标题栏上必须有最小化图标才好用,否则无效果
    TForm::CreateParams(Params);
    Params.WndParent = HWND_DESKTOP;
  }


[解决办法]
上面假定你的主界面窗体是Form2的,根据你的需要改成你的

在上面的代码中,你需要配合去掉Form1任务栏图标的代码,否则会有两个图标的
[解决办法]
还有两种方法比较的好,一种是把登录窗体做成DLL ,然后在Project->View Source:

                 Application->Initialize();
在这里载入DLL并显示登录窗体
                 Application->CreateForm(__classid(TForm1), &Form1);

最后一种就是将主窗体作为主界面,在主窗体启动之前或在主窗体的启动事件中载入登录窗体,当登录窗体验证失败时退整个程序,否则的话Close()即可,这样的话再验证失败退出时主窗体会闪一下,应该影响不大,至于最小化问题,因为是登陆窗体,因此可以用阻止其最小化的方式解决
[解决办法]
我也曾遇过这种问题,解决方式有很多...
把主窗口当Form1,登陆窗口为Form2,窗口登陆后隐藏或关闭然后显示主窗口。
我当初是用在开启欢迎画面,道理跟你这一样

不过'kfrght谨慎'的第一种方法不用更动窗口快速达到,很合你目前需求挺方便的。
[解决办法]
引用:
Quote: 引用:

还有两种方法比较的好,一种是把登录窗体做成DLL ,然后在Project->View Source:

                 Application->Initialize();
在这里载入DLL并显示登录窗体
                 Application->CreateForm(__classid(TForm1), &Form1);

最后一种就是将主窗体作为主界面,在主窗体启动之前或在主窗体的启动事件中载入登录窗体,当登录窗体验证失败时退整个程序,否则的话Close()即可,这样的话再验证失败退出时主窗体会闪一下,应该影响不大,至于最小化问题,因为是登陆窗体,因此可以用阻止其最小化的方式解决

我试了第一种方法,比较方便。
DLL的我还没弄过,是不是程序要多生成一个.dll文件?
最后一种:
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->Run();
}
是不是按顺序第一个Application->CreateForm的就是MainForm?
不是不把Application->CreateForm(__classid(TForm1), &Form1);放在Form2的OnCreate事件里面就可以呢?



对头啊

不是不把Application->CreateForm(__classid(TForm1), &Form1);放在Form2的OnCreate事件里面就可以呢?

不知道你说的什么
[解决办法]
你把Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
随便条换顺序就能看出端倪了,第一个就是主窗体了
[解决办法]
你点Project菜单中的View Source项

热点排行