您的位置:首页 > 其它

最小化程序到托盘,并且有右键菜单!

2007-11-30 10:21 330 查看
1.定义全局变量和消息


NOTIFYICONDATA nid;


#define WM_ICONNOTIFY WM_USER + 909 //图标响应消息(lParam)


#define ID_TASKBARICON 100 //参数(wParam)




/**//////////////////////////////////////////////////////////////////////////////

2。编写onsize事件函数


void CMainFrame::OnSize(UINT nType, int cx, int cy)




...{


CFrameWnd::OnSize(nType, cx, cy);




// TODO: Add your message handler code here


if ( nType == SIZE_MINIMIZED)




...{


//初始化系统托盘图标


nid.cbSize = sizeof(NOTIFYICONDATA);


nid.hWnd = m_hWnd;;


nid.uID = ID_TASKBARICON; //发出的消息中的wParam参数


nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;


nid.uCallbackMessage = WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)


nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));


strcpy(nid.szTip, "聊天");


Shell_NotifyIcon(NIM_ADD, &nid); //加入图标


ShowWindow(SW_HIDE); //隐藏窗体


}


}

附加:如果要改变程序的风格可以添加下面代码

void CYOUclass::OnShowWindow(BOOL bShow, UINT nStatus)
{
CPropertySheet::OnShowWindow(bShow, nStatus);
this->ModifyStyle(WS_POPUP ,/*WS_MAXIMIZEBOX|*/WS_MINIMIZEBOX/*|WS_OVERLAPPEDWINDOW*/);
this->ModifyStyleEx(WS_EX_DLGMODALFRAME,WS_EX_OVERLAPPEDWINDOW );

// TODO: 在此处添加消息处理程序代码
}

3。编写自定义的消息


LRESULT CMainFrame::onNotifyIcon(WPARAM wparam , LPARAM lparam)




...{


POINT rpoint;


CMenu tmenu;


GetCursorPos(&rpoint);




//如果在托盘图标上双击左键


if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_LBUTTONDBLCLK ) )




...{


ShowWindow(SW_SHOW); //显示窗体


ShowWindow(SW_SHOWNORMAL);


Shell_NotifyIcon(NIM_DELETE, &nid); //删除系统托盘图标


}




//如果在托盘图标上双击右键


if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_RBUTTONDOWN ) )




...{


tmenu.LoadMenu(IDR_MAINFRAME); //加载系统主菜单


SetForegroundWindow(); //将程序置于桌面顶部


tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在点击图标处弹出系统菜单的第一项


}




return 0;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: