如何激活我的表单?(100分)

  • 主题发起人 主题发起人 Ilovelife
  • 开始时间 开始时间
I

Ilovelife

Unregistered / Unconfirmed
GUEST, unregistred user!
我用C++Builder做了个小程序,实现了最小化时将程序放入右下角任务栏中。
当双击恢复显示的时候,程序被激活(表单的FormStyle为StayOnTop),但标题栏
仍然为灰色,那位高手给解释一下这是为什么?

case WM_LBUTTONDBLCLK:
ShowWindow(Application->Handle, SW_RESTORE);
SetActiveWindow(Application->Handle);
Screen->ActiveForm->Color = clGreen; //颜色确实改变了,表明本
表单为当前激活表单,而且与此同时
屏幕上所有表单的标题栏均为灰色
break;
 
SetActiveWindow(Handle);
 
Applicatiom->handle 是你主窗口的句柄,而不是你的form的句柄

有区别!你把主窗口给激活了。
 
我按两位说的改了一下,还是同样的问题。:(
 
你怎么改的?
按照如下的改法呢?
ShowWindow(Handle, SW_RESTORE);
SetActiveWindow(Handle);//不需要
 
上面的问题实际是我提的,只是当时尚未注册,只好借朋友的ID一用。实际上,我就是按照
hustmouse的写法改的,我也知道SetActiveWindou这句并不需要。可问题依旧,实在是苦恼
啊,大虾们再帮我好好想想。新手在此多谢了
 
我试了一下,没有问题呀?

把你的相关部分全帖出来。
 
多谢费心

void __fastcall TForm1::MyNotify(TMessage& Msg)
{
POINT MousePos;

switch(Msg.LParam)
{
case WM_RBUTTONUP:
if (GetCursorPos(&MousePos))
{
PopupMenu2->PopupComponent = Form1;
SetForegroundWindow(Handle);
PopupMenu2->Popup(MousePos.x, MousePos.y);
}
else
Show();
break;
case WM_LBUTTONDBLCLK:
TrayMessage(NIM_DELETE);
ShowWindow(Handle, SW_RESTORE);
SetActiveWindow(Handle);
// Screen->ActiveForm->Color = clGreen;
break;
default:
break;
}
TForm::Dispatch(&Msg);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMinimize = TrayDisplay;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrayDisplay(TObject *Sender)
{
ShowWindow(Handle, SW_HIDE);
TrayMessage(NIM_ADD); //增加右下角图标
TrayMessage(NIM_MODIFY);
}
//---------------------------------------------------------------------------
 
我想还是SetForegroundWindow好一些。
 
liguang,这种方法我也试过的,结果一样还是不行
 
您可以试一下SetFocus;或者Applicaiton.BringToFront;
 
我的delphi程序是这样写的,没有问题:
ShowWindow(Frmmain.Handle,sw_Normal);
 
这些方法我都尝试过,都不行。我快发疯了,难道我还得手工模拟一个鼠标点击事件吗?
再次向各位道谢
//bow all
 
请注意,这里是Delphi论坛,无关于Delphi最好不要在这里发问,请到有关于你的问题的
网站去问,注意,注意,注意,!!!!!!!!
 
请问pengchengfei,Delphi和C++Builder是一母同胞,问题都是相通的,为什么不能在
这里提问?

这个问题奇怪在,当我双击任务栏的图标出现表单后,同一时间屏幕上所有窗口的标题
栏都是灰色的。
 
> 你是怎样编的,我用DELPHI从来没出现过此问题
 
解决了!
偶然间把语句顺序调了一下,居然就一切ok了。这到底是怎么回事啊?

原来的代码:
case WM_LBUTTONDBLCLK:

TrayMessage(NIM_DELETE);
ShowWindow(Application->Handle, SW_RESTORE);
SetActiveWindow(Application->Handle);

break;

现在的代码:
case WM_LBUTTONDBLCLK:

ShowWindow(Application->Handle, SW_RESTORE);
SetActiveWindow(Application->Handle);
TrayMessage(NIM_DELETE);

break;
 
哦,不明白。
 
接受答案了.
 
后退
顶部