如何将VC程序的exe窗口最小化到桌脚右下方
1个回答
展开全部
这是两个步骤:
隐藏/显示程序主窗口
创建系统托盘图标和对应消息
托盘之后可以建立弹出菜单、全局热键等方式,根据需要确定。
主要涉及函数三个方面:
ShowWindow(SW_HIDE)
Shell_NotifyIcon
CreatePopMenu
搜索这三个函数,会找到很多示例代码,不再赘述。
追问
每次您的回答,我都不知道如何处理。。太过简略了
追答
哈哈,还是你呀,没注意。
首先,要做到托盘,必须是窗口程序(不能是控制台DOS程序)
核心部分代码:(这个示例没有使用MFC,并且只用了托盘图标和窗口显隐,没有使用菜单)
1.先定义一个全局的变量:
NOTIFYICONDATA nid
2.然后在适当的位置对nid进行初始化,我是在主窗口的 while (GetMessage (&msg, NULL, 0, 0)) 语句之前初始化的。
nid.cbSize = sizeof(NOTIFYICONDATA); //初始化结构的大小
nid.hWnd = hwnd; //指定接收托盘消息的句柄
nid.uID = IDI_ICON1; //指定托盘图标的ID
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //设定结构里有效的位置
//NIF_ICON: 指定hIcon是有效的,(这里设定自定义系统托盘图标必须的
//NIF_MESSAGE: 指定uCallbackMessage是有效的,用于程序接收来自托盘图标的消息,需要自定义一个消息
//NIF_TIP: 指定szTip是有效的,功能是当鼠标移动到图标上时,显示提示信息
nid.uCallbackMessage = WM_IAWENTRAY; //自定义的消息,我在一开始定义了一个自定义消息 //#define WM_IAWENTRAY WM_USER+5
nid.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1)); //设置图标的句柄
_tcscpy(nid.szTip,TEXT("TimeWork正在工作!\r\n点击打开主界面")); //设置鼠标移上托盘图标时的提示信息 //_tcscpy是tchar.h里定义的宏
完成了上面的设置,就可以调用了。
3.我们将在最小化窗口消息里调用 Shell_NotifyIcon(NIM_ADD, &nid) 将图标设置到系统托盘。
case WM_DESTROY:
Shell_NotifyIcon(NIM_DELETE, &nid);
return TRUE;
case WM_SYSCOMMAND:
switch(wParam)
{
case SC_CLOSE:
DestroyWindow(hDlg);
PostQuitMessage(0);
return TRUE;
case SC_MINIMIZE:
ShowWindow(hwnd,SW_HIDE);
Shell_NotifyIcon(NIM_ADD, &nid);
return TRUE;
}
在自定义的 WM_IAWENTRAY 消息里面判断鼠标是否点击,并调用 ShowWindow(hwnd, SW_SHOWNORMAL) 显示主窗口。
case WM_IAWENTRAY:
if(wParam == IDI_ICON1){
if(lParam == WM_LBUTTONDOWN){
ShowWindow(hDlg, SW_SHOWNORMAL);
return TRUE;
}
}
return FALSE;
其中消息的wParam参数为指定的图标ID,lParam参数为事件类型,示例里只接收了WM_LBUTTONDOWN事件,即鼠标左键点击事件!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询