`
v_JULY_v
  • 浏览: 69395 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

100个vc小项目开发:一、仿qq主界面

阅读更多

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界面

    【标题】"仿QQ vc界面"揭示了这个项目的核心内容,即使用Visual C++(简称vc)来构建一个类似于腾讯QQ的用户界面。这是一项针对软件界面设计与实现的挑战,旨在模仿QQ的经典外观和交互体验,使得用户在使用这款应用...

    基于VC2005的QQ 主界面(XP风格界面)代码

    2. 项目设置:打开VC2005,创建一个新的MFC应用程序项目,选择“对话框”作为应用程序类型。这将自动生成一个基于对话框的项目,包含一个默认的IDD_DIALOG1资源。 3. 设计界面:在资源视图中打开IDD_DIALOG1对话框...

    vc 仿QQ主界面(好友,状态栏,聊天界面等)

    总的来说,仿制QQ主界面涉及的知识点广泛,包括窗口编程、控件使用、图形绘制、事件处理、网络编程、用户交互设计、数据存储与同步、多线程并发以及资源管理等多个方面。通过实践这些技术,开发者可以创建出具有专业...

    VC 仿QQ主界面分组展开的菜单.rar

    在本文中,我们将深入探讨如何使用Visual C++(VC)来实现一个仿QQ主界面的分组展开菜单功能。这个项目旨在创建一个类似QQ客户端的界面,用户可以通过点击不同的分组,如“我的好友”、“陌生人”和“黑名单”,来...

    仿QQ框架VC代码

    【标题】:“仿QQ框架VC代码”是一个基于Visual C++(VC)的编程项目,旨在模仿QQ即时通讯软件的基本架构。这个项目的核心是构建一个类似的用户界面和基础框架,为后续开发自己的通信功能提供起点。 【描述】:描述...

    CGfxOutBarCtrl类仿QQ窗口界面的VC 源码.rar_VC界面_beatarr_c++仿qq界面_causeb7w

    这个主题源自于一个名为"CGfxOutBarCtrl类仿QQ窗口界面的VC 源码.rar"的压缩包文件,它包含了一个用VC++实现的示例代码,用于构建具有QQ风格的界面。该源码可能是基于第三方类库CGfxOutBarCtrl的,由开发者beatarr和...

    VC高度仿真QQ界面源码

    【VC高度仿真QQ界面源码】是一份专为Visual C++(VC)开发者设计的源代码,旨在提供一个高度仿真的QQ客户端用户界面。这份源码不仅实现了QQ的基本外观,而且在功能上也尽可能地接近真实的QQ应用。下面将详细阐述其中...

    类似QQ主界面中点击展开、关闭的VC 窗口菜单.rar

    类似QQ主界面中点击展开、关闭的VC 窗口菜单,和QQ联系起来,功能立即高大上了,这种窗口目前已经不是什么新鲜物了,不过很实用,所以用的人才会多嘛,对于一个VC 新手来说,学会各种窗体菜单的制作技巧,对以后肯定...

    仿QQ界面和功能的VC源码,学习VC做界面,VC控件,网络方面的好源码

    该源码项目是一个基于Microsoft Visual C++(简称VC)开发的程序,旨在模仿QQ的用户界面和部分功能,为学习者提供了一个深入了解VC界面设计、控件应用以及网络编程的实际案例。通过研究这个源码,开发者可以提升在...

    基于VC的QQ界面程序

    【基于VC的QQ界面程序】是一个使用Microsoft Visual C++(简称VC++)开发的QQ模拟应用,它展示了如何利用MFC(Microsoft Foundation Classes)库来构建一个类似QQ的图形用户界面。这个项目对于想要深入学习C++编程和...

    用VC实现的模拟QQ界面效果

    在本文中,我们将深入探讨如何使用Visual C++(VC)来实现一个类似于QQ的界面效果。这个项目对于初学者来说是一个很好的学习实例,因为它展示了如何创建具有吸引力的用户界面,而对于经验丰富的开发者而言,它则提供...

    VC++仿QQ2009主界面及托盘菜单(基于RingSDK

    VC++仿QQ2009主界面及托盘菜单(基于RingSDK) VC++仿QQ2009窗口主界面及托盘处的图标右键菜单,特别是圆角窗体的实现,值得借鉴。这里请注意,本程序是基于RingSDK界面类库,编译需要此类库支持,本程序也正是...

    MFC仿QQ窗口靠边自动收缩隐藏效果

    本文将深入探讨如何使用MFC实现类似QQ的窗口靠边自动收缩隐藏效果,这是一种常见的用户界面(UI)特性,可以提高用户体验。 首先,我们需要了解MFC中的CWnd类,它是所有窗口类的基础。当我们创建一个MFC应用时,...

    vc6 DirectUI 模仿QQ界面

    本项目标题"vc6 DirectUI 模仿QQ界面"意味着我们将探讨如何使用VC6和DirectUI库来创建一个类似QQ的用户界面。QQ作为一款流行的即时通讯软件,其用户界面设计简洁且功能丰富,模仿它的界面可以学习到很多关于UI设计和...

    visual c++ vc制作仿qq窗口界面.zip

    本教程将详细讲解如何使用Microsoft Visual C++(简称VC++)来制作一个仿QQ窗口界面,旨在帮助开发者理解和掌握Windows应用程序界面设计的基本技巧。 首先,我们看到文件名“MICQ.clw”,这可能是项目中的类库文件...

    VC制作qq那样的界面

    1. **对话框设计**:QQ的主界面是一个对话框,包含登录、个人信息、联系人列表等多个区域。在VC中,我们可以通过MFC的CDialog类创建对话框,并使用资源编辑器设计对话框布局。可以添加静态文本控件(CStatic)显示...

    visual c++ QQ界面的模拟实现

    这将创建一个新的对话框模板,作为QQ主界面的基础。 2. 添加控件:通过资源编辑器,可以添加各种控件,如按钮、文本框、图像控件等,以模拟QQ的登录界面。例如,可以添加两个文本框(IDC_EDIT_USERNAME和IDC_EDIT_...

    仿QQ界面

    【标题】"仿QQ界面"涉及的是在微软的Visual C++ 6.0(简称VC6.0)集成开发环境中创建一个与腾讯QQ相似的用户界面。这是一个编程项目,目标是模仿QQ的外观和交互体验,使用户在使用时有熟悉的感觉。 【描述】"VC6.0...

    c++仿QQ界面 .rar_Vc_im_the code

    在本项目中,“c++仿QQ界面 .rar_Vc_im_the code”是一个使用C++编程语言,基于Microsoft Foundation Classes (MFC)库实现的QQ聊天界面的模拟代码。MFC是微软提供的一种C++类库,它封装了Windows API,使得开发者...

    vc实现QQ界面的源代码

    首先,VC++中的MFC是一个C++类库,它为Windows应用程序开发提供了一套框架。MFC封装了Windows API,使得开发者可以更高效地构建Windows应用程序,包括对话框、窗口、菜单和控件等元素。在实现QQ界面时,我们需要利用...

Global site tag (gtag.js) - Google Analytics