三、登陆时任务栏图标的动态显示
网络上关于在任务栏上添加图标的代码说明不少,本人也是参考了书书籍和借签了一部分代码后,并做了以下模拟处理。
基础部分:
NOTIFYICONDATA nid; //此处在类中定义
void CMyQQDlg::DisplayInTask() { if(isDisplayInTask) { //初始化nid nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd =this->m_hWnd; nid.uID = IDR_QQMENU; nid.uFlags = NIF_ICON | NIF_TIP|NIF_MESSAGE ; nid.hIcon = m_hIcon; strcpy (nid.szTip, "任务栏图标"); nid.uCallbackMessage=WM_DISPLAYTASKICON; Shell_NotifyIcon(NIM_ADD,&nid); isDisplayInTask=FALSE; } else { Shell_NotifyIcon(NIM_DELETE,&nid); isDisplayInTask=true; } } |
关于Shell_NotifyIcon这个函数共有三种操作,分别为NIM_ADD, NIM_MODIFY, NIM_DELETE,为系统函数,大家对这个不熟悉也不要紧,也就是实现在任务栏上显示的功能,在程序的OnInitDialog函数中添加如下代码:
isDisplayInTask=true; DisplayInTask(); //显示到任务栏里面去; Sleep(500); OnOutline(); Sleep(500); OnHidden(); Sleep(500); OnOutline(); Sleep(500); OnHidden(); |
仅仅是个模拟,并没有考虑到程序的具体操作过程,也可以定义一个时间,然后用 KillTime 函数终止也可以!
四、上线时的声音及消息显示时的人物跳动
本人并未实现人物跳动,并不知道是切换图片,还是更改图片的位置,所以此功能有待各位的指点!
五、动感十足的抽屉菜单
我对QQ的这个菜单印象特深,犹其是配的“刷”的声音,充分体验到QQ的生动!下面就详细介绍自己是如何一步步实现的: 说明:
在程序的一开始就获得最顶端按钮的位置:
// 将该对话框放置到右上角; GetWindowRect(&dlgrect); MoveWindow(GetSystemMetrics(SM_CXSCREEN)-dlgrect.Width()-20, 0, dlgrect.Width(), dlgrect.Height(), true); //////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// // 获取得第一个按钮和最后一个按钮的位置 GetDlgItem(IDC_QQFRIEND)->GetWindowRect(&rect0); ScreenToClient(&rect0); GetDlgItem(IDC_QQQUN)->GetWindowRect(&rect1); ScreenToClient(&rect1); |
用一个重要的函数分别处理当按下不同铵钮时的反应:
void CMyQQDlg::ChangeView() { // 开始对按钮进行各个处理
if(TopButtonNum!=1&&clicknum==1) { ////////////////////////////////////////////////////////////////////////// // QQ好友按钮已经置于最上层 // 所以无需移动 // 其余全置于下面 m_QQothers.MoveWindow(0, rect1.bottom, rect0.Width(), rect0.Height(), true); m_QQqun.MoveWindow(0, rect1.bottom-rect0.Height(), rect0.Width(), rect0.Height(), true); ////////////////////////////////////////////////////////////////////////// // QQ好友 if(isBigFace) { m_List1.SetImageList(&m_imagelist2, LVSIL_SMALL); } else { m_List1.SetImageList(&m_imagelist1, LVSIL_SMALL); } m_List1.DeleteAllItems(); for(int i=1; i<34; i++) { m_List1.InsertItem(0xffff,"", -1); m_List1.InsertItem(0xffff,"/n"+myClass[i-1], i); } m_List1.InsertItem(0xffff,"", -1); ////////////////////////////////////////////////////////////////////////// // 显示该栏目的下的QQ好友, 隐藏其它栏目; m_List1.ShowWindow(SW_SHOW); m_List2.ShowWindow(SW_HIDE); treeCtrl.ShowWindow(SW_HIDE); return; }
if(TopButtonNum!=2&&clicknum==2) { // 先将排在它上面的按钮置上不闻; m_QQqun.MoveWindow(0, rect0.bottom, rect0.Width(), rect0.Height(), true); // 将排在它后面的按钮置后; m_QQothers.MoveWindow(0, rect1.bottom, rect0.Width(), rect0.Height(), true);
// 显示该栏目的下的QQ群, 隐藏其它栏目; m_List1.ShowWindow(SW_HIDE); m_List2.ShowWindow(SW_HIDE); treeCtrl.ShowWindow(SW_SHOW); return; }
////////////////////////////////////////////////////////////////////////// //* ignoring these codes; if(TopButtonNum!=3&&clicknum==3) { // 全部挤到上面去 m_QQfriend.MoveWindow(0, rect0.top, rect0.Width(), rect0.Height(), true);
m_QQqun.MoveWindow(0, rect0.bottom, rect0.Width(), rect0.Height(), true);
m_QQothers.MoveWindow(0, rect0.bottom+rect0.Height(), rect0.Width(), rect0.Height(), true);
////////////////////////////////////////////////////////////////////////// // 随机产生最近联系人 m_List2.DeleteAllItems(); for(int i=1; i<18; i++) { int j=rand()%33; m_List2.InsertItem(0xffff,"", -1); m_List2.InsertItem(0xffff,"/n我的朋友"+i, j); } m_List2.InsertItem(0xffff,"", -1); // 显示该栏目的下的QQ联系人或其它, 隐藏其它栏目; m_List1.ShowWindow(SW_HIDE); treeCtrl.ShowWindow(SW_HIDE); m_List2.ShowWindow(SW_SHOW); return; } //*/ ////////////////////////////////////////////////////////////////////////// |
另外大家在处理的过程中,可以在QQ好友和最后一个菜单,这里是最近联系人,可以加一个picture控件,将其设置成很细小,且不可视,定制在对话框的最上和最下位置,这样你就可以随时获得你所需要的按钮移向的位置,另外每个按钮的长宽相同,方便啦处理! 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |