我不会所以难!(窗口最小化问题)

forceboy 2005-03-09 03:11:04
我想将一个窗口在按下最小化的按钮后成为托盘,请问我该怎样获得最小化按钮的事件并加以处理?
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww425 2005-03-09
  • 打赏
  • 举报
回复
这个是动态的系统托盘图标显示,设定好后不用代码就可以

属性 值
Animate true
AnimateInterva 1000
Hide true
Hint Tary演示程序
IconIndex 0
Icons ImageList1
Name TrayIcon1
PopupMenu PopupMenu1
PopupMenuOn imRightClickUp
RestoreOn imDoubleClick
Visible true
nj_daiting 2005-03-09
  • 打赏
  • 举报
回复
不需要拦截消息呀。

在 TrayIcon 消息处理函数 TrayIcon1Minimize 里加代码处理最小化事件时的代码就可以了,试过了。
h98458 2005-03-09
  • 打赏
  • 举报
回复
void __fastcall TfrmLogHook::WndProc(Messages::TMessage&Message)
{ //重载wndproc,处理个各种系统消息
POINT MousePos;
if(Message.Msg==iconmessage)
{
if(Message.LParam==WM_LBUTTONDBLCLK)
{
Application->Terminate();//如果双击图标,则关闭应用程序
}
else if(Message.LParam==WM_LBUTTONDOWN)
{
Show();

}
else if(Message.LParam==WM_RBUTTONUP)
{
if (GetCursorPos(&MousePos))
{
PopupMenu1->PopupComponent=frmLogHook;
SetForegroundWindow(Handle);
PopupMenu1->Popup(MousePos.x, MousePos.y);
}
}
return;
}
TForm::WndProc(Message);//对于其他的消息,调用基础类的WndProc函数让Windows进行缺省处理。
}
h98458 2005-03-09
  • 打赏
  • 举报
回复
给你一段程序吧,不用TRAYICON1了:
void __fastcall TfrmLogHook::SelectTrayTcon(DWORD Add)
{
if(Add==NIM_ADD)
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
strncpy(icondata.szTip,"我的托盘",sizeof(icondata.szTip));
icondata.hIcon=Application->Icon->Handle;
icondata.uCallbackMessage=iconmessage;
icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
Shell_NotifyIcon(Add,&icondata);
}
else if(Add==NIM_DELETE)
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata)); //将结构icondata的各域初始化为0
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
Shell_NotifyIcon(NIM_DELETE,&icondata);
}
}
///////////////////////////////////
void __fastcall TfrmLogHook::FormCreate(TObject *Sender)
{
iconmessage=RegisterWindowMessage("IconNotify");
SelectTrayTcon(NIM_ADD);

}
//---------------------------------------------------------------------------

void __fastcall TfrmLogHook::FormDestroy(TObject *Sender)
{
SelectTrayTcon(NIM_DELETE);
}

h98458 2005-03-09
  • 打赏
  • 举报
回复
其实直接用TRAYICON1,设置它属性就可以了

还可以为托盘选择菜单,设置它的PopupMenu属性
forceboy 2005-03-09
  • 打赏
  • 举报
回复
请问我要如何拦截WM_SYSCOMMAND?
jinhaiwu 2005-03-09
  • 打赏
  • 举报
回复
拦截WM_SYSCOMMAND,当CmdType==SC_MINIMIZE时做你要做的事情,其他的继承原来的函数就可以了。
forceboy 2005-03-09
  • 打赏
  • 举报
回复
我是用的TRAYICON1组件,我是在它的ONMINIMIZE事件中写代码
FORM1->visible=false;
TrayIcon1->Antimate=true;
但是为什么不能使它成为一个托盘呢??
h98458 2005-03-09
  • 打赏
  • 举报
回复
用TrayIcon1组件不就OK了?然后在它的OnMinimize事件中写代码

1,221

社区成员

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

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