当前位置: 首页 > news >正文

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、二零一零年十二月二十二日。

相关文章:

  • Android 数据库框架OrmLite的使用(一)
  • nyoj--1233--差值(贪心模拟+大数)
  • “滑机约拍”--第二阶段冲刺(2)
  • android学习SeekBar的使用
  • 2010年走到转折点的IT人:他们被迫改变
  • 如何消除inline-block元素间间距问题(转)
  • 经典算法研究系列:一、A*搜索算法
  • 基于Objectvie-C基础教程(第2版)做的笔记
  • S3C2440-LCD图片显示
  • 1203有穷自动机
  • eclipse 导入tomcat7源码
  • 硬件黑客
  • Python生成器实现杨辉三角打印
  • jQuery获取表格第一列的值
  • linux 安装mysql
  • CEF与代理
  • flask接收请求并推入栈
  • gf框架之分页模块(五) - 自定义分页
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • javascript面向对象之创建对象
  • JavaScript学习总结——原型
  • Leetcode 27 Remove Element
  • Linux中的硬链接与软链接
  • PAT A1120
  • Python 基础起步 (十) 什么叫函数?
  • Sequelize 中文文档 v4 - Getting started - 入门
  • storm drpc实例
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 模型微调
  • 前端设计模式
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 设计模式(12)迭代器模式(讲解+应用)
  • 手写双向链表LinkedList的几个常用功能
  • 一文看透浏览器架构
  • # Java NIO(一)FileChannel
  • # 飞书APP集成平台-数字化落地
  • #stm32整理(一)flash读写
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (六)c52学习之旅-独立按键
  • (十六)Flask之蓝图
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 版本不支持的问题
  • .NET下的多线程编程—1-线程机制概述
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @DataRedisTest测试redis从未如此丝滑
  • @Data注解的作用
  • []我的函数库
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory