程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC模擬實現QQ界面(上)

VC模擬實現QQ界面(上)

編輯:關於VC++

大凡用過電腦,上過網的朋友都用過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功能,並逐一實現!

三、登陸時任務欄圖標的動態顯示

網絡上關於在任務欄上添加圖標的代碼說明不少,本人也是參考了書書籍和借簽了一部分代碼後,並做了以下模擬處理。

基礎部分:

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 函數終止也可以!

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved