当前位置: 首页 > 图文教程 > 开发语言 > VC++ > QQ界面的模拟实现(下)

VC++
为你的程序换个皮肤
程序启动画面
实现标题条的显示与隐藏
在EVC3.0中创建MDI程序
无模式对话框的创建与使用
界面专家简介
再谈客户区对话框拖动操作
Windows 2000/XP中对窗口进行透明化
用线程实现动态改变图标
不规则对话框的又一实现
用SkinMagic工具包创建换皮肤程序
最简单的界面增强库EasySkin
在VC++.net中制作启动屏幕的新方法
椭圆窗体的实现
编写多文档应用程序
SkinLoad程序界面换肤工具
如何在标题栏中显示动态图标
自绘对话框
VC启动窗口画面制作方法研究
MFC应用程序中指针的使用

VC++ 中的 QQ界面的模拟实现(下)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 74 ::
收藏到网摘: n/a

QQ界面的模拟实现(下)

作者:小帅

下载源代码

四、上线时的声音及消息显示时的人物跳动

本人并未实现人物跳动,并不知道是切换图片,还是更改图片的位置,所以此功能有待各位的指点!

五、动感十足的抽屉菜单

我对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控件,将其设置成很细小,且不可视,定制在对话框的最上和最下位置,这样你就可以随时获得你所需要的按钮移向的位置,另外每个按钮的长宽相同,方便啦处理!

六、发送消息对话框

在这里只讲两部分:

1.动态产生消息对话框
2.按Ctrl+Enter键发送消息

动态产生对话框,一般是先在资源中建立一个对话框模板,用Create函数产生一个对话框实例,本程序是这样实现的:

void CMyQQDlg::OnDblclkMyFriend(NMHDR* pNMHDR, LRESULT* pResult) {	NM_LISTVIEW* pNMListView = (NM_L