收录日期:2021/02/28 11:37:20 时间:2016/06/29 21:50:31 标签:界面
void CUStrorageAssitantDlg::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy);

if(nType == SIZE_MINIMIZED)

{                                        

NOTIFYICONDATA tnd;                             //在系统任务栏填加图标

tnd.cbSize=sizeof(NOTIFYICONDATA);

tnd.hWnd=this->m_hWnd;

tnd.uID=IDI_UStrorage;

tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;

tnd.uCallbackMessage=WM_SHOWTASK;// 这个消息我已经定义过了,没有问题

tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE (IDI_UStrorage)); 

strcpy(tnd.szTip,"U盘复制工具");//信息提示为“系统关机、重启、注销工具”

Shell_NotifyIcon(NIM_ADD,&tnd);

ShowWindow(SW_HIDE);


}


}

// 下面是对托盘的消息处理
LRESULT CUStrorageAssitantDlg::onShowTask(WPARAM wParam,LPARAM lParam) 

//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 

if(wParam!=IDI_UStrorage) 

return 1; 

switch(lParam) 


case WM_LBUTTONDBLCLK://双击左键的处理 




                           //////注意这段代码//////////////////////////////////////////////////

ShowWindow(SW_SHOWNORMAL); //简单的显示主窗口

                        // 将窗口提到最顶层
//::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE);

//////注意这段代码//////////////////////////////////////////////////



break; 



return 0; 

}



//程序退出时删除托盘图标
void CUStrorageAssitantDlg::OnDestroy() 
{
CDialog::OnDestroy();

NOTIFYICONDATA tnid;                             

tnid.cbSize=sizeof(NOTIFYICONDATA);

tnid.hWnd=this->m_hWnd;

tnid.uID=IDI_UStrorage;

Shell_NotifyIcon(NIM_DELETE,&tnid);        
}


以上的代码截取自基于对话框的程序,注意在CUStrorageAssitantDlg::onShowTask(WPARAM wParam,LPARAM lParam)函数中的代码即双击托盘图标时的处理程序:case WM_LBUTTONDBLCLK://双击左键的处理时   ShowWindow(SW_SHOWNORMAL);
程序测试时存在几个问题:

1.有时程序主界面不能够在屏幕显示, 只在任务栏中出现程序窗格(就是我们平常最小化"我的电脑"后出现在任务栏中的小方框,HEHE,我也不知道具体叫什么名称);
2.当使用代码::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE);时,程序主界面能够在屏幕显示,但未处于激活状态,也就是输入焦点不在这个窗口,要用鼠标去点一下;
3.请各们赐教,不胜感激;
晕,为什么程序代码不能缩进啊,我编排的时候写得很整齐的,得跟这帮人反映一下
很少人在OnSize这个里面处理的,一般是在OnSysCommand这个里面处理

void CCloseComputerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == SC_MAXIMIZE)
return;
else if(nID == SC_MINIMIZE)
{
ToTray();
}
else if (nID == SC_RESTORE)
{
  MessageBox("hello");
}
else
CDialog::OnSysCommand(nID, lParam);
}
this->ShowWindow(TRUE);
SetForegroundWindow();//在你第一种情况后使用这一句
重载WNDPROC,在那里响应消息
用3楼的方法可以

C++小问题!!!!!! 如何把查询结果传入到自定义函数中? 是Session过期还是数据库链接超时?? 一个刷新的问题 请问如何获取本机的宽带密码 ? 关于在elment前面使用getElementById。。。。 怎样将均匀分布变成高斯分布 asp.net如何过滤提交的信息? 经济不景气 养生热逆市上扬 排列重复的问题 下面这个程序怎么不报错?? delphi+sql server主要用于那方面 如何响应用于播放视频流的Picture控件的鼠标单击事件? 关于apache的一个疑难问题,请大家帮忙看看。 用C实现字符串的倒置输出,大家帮忙看看还有什么问题 jsp 中实现递归问题 如何安全退出线程 warning LNK4006 错误 毕业设计 轻量级作战仿真框架开发 求助 使用\"连接池\" <--> 不使用\"连接池\" 的区别 花指令 导航条上面的链接,根据不同的用户链接到不同的页面该如何实现? 新世纪时代,最崇尚的母爱,简单爱·爱简单 有关GET提交数据获得的问题 linux 网络服务器 struts的file控件的问题 今天面试的英语题,请高手帮忙看下! 泛型小问题.. m/m/2排队系统的delay问题 求助asp 写excel问题