今天图老师小编给大家介绍下VC模拟实现QQ界面(下),平时喜欢VC模拟实现QQ界面(下)的朋友赶紧收藏起来吧!记得点赞哦~
【 tulaoshi.com - 编程语言 】
四、上线时的声音及消息显示时的人物跳动
本人并未实现人物跳动,并不知道是切换图片,还是更改图片的位置,所以此功能有待各位的指点!
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)五、动感十足的抽屉菜单
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)我对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; i34; i++)
{
m_List1.InsertItem(0xffff,"", -1);
m_List1.InsertItem(0xffff,"
"+myClass[i-1], i);
}
m_List1.InsertItem(0xffff,"", -1);
六、发送消息对话框
在这里只讲两部分:
1.动态产生消息对话框
2.按Ctrl+Enter键发送消息
动态产生对话框,一般是先在资源中建立一个对话框模板,用Create函数产生一个对话框实例, 本程序是这样实现的:
void CMyQQDlg::OnDblclkMyFriend(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int m_nCurrentSel = pNMListView-iItem;
CString str;
str=m_List1.GetItemText(m_nCurrentSel, NULL);
CQQSendMessage *dlg=new CQQSendMessage;
dlg-msg=str;
dlg-Create(IDD_QQ_MESSAGE);
dlg-SetWindowText("你正在与"+str+"聊天当中");
dlg-SetIcon(AfxGetApp()-LoadIcon(IDR_MAINFRAME), false);
dlg-ShowWindow(SW_SHOW);
*pResult = 0;
}第2个键盘发送可以做如下处理:BOOL CQQSendMessage::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg-message==WM_KEYDOWN)
{
if(pMsg-wParam==VK_RETURN && GetKeyState(VK_CONTROL)&0x80)
{
{
//处理发送对话的内容
OnSend();
return 1;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
这样你按下Ctrl+Enter键后就会处理OnSend()函数,这样就可以实现快捷键发送消息啦!
七、在桌面顶端上悬挂QQ
这样的实现不知道满意不满意,可以用一个时间片,时刻测试鼠标的坐标,并判断它所处的范围,以判断是否悬挂对话框!本文发表于http://bianceng.cn(编程入门网)
悬挂QQ,并不是让其隐藏而是要留下只剩下一根细线,当鼠标移到这根细线的时候,就立刻反显示!悬挂代码如下:
LPPOINT pt=new CPoint;
GetCursorPos(pt);
CRect rect;
GetWindowRect(&rect);
if(rect.PtInRect(*pt))
{
if(rect.top=2)
{
MoveWindow(rect.left, rect.top,
dlgrect.Width(), dlgrect.Height(), true);
}
}
else
{
if(rect.top=2)
{
MoveWindow(rect.left, 0, rect.Width(), 3, true);
}
}
delete pt;
小结:
不知道通过上面的讲述,你是否感爱到QQ的巧妙?由于本人也在学习阶段,所以分析的也不是很到位,但也希望通过这次学习能有所提高,可以与本人联系: xuwenq88@126.com
来源:http://www.tulaoshi.com/n/20160219/1627081.html
看过《VC模拟实现QQ界面(下)》的人还看了以下文章 更多>>