高难问题!如何弹出一个窗口,但是不让它获得焦点?就象msn的弹出消息那样?

reggie 2003-08-16 12:13:53
我是重载了CreateParams,让窗口总是在最上的,但是弹出时它会获得焦点,必须用鼠标点回之前的运行的程序,郁闷……

void __fastcall TBreakForm::CreateParams(TCreateParams ¶m)
{
//参数
//调用基类
TForm::CreateParams(Param);
//去掉窗口标题区
Param.Style=Param.Style & ~WS_CAPTION;
Param.Style=Param.Style | WS_POPUP;
//设为总在最上面
Param.ExStyle=Param.ExStyle | WS_EX_TOPMOST;
//消除任务栏上的form
Param.ExStyle=Param.ExStyle | WS_EX_TOOLWINDOW;
// 设Windows Owner为Desktop Window 即桌面 这样它就不受你的主窗口限制了 相当于把它过继给桌面了
Param.WndParent=GetDesktopWindow();
}
...全文
70 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
honlyn 2003-08-17
  • 打赏
  • 举报
回复
学习
sun_wyz 2003-08-17
  • 打赏
  • 举报
回复
好!!
domustdo 2003-08-16
  • 打赏
  • 举报
回复
同意季老大的!
kanhongsh 2003-08-16
  • 打赏
  • 举报
回复
永远不让它获得焦点,还是仅仅第一次弹出时不让它有焦点?
如果仅仅是弹出时不让它有焦点:
TForm* ActForm = Screen->ActiveForm;
(new TForm2(this))->Show();
ActForm->BringToFront();
永远不让它获得焦点:
你要重载winproc,截获windows的消息,屏掉大部分的消息。
jishiping 2003-08-16
  • 打赏
  • 举报
回复
永远不让它获得焦点,还是仅仅第一次弹出时不让它有焦点?如果仅仅是弹出时不让它有焦
点,只要在这个窗口弹出前,先取得当前激活的Form,这个窗口显示后,再激活先前的激活
窗口就可以了。
TForm* ActForm = Screen->ActiveForm;
(new TForm2(this))->Show();
ActForm->BringToFront();
shudingbo 2003-08-16
  • 打赏
  • 举报
回复
http://www.codeguru.com/dialog/TaskbarNotifier.html
shudingbo 2003-08-16
  • 打赏
  • 举报
回复
同上,
ljianq 2003-08-16
  • 打赏
  • 举报
回复

//试试以下代码
HWND hw=GetForegroundWindow();
HWND hWnd=GetFocus();
//执行你的操作
SetForegroundWindow(hw);
::SetFocus(hWnd);

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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