大凡用過電腦,上過網的朋友都用過QQ,對QQ的一些交互界面可能垂慕已久,的確,無論是其生動的企鵝形象,還是“滴滴的”消息聲音,以及“刷”的菜單等功能,簡單單的消息發送,以及快速的回顯和眾多卡通的QQ頭像等鑄就了其在網絡的良好地位,本人對其研究雖不夠透徹,但也做一些探索性的嘗試,並簡單的實現了比較突出的功能,在s模擬的過程中,主要實現了以下幾部分的功能:
QQ菜單,也稱抽屜菜單(也有的叫導航菜單);
QQ頭像的列表顯示;
簡易的消息發送模擬;
簡易的上線,隱身模擬;
懸掛QQ;
本程序的運行界面如圖:
當然啦,現在的QQ功能強大,如QQ直播,聯系人,個人設置等功能,視頻聊天等眾多強悍功能,本人能力不及,並沒有實現!下面,就開始QQ模擬之旅吧!
一、准備
在實現QQ界面之前,有一些准備工作,請確定你已經有如下知識:
1.具備C,C++,VC的初步知識!
2.具備一定的思考能力!
3.要有一定的想法
4.熟悉QQ界面
5.具備一些軟件工具:如Visual C++, Resource Hack(這個可以找到.exe、.dll 文件的資源,包括對話框和控件的屬性.
二、剖析QQ界面
1.QQ頭像和圖標
這是QQ做的特別好的地方,大家如果留心的話會發現QQ附帶的功能實在強悍,可以視頻聊天,截圖,發送文件,記錄我的好友等信息,等這些功能全部僅在一個對話框或一個設置框中實現,給人很輕松的感覺,企鵝的形象深入民心,獲取關鍵的圖標是很必要的。
用Resource Hacker對你安裝的QQ.exe進行資源導出吧,這樣獲取的圖標文件.ico為你所用,不要再為沒有形象ICO而煩惱啦!
在你的QQ安裝目錄下面有個QQface,裡面有QQ所需要用到的所有QQ頭像,如果你不知道的話,也可以直接下載本人的源代碼,裡面已經將100張QQ頭像嵌在裡面啦,直接用,不要客氣!
2.登陸界面
QQ的登陸界面簡單易了,風格明朗,本人已嘗試做了一個,可以到知識庫裡下一下看,做的並不好,但長的蠻像的!本人並未實現網絡登陸功能,以至很多朋友有被欺騙的感覺,本人在這說明:已經在程序說明部分說明並未實現網絡功能,如果對登陸器,或外掛比較感興趣可以從網絡上搜索一些資料,應該有的下載!
3.登陸時任務欄圖標
這個可能對網速慢的朋友可能會注意到,這又是QQ花心思的地方。
4.上線時的聲音及消息顯示時的人物跳動
任務欄的圖標也跟著改變啦,可以近ctrl+alt+z快捷鍵迅速查看留言啦!
5.快捷方便的抽屜菜單
我個人非常欣賞該功能,所以講解的過程中本人會做最詳細的闡述!
6.發送消息對話框
消息來時候的很清脆的聲音及快速的回顯!
7.在桌面頂端上懸掛QQ
這使QQ占用很少的桌面空間,值得注意!
將在下面重點講述實現3到7功能,並逐一實現!
三、登陸時任務欄圖標的動態顯示
網絡上關於在任務欄上添加圖標的代碼說明不少,本人也是參考了書書籍和借簽了一部分代碼後,並做了以下模擬處理。
基礎部分:本文發表於http://bianceng.cn(編程入門網)
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 函數終止也可以!