vc dialog 程序,如果把窗口最小化到托盘?

vc dialog 程序,如果把窗口最小化到托盘?,第1张

在OnSysCommand函数中 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAboutDoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
else之前添加一段代码: if(nID==SC_MINIMIZE)
{
nidcbSize=(DWORD)sizeof(NOTIFYICONDATA);
nidhWnd = this->m_hWnd;
niduID = IDR_MAINFRAME;
niduFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
niduCallbackMessage = WM_ZLT;//自定义的消息名称 这个很重要
nidhIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nidszTip,"打印控制软件");//信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
::ShowWindow(this->m_hWnd,SW_HIDE);
}

打开界面,上面的大大的缩小框,然后点击一下就会缩小。再点一下旁边的一个负号就可以关闭成最小化到托盘位置。steam指的其实就是steam平台,steam平台是Valve(V社)公司设计开发的游戏和软件的交易平台,用户可以在上面购买游戏和软件,制作者也可以在上面发布自己制作的软件和游戏。

1设置WinForm窗体属性showinTask=false
2加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。
3添加窗体最小化事件(首先需要添加事件引用):
代码如下:
thisSizeChanged += new SystemEventHandler(thisForm1_SizeChanged);
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_SizeChanged(object sender, EventArgs e)
{
if(thisWindowState == FormWindowStateMinimized)
{
thisHide();
thisnotifyIcon1Visible=true;
}
}
4添加点击图标事件(首先需要添加事件引用):
private void notifyIcon1_Click(object sender, EventArgs e)
{
thisVisible = true;
thisWindowState = FormWindowStateNormal;
thisnotifyIcon1Visible = false;
}
5可以给notifyIcon添加右键菜单:
主窗体中拖入一个ContextMenu控件NicontextMenu,点中控件,在上下文菜单中添加菜单,notifyIcon1的ContextMenu行为中选中NicontextMenu 作为上下文菜单。
代码如下:
thisnotifyIcon1 = new SystemWindowsFormsNotifyIcon(thiscomponents);
thisNicontextMenu = new SystemWindowsFormsContextMenu();
thismenuItem_Hide = new SystemWindowsFormsMenuItem();
thismenuItem_Show = new SystemWindowsFormsMenuItem();
thismenuItem_Aubot = new SystemWindowsFormsMenuItem();
thismenuItem_Exit = new SystemWindowsFormsMenuItem();
thisnotifyIcon1ContextMenu = thisNicontextMenu;
thisnotifyIcon1Icon = ((SystemDrawingIcon)(resourcesGetObject( "NotifyIconIcon ")));
thisnotifyIcon1Text = " ";
thisnotifyIcon1Visible = true;
thisnotifyIcon1DoubleClick += new SystemEventHandler(thisnotifyIcon1_DoubleClick);
thisnotifyIcon1Click += new SystemEventHandler(thisnotifyIcon1_Click);
thisNicontextMenuMenuItemsAddRange(
new SystemWindowsFormsMenuItem[]
{
thismenuItem_Hide,
thismenuItem_Show,
thismenuItem_Aubot,
thismenuItem_Exit
}
);
//
// menuItem_Hide
//
thismenuItem_HideIndex = 0;
thismenuItem_HideText = "隐藏 ";
thismenuItem_HideClick += new SystemEventHandler(thismenuItem_Hide_Click);
//
// menuItem_Show
//
thismenuItem_ShowIndex = 1;
thismenuItem_ShowText = "显示 ";
thismenuItem_ShowClick += new SystemEventHandler(thismenuItem_Show_Click);
//
// menuItem_Aubot
//
thismenuItem_AubotIndex = 2;
thismenuItem_AubotText = "关于 ";
thismenuItem_AubotClick += new SystemEventHandler(thismenuItem_Aubot_Click);
//
// menuItem_Exit
//
thismenuItem_ExitIndex = 3;
thismenuItem_ExitText = "退出 ";
thismenuItem_ExitClick += new SystemEventHandler(thismenuItem_Exit_Click);
protected override void OnClosing(CancelEventArgs e)
{
thisShowInTaskbar = false;
thisWindowState = FormWindowStateMinimized;
eCancel = true;
}
protected override void OnClosing(CancelEventArgs e)
{
//thisShowInTaskbar = false;
thisWindowState = FormWindowStateMinimized;
eCancel = true;
}
private void CloseCtiServer()
{
timerEnabled = false;
DJ160APIDisableCard();
thisNotifyIconVisible = false;
thisClose();
thisDispose();
ApplicationExit();
}
private void HideCtiServer()
{
thisHide();
}
private void ShowCtiServer()
{
thisShow();
thisWindowState = FormWindowStateNormal;
thisActivate();
}
private void CtiManiForm_Closing(object sender, SystemComponentModelCancelEventArgs e)
{
thisCloseCtiServer();
}
private void menuItem_Show_Click(object sender, SystemEventArgs e)
{
thisShowCtiServer();
}
private void menuItem_Aubot_Click(object sender, SystemEventArgs e)
{
}
private void menuItem_Exit_Click(object sender, SystemEventArgs e)
{
thisCloseCtiServer();
}
private void menuItem_Hide_Click(object sender, SystemEventArgs e)
{
thisHideCtiServer();
}
private void CtiManiForm_SizeChanged(object sender, SystemEventArgs e)
{
if(thisWindowState == FormWindowStateMinimized)
{
thisHideCtiServer();
}
}
private void notifyIcon1_DoubleClick(object sender,SystemEventArgs e)
{
thisShowCtiServer();
}

