如何让父窗口和子窗口 独立

Nosoft12345 2014-01-15 11:40:56
环境:c++builder

父窗口A,是整个程序的主窗口,在父窗口上,进行一操作时,需要创建一个子窗口B,

我想父窗口和子窗口在任务栏里,分别有图标显示

然后在程序里我添加了如下的代码:

B = new TB(Application);---->改成了 B = new TB(NULL);

在子窗口类中formcreate中添加了:SetWindowLong( Handle , GWL_EXSTYLE , WS_EX_APPWINDOW ) ;

另外,父窗口和子窗口,最小化的代码都是:WindowState = wsMinimized;

-----------------------------------------------------------
结果是:

父窗口和子窗口,均能在任务栏里有独立的图标,但是双击任务栏里的子窗口和父窗口的图标,

均不能恢复和最小化。

点子窗口上的最小化按钮,窗口可以最小化到任务栏里,但点击任务栏里的图标,窗口可以恢复显示在桌面

但再次点击,却不能最小化了

=====================================
还有最大一个问题:

就是子窗口上的文本框,不能获得输入焦点,无法输入了

网上的 我找过,但好像都没解决



...全文
1468 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nosoft12345 2014-02-17
  • 打赏
  • 举报
回复
void __fastcall TMyFormMain::SpeedButtonMouseLeave(TObject *Sender) { switch(((TControl *)Sender)->Tag) { case 101: SpeedButton_Exit->Glyph = NULL; ImageList_22->GetBitmap(4, SpeedButton_Exit->Glyph); break; case 102: SpeedButton_Exit->Glyph = NULL; ImageList_22->GetBitmap(2, SpeedButton_Exit->Glyph); break; .... } } ============================================= void __fastcall TMyFormMain::SpeedButtonMouseEnter(TObject *Sender) { switch(((TControl *)Sender)->Tag) { case 101: SpeedButton_Exit->Glyph = NULL; ImageList_22->GetBitmap(5, SpeedButton_Exit->Glyph); break; case 102: SpeedButton_Logout->Glyph = NULL; ImageList_22->GetBitmap(3, SpeedButton_Logout->Glyph); break; ... } } ========================== 以上为OnMouseEnter和OnMouseLeave事件里的具体实现
action爱生活 2014-02-17
  • 打赏
  • 举报
回复
妖哥是大好人!!帮了我很多!!
kenny_hwei 2014-01-30
  • 打赏
  • 举报
回复
mark,期待实现相同功能
ccrun.com 2014-01-30
  • 打赏
  • 举报
回复
你说“程序里响应了OnMouseEnter和OnMouseLeave”具体是如何响应的,接管了哪个事件?
Nosoft12345 2014-01-28
  • 打赏
  • 举报
回复
妖哥,今天又碰到一个比较棘手的问题,还是在这个问题的基础上发现的。 在子窗口上,我放置了TSpeedButton的几个按钮(一个关闭,一个最小化),在程序里响应了OnMouseEnter和OnMouseLeave 这两个事件,奇怪的是,当我将鼠标移动到那几个按钮时,就会将主窗口显示在最前面。 另外在这两个事件函数里,就是当鼠标移动进入按钮时,换下按钮上的图标,当鼠标离开时,再换另外一个 图标。没有其他操作。 myButton->Glyph=NULL; myImageList->GetBitmap... 而且这些按钮 放在了panel里
LinuxCard 2014-01-28
  • 打赏
  • 举报
回复
妖哥是个热心人
ccrun.com 2014-01-21
  • 打赏
  • 举报
回复
你用的是Win7,这个就有些区别了。我是给你在XP中测试的。Vista以后的任务栏和XP有本质的不同,明天我研究一下。
Nosoft12345 2014-01-21
  • 打赏
  • 举报
回复
妖哥,按照你的方法,已经能够实现了 但现在出现了个问题或现象 1、子窗口,点其窗口上的最小化按钮,能够最小化。但点击任务栏子窗口的图标,却不能最小化了
ccrun.com 2014-01-21
  • 打赏
  • 举报
回复
楼主这个概念似乎有点不太准确,按你这个需求描述,应该叫主窗口和子窗口才对。 重载子窗口的 CreateParams 就可以实现了。 子窗口单元的头文件中:
protected:
    void __fastcall CreateParams(TCreateParams & Params);
子窗口单元的.cpp文件中:
void __fastcall TForm2::CreateParams(TCreateParams ¶ms)
{
     TForm::CreateParams(Params);
     Params.ExStyle |= WS_EX_APPWINDOW;
     Params.WndParent = ::GetDesktopWindow();
}
Nosoft12345 2014-01-21
  • 打赏
  • 举报
回复
不是一般的大,是一个工程组 开发工具:c++builder XE 操作系统:win 7 64位 旗舰版 先多谢下妖哥
ccrun.com 2014-01-21
  • 打赏
  • 举报
回复
来吧,把你的示例工程发给我。顺便说说你的开发工具和操作系统的版本。
sololie 2014-01-20
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你新建一个窗体做为子窗体,在主窗体中的FormShow事件函数中让子窗体显示出来试试
sololie 2014-01-20
  • 打赏
  • 举报
回复
你说的“子窗口”是指定ParentWindow的窗口么
Nosoft12345 2014-01-20
  • 打赏
  • 举报
回复
大侠 我说的 您试过了吗 还有 你给的两个语句 我在父窗口和子窗口放在了ondectivate 和onactivate 但是还是不行 能否写个例子 比如:主窗口上,有个按钮,点这个按钮 ,生成一个子窗口 然后能达到以下目的就行: 1、父、子窗口,均在任务栏有显示图标 2、点击子窗口上的最小化按钮,子窗口最小化,并且,点击任务栏上子窗口图标,能够最小化和恢复显示 3、父窗口也是一样,点击父窗口上的最小化按钮,父窗口最小化,并且,点击任务栏上父窗口图标,能够最小化和恢复显示 4、不论操作或控制那个窗口,都不能影响到父窗口或子窗口
sololie 2014-01-15
  • 打赏
  • 举报
回复
Application->Minimize; // Shrinks an application to the Windows task bar. Application->Restore; // Restores a minimized application to its normal size.

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