100个vc小项目开发:一、仿qq主界面
<!--EndFragment-->
作者July
<!--EndFragment-->
------------------
一、我是来兑现承诺的。在之前的一篇博文中,已说过,
整理完那微软等面试题系列V0.1版,便把那100套vc项目的源码给放出来。现在,正是时机。
二、有问题,望各位不吝指正。:D。
--------------------------
我看,之前,已经有不少人做过这个仿qq的界面了。因此,本文会尽量保持简短。
来看下,最后的效果图(界面粗糙之处,还请海涵):
====
呵呵,没错,我的qq头像是手冢。我和我老弟,都很喜欢这部网球王子。
由于没有qq2010的皮肤库,所以盗用了qq2008的皮肤。:D。
-------------------------------------------------------------------------------
一、MyICQApp文件里头,对话框的建立:
CMyICQDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
二、界面主对话框的初始化:
BOOL CMyICQDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
//1.画主界面,关闭、放大、缩小等,qq头像,菜单按钮,显示状态,邮件等按钮。
//关键字:SetBmp
CRect rc;GetClientRect(&rc);
//Close Btn
btnClose.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-35,0,rc.right-5,19),this,DE_WM_CLOSE);
btnClose.SetBmp(IDB_BIT_CLOSE_NORMAL,IDB_BIT_CLOSE_HOVER,IDB_BIT_CLOSE_HDOWN,NULL);
//Cro Btn
btnCro.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-66,0,rc.right-36,19),this,DE_WM_CRO);
btnCro.SetBmp(IDB_BIT_CRO_NORMAL,IDB_BIT_CRO_HOVER,IDB_BIT_CRO_HDOWN,NULL);
//Min Btn
btnMin.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-97,0,rc.right-67,19),this,DE_WM_MIN);
btnMin.SetBmp(IDB_BIT_MIN_NORMAL,IDB_BIT_MIN_HOVER,IDB_BIT_MIN_HDOWN,NULL);
//Head Btn
btnHead.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(4,37,51,77),this,DE_WM_HEAD);
btnHead.SetBmp(IDB_BIT_HEAD,IDB_BIT_HEAD,IDB_BIT_HEAD,NULL);
//Menu Btn
btnMenu.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(0,rc.bottom-34,54,rc.bottom),this,DE_WM_MENU);
btnMenu.SetBmp(IDB_BIT_MENU_NORMAL,IDB_BIT_MENU_HOVER,IDB_BIT_MENU_HDOWN,NULL);
btnState.Create("隐身",WS_VISIBLE|WS_CHILD,CRect(70,50,115,70),this,DE_WM_STATE);
btnState.SetIcon(IDI_STATE,16);
btnMail.Create("(0)",WS_VISIBLE|WS_CHILD,CRect(125,50,165,70),this,DE_WM_MAIL);
btnMail.SetIcon(IDI_MAIL,16);
//2.画底部的按钮,手机,qq音乐,宠物,qq空间
//关键字:SetIcon
btnMobile.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(30,rc.bottom-55,50,rc.bottom-35),this,DE_WM_MOBILE);
btnMobile.SetIcon(IDI_MOBILE,16);
btnMusic.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(55,rc.bottom-55,75,rc.bottom-35),this,DE_WM_MUSIC);
btnMusic.SetIcon(IDI_MUSIC,16);
btnPet.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(80,rc.bottom-55,100,rc.bottom-35),this,DE_WM_PET);
btnPet.SetIcon(IDI_PET,16);
btnResearch.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(105,rc.bottom-55,125,rc.bottom-35),this,DE_WM_RESEARCH);
btnResearch.SetIcon(IDI_RESEARCH,16);
btnZone.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(130,rc.bottom-55,150,rc.bottom-35),this,DE_WM_ZONE);
btnZone.SetIcon(IDI_ZONE,16);
CRect rcFolderCtrl;rcFolderCtrl.SetRect(rc.left+35,rc.top+89,rc.right-4,rc.bottom-68);
//3.画联系人分组,我的好友,我的同学之类的
CGfxOutBarCtrl *gfx=new CGfxOutBarCtrl;
DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation
|CGfxOutBarCtrl::fSelHighlight;
gfx->Create(WS_VISIBLE|WS_CHILD,rcFolderCtrl,this,111111,dwf);
gfx->AddFolder("一生好友",0);
gfx->AddFolder("如今同学",1);
gfx->AddFolder("亲人姐弟",2);
gfx->AddFolder("大学老师",3);
gfx->AddFolder("东华志友",4);
gfx->AddFolder("Csdn小组",5);
gfx->AddFolder("100题讨论",6);
// gfx->InsertItem(0,0,"刘若英",0,0);
// gfx->InsertItem(0,1,"001",0,0);
// gfx->InsertItem(0,1,"002",0,0);
CInternet *net=new CInternet;
net->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,22222222);
net->ShowWindow(SW_HIDE);
//4.画主界面左边的拍拍,在线电影,之类的。
///Tab
//关键字:SetIcon
tabMem.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,90,35,300),this,DE_WM_MEM);
//tabMem.AddTabItem(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HOVER,IDI_PAI,NULL);
tabMem.SetBmp(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HDOWN);
tabMem.SetIcon(0,IDI_PAI,gfx);
tabMem.SetIcon(1,IDI_IT,net);
tabMem.SetIcon(2,IDI_ONE,NULL);
tabMem.SetIcon(3,IDI_HEART,NULL);
tabMem.SetIcon(4,IDI_ONLINE,NULL);
tabMem.m_iCurrentSelect=0;
//tabMem.SetIcon(IDI_PAI,NULL);
// CRect rect;GetClientRect(&rect);
// CMainTabCtrl *pTab=new CMainTabCtrl;
// pTab->Create(WS_VISIBLE|WS_CHILD,rect,this,10000);
// CFolderCtrl *pFolder=new CFolderCtrl;
// pFolder->Create(WS_VISIBLE|WS_CHILD,rect,pTab,20000);
// CFolderCtrl *pFolder=new CFolderCtrl;
// pFolder->Create(WS_VISIBLE|WS_CHILD,CRect(0,0,64,69),this,DE_WM_CLOSE);
return TRUE; // return TRUE unless you set the focus to a control
}
三、画顶角、中心段等处。
//关键字:CBitmap
void CMyICQDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
CRect rc;GetClientRect(&rc);
//rc.InflateRect(CSize(2,12));
CDC memDC;memDC.CreateCompatibleDC(&dc);
CBitmap bit;bit.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
CBitmap *OldBmp = memDC.SelectObject(&bit);
memDC.DrawEdge(rc,EDGE_SUNKEN,0);
//-------Title1
//Title1 Left
CBitmap bmpTitle1Left;bmpTitle1Left.LoadBitmap(IDB_BIT_TITLE1_LEFT);
DrawBmpByPoint(&memDC,bmpTitle1Left,CPoint(0,0));
//Title1 Mid
CBitmap bmpTitle1Mid;bmpTitle1Mid.LoadBitmap(IDB_BIT_TITLE1_MID);
DrawBmpByCRect(&memDC,bmpTitle1Mid,CRect(64,0,rc.right-79,22));
//Title1 Right
CBitmap bmpTitle1Right;bmpTitle1Right.LoadBitmap(IDB_BIT_TITLE1_RIGHT);
DrawBmpByPoint(&memDC,bmpTitle1Right,CPoint(rc.right-79,0));
//-------Title2
//Title2 Left
CBitmap bmpTitle2Left;bmpTitle2Left.LoadBitmap(IDB_BIT_TITLE2_LEFT);
DrawBmpByPoint(&memDC,bmpTitle2Left,CPoint(0,22));
//Title2 Mid
CBitmap bmpTitle2Mid;bmpTitle2Mid.LoadBitmap(IDB_BIT_TITLE2_MID);
DrawBmpByCRect(&memDC,bmpTitle2Mid,CRect(63,22,rc.right-115,67));
//Title2 Right
CBitmap bmpTitle2Right;bmpTitle2Right.LoadBitmap(IDB_BIT_TITLE2_RIGHT);
DrawBmpByPoint(&memDC,bmpTitle2Right,CPoint(rc.right-115,22));
//-------Center
//Center Left
CBitmap bmpCenterLeft;bmpCenterLeft.LoadBitmap(IDB_BIT_CENTER_LEFT);
DrawBmpByCRect(&memDC,bmpCenterLeft,CRect(0,89,35,rc.bottom-68));
//Center Right
CBitmap bmpCenterRight;bmpCenterRight.LoadBitmap(IDB_BIT_CENTER_RIGHT);
DrawBmpByCRect(&memDC,bmpCenterRight,CRect(rc.right-4,89,rc.right,rc.bottom-68));
//-------Bottom
//Bottom Left
CBitmap bmpBottomLeft;bmpBottomLeft.LoadBitmap(IDB_BIT_BOTTON_LEFT);
DrawBmpByPoint(&memDC,bmpBottomLeft,CPoint(0,rc.bottom-68));
//Bottom Mid
CBitmap bmpBottomMid;bmpBottomMid.LoadBitmap(IDB_BIT_BOTTOM_MID);
DrawBmpByCRect(&memDC,bmpBottomMid,CRect(73,rc.bottom-68,rc.right-68,rc.bottom));
//Bottom Right
CBitmap bmpBottomRight;bmpBottomRight.LoadBitmap(IDB_BIT_BOTTOM_RIGHT);
DrawBmpByPoint(&memDC,bmpBottomRight,CPoint(rc.right-68,rc.bottom-68));
//BitBlt
dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
//
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyICQDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//Change Client-Msg To Caption-Msg
UINT CMyICQDlg::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
UINT nHitTest = CDialog::OnNcHitTest(point);
if(nHitTest==HTCLIENT)
nHitTest=HTCAPTION;
return nHitTest;
}
//Set Bmp by Point
void CMyICQDlg::DrawBmpByPoint(CDC *pDC, CBitmap &mainBmp, const CPoint &pt)
{
CDC tmpDC;tmpDC.CreateCompatibleDC(pDC);
BITMAP tmpBmp;
mainBmp.GetBitmap(&tmpBmp);
CBitmap *oldBmp = tmpDC.SelectObject(&mainBmp);
pDC->BitBlt(pt.x,pt.y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY);
tmpDC.SelectObject(&oldBmp);
oldBmp->DeleteObject();
}
//Set Bmp By CRect
void CMyICQDlg::DrawBmpByCRect(CDC *pDC, CBitmap &bitRect, CRect &rect)
{
CDC tmpDC;tmpDC.CreateCompatibleDC(pDC);
BITMAP tmpBmp;
bitRect.GetBitmap(&tmpBmp);
CBitmap *oldBmp = tmpDC.SelectObject(&bitRect);
for(int y=rect.top;y<rect.bottom;y+=tmpBmp.bmHeight)
{
for(int x=rect.left;x<rect.right;x+=tmpBmp.bmWidth)
{
pDC->BitBlt(x,y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY);
}
}
tmpDC.SelectObject(&oldBmp);
oldBmp->DeleteObject();
}
//关闭
void CMyICQDlg::OnDeClose()
{
exit(0);
}
//最小化
void CMyICQDlg::Min()
{
ShowWindow(SW_MINIMIZE);
}
-------------------
完。July、二零一零年十二月二十二日。
分享到:
相关推荐
【标题】"仿QQ vc界面"揭示了这个项目的核心内容,即使用Visual C++(简称vc)来构建一个类似于腾讯QQ的用户界面。这是一项针对软件界面设计与实现的挑战,旨在模仿QQ的经典外观和交互体验,使得用户在使用这款应用...
2. 项目设置:打开VC2005,创建一个新的MFC应用程序项目,选择“对话框”作为应用程序类型。这将自动生成一个基于对话框的项目,包含一个默认的IDD_DIALOG1资源。 3. 设计界面:在资源视图中打开IDD_DIALOG1对话框...
总的来说,仿制QQ主界面涉及的知识点广泛,包括窗口编程、控件使用、图形绘制、事件处理、网络编程、用户交互设计、数据存储与同步、多线程并发以及资源管理等多个方面。通过实践这些技术,开发者可以创建出具有专业...
在本文中,我们将深入探讨如何使用Visual C++(VC)来实现一个仿QQ主界面的分组展开菜单功能。这个项目旨在创建一个类似QQ客户端的界面,用户可以通过点击不同的分组,如“我的好友”、“陌生人”和“黑名单”,来...
【标题】:“仿QQ框架VC代码”是一个基于Visual C++(VC)的编程项目,旨在模仿QQ即时通讯软件的基本架构。这个项目的核心是构建一个类似的用户界面和基础框架,为后续开发自己的通信功能提供起点。 【描述】:描述...
这个主题源自于一个名为"CGfxOutBarCtrl类仿QQ窗口界面的VC 源码.rar"的压缩包文件,它包含了一个用VC++实现的示例代码,用于构建具有QQ风格的界面。该源码可能是基于第三方类库CGfxOutBarCtrl的,由开发者beatarr和...
【VC高度仿真QQ界面源码】是一份专为Visual C++(VC)开发者设计的源代码,旨在提供一个高度仿真的QQ客户端用户界面。这份源码不仅实现了QQ的基本外观,而且在功能上也尽可能地接近真实的QQ应用。下面将详细阐述其中...
类似QQ主界面中点击展开、关闭的VC 窗口菜单,和QQ联系起来,功能立即高大上了,这种窗口目前已经不是什么新鲜物了,不过很实用,所以用的人才会多嘛,对于一个VC 新手来说,学会各种窗体菜单的制作技巧,对以后肯定...
该源码项目是一个基于Microsoft Visual C++(简称VC)开发的程序,旨在模仿QQ的用户界面和部分功能,为学习者提供了一个深入了解VC界面设计、控件应用以及网络编程的实际案例。通过研究这个源码,开发者可以提升在...
【基于VC的QQ界面程序】是一个使用Microsoft Visual C++(简称VC++)开发的QQ模拟应用,它展示了如何利用MFC(Microsoft Foundation Classes)库来构建一个类似QQ的图形用户界面。这个项目对于想要深入学习C++编程和...
在本文中,我们将深入探讨如何使用Visual C++(VC)来实现一个类似于QQ的界面效果。这个项目对于初学者来说是一个很好的学习实例,因为它展示了如何创建具有吸引力的用户界面,而对于经验丰富的开发者而言,它则提供...
VC++仿QQ2009主界面及托盘菜单(基于RingSDK) VC++仿QQ2009窗口主界面及托盘处的图标右键菜单,特别是圆角窗体的实现,值得借鉴。这里请注意,本程序是基于RingSDK界面类库,编译需要此类库支持,本程序也正是...
本文将深入探讨如何使用MFC实现类似QQ的窗口靠边自动收缩隐藏效果,这是一种常见的用户界面(UI)特性,可以提高用户体验。 首先,我们需要了解MFC中的CWnd类,它是所有窗口类的基础。当我们创建一个MFC应用时,...
本项目标题"vc6 DirectUI 模仿QQ界面"意味着我们将探讨如何使用VC6和DirectUI库来创建一个类似QQ的用户界面。QQ作为一款流行的即时通讯软件,其用户界面设计简洁且功能丰富,模仿它的界面可以学习到很多关于UI设计和...
本教程将详细讲解如何使用Microsoft Visual C++(简称VC++)来制作一个仿QQ窗口界面,旨在帮助开发者理解和掌握Windows应用程序界面设计的基本技巧。 首先,我们看到文件名“MICQ.clw”,这可能是项目中的类库文件...
1. **对话框设计**:QQ的主界面是一个对话框,包含登录、个人信息、联系人列表等多个区域。在VC中,我们可以通过MFC的CDialog类创建对话框,并使用资源编辑器设计对话框布局。可以添加静态文本控件(CStatic)显示...
这将创建一个新的对话框模板,作为QQ主界面的基础。 2. 添加控件:通过资源编辑器,可以添加各种控件,如按钮、文本框、图像控件等,以模拟QQ的登录界面。例如,可以添加两个文本框(IDC_EDIT_USERNAME和IDC_EDIT_...
【标题】"仿QQ界面"涉及的是在微软的Visual C++ 6.0(简称VC6.0)集成开发环境中创建一个与腾讯QQ相似的用户界面。这是一个编程项目,目标是模仿QQ的外观和交互体验,使用户在使用时有熟悉的感觉。 【描述】"VC6.0...
在本项目中,“c++仿QQ界面 .rar_Vc_im_the code”是一个使用C++编程语言,基于Microsoft Foundation Classes (MFC)库实现的QQ聊天界面的模拟代码。MFC是微软提供的一种C++类库,它封装了Windows API,使得开发者...
首先,VC++中的MFC是一个C++类库,它为Windows应用程序开发提供了一套框架。MFC封装了Windows API,使得开发者可以更高效地构建Windows应用程序,包括对话框、窗口、菜单和控件等元素。在实现QQ界面时,我们需要利用...