要安装扩展 MinimizeToTray 0012006030906+ 最小化 Firefox, Thunderbird, Mozilla Suite, 和 Nvu 到系统托盘的强大扩展。 >

安装MinimizeToTray Plus扩展后, 如果要实现点击关闭按钮最小化到托盘,请在该扩展中进行设置!
设置步骤:工具-附加组件-MinimizeToTray Plus-选项-勾选关闭窗口时最小化到托盘

现在借助Window
Minimizer这款小工具的帮忙便实现
以上 *** 作了。软件下载完毕后进行解压,由于是绿色软件并不需安
装,双击应用程序图标运行Window
Minimizer,这时该软件程序图
标会显示在系统托盘区域中。如果想将某个任务栏窗口最小化到系
统托盘,可以直接在其窗口按钮上单击一下鼠标右键,然后在d出
的菜单中选择最下方的“最小化到托盘区”一项命令就行了,此时该
窗口图标便移动到托盘中去了。以后如想将其恢到任务栏中,再用
鼠标左键在托盘中点击一下该窗口图标就可以了。

(一) 原理
1、最小化的原理:首先要将窗口隐藏,然后 在右下角绘制图标。
2、恢复的原理:将窗口显示,再将托盘中的删除。
(二)程序实现
1、自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER +1)
2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应
if(nID==SC_MINIMIZE) ToTray(); //最小化到托盘的函数

3、在消息映射中添加 ON_MESSAGE(WM_SHOWTASK,OnShowTask),其中WM_SHOWTASK是消息名,
OnShowTask是自己定义的消息响应函数,后面有说明。
(三)具体函数内容
1、最小化到托盘函数
void CMyDlg::ToTray(){ NOTIFYICONDATA nid; nidcbSize=(DWORD)sizeof(NOTIFYICONDATA); nidhWnd=this->m_hWnd; niduID=IDR_MAINFRAME; niduFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; niduCallbackMessage=WM_SHOWTASK;//自定义的消息名称 nidhIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nidszTip,"程序名称"); //信息提示条 Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 ShowWindow(SW_HIDE); //隐藏主窗口}

2、恢复界面函数
在头文件中定义消息响应函数afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam) { if(wParam!=IDR_MAINFRAME) return 1; switch(lParam) { case WM_RBUTTONUP://右键起来时d出快捷菜单,这里只有一个“关闭” { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; menuCreatePopupMenu();//声明一个d出式菜单 //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 //隐藏),将程序结束。 menuAppendMenu(MF_STRING,WM_DESTROY,"关闭"); //确定d出式菜单的位置 menuTrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //资源回收 HMENU hmenu=menuDetach(); menuDestroyMenu(); delete lpoint; } break; case WM_LBUTTONDBLCLK://双击左键的处理 { this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 DeleteTray(); } break; default: break; } return 0; }

3、删除托盘图标函数
void CMyDlg::DeleteTray(){ NOTIFYICONDATA nid; nidcbSize=(DWORD)sizeof(NOTIFYICONDATA); nidhWnd=this->m_hWnd; niduID=IDR_MAINFRAME; niduFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; niduCallbackMessage=WM_SHOWTASK;//自定义的消息名称 nidhIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nidszTip,"程序名称"); //信息提示条为“计划任务提醒” Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标 }

托盘就是桌面右下角显示时间和其他小图标的那一块区域,一般最小化的程序左键单击相应图标就能恢复显示。XP中一般情况下,电脑桌面下的那个长条,最左边的是开始按钮,接着是快捷栏(可以取消显示),然后空白或显示打开窗口的叫任务栏,再往右可能会是输入法栏(可取消),最右边就是系统托盘了。

版本 2
程序集 窗口程序集1
子程序 __启动窗口_创建完毕
置托盘图标 (#询问图标, “看看我啊”)
子程序 __启动窗口_托盘事件
参数 *** 作类型, 整数型
如果 ( *** 作类型 = #单击右键)
d出托盘菜单 (托盘)
否则
如果结束


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13040903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存