由于需求,需要写个类似QQ迷你资讯首页的东西,就花了一点时间写了写,软件效果截图如下:

程序的主要核心代码如下:

程序的全部源代码下载地址http://download.csdn.net/download/jczmdeveloper/6953161

void CMiniNewsDlg::DrawDialog()
{
m_nFrameCY = GetSystemMetrics(SM_CYFIXEDFRAME);//获取对话框边框的高度
m_nFrameCX = GetSystemMetrics(SM_CXDLGFRAME);//获取对话边框的宽度
if(GetStyle()&WS_BORDER)//获取对话框是否有边框
{
m_nBorderCY = GetSystemMetrics(SM_CYBORDER) + m_nFrameCY;
m_nBorderCX = GetSystemMetrics(SM_CXBORDER) +m_nFrameCX;
}
else
{
m_nBorderCY = m_nFrameCY;
m_nBorderCX = m_nFrameCX;
}
m_nTitleBarCY = GetSystemMetrics(SM_CYCAPTION) + m_nBorderCY;//计算标题栏高度
m_nTitleBarCX =m_nBorderCX; CRect winRect,factRect;
GetWindowRect(&winRect);
factRect.CopyRect(CRect(0,0,winRect.Width(),winRect.Height()));
CWindowDC windowsDC(this);//获取窗口设备上下文
//获取整个MFC窗口的高度和宽度
m_nWinWidth = winRect.Width();
m_nWinHeight = winRect.Height();
//绘制对话框标题栏位图
DisplayBmp(0,0,m_nWinWidth,m_nTitleBarCY,IDB_LEFTTITLE);
//绘制对话框标题栏左端的logo图标
DisplayBmp(3,0,26,m_nTitleBarCY,IDB_APPICON); //绘制对话框左边框位图
DisplayBmp(0,m_nTitleBarCY,m_nBorderCX,m_nWinHeight-m_nBorderCY,IDB_LEFTBAR);
//绘制对话框底边框位图
DisplayBmp(m_nBorderCX,m_nWinHeight-m_nBorderCX,m_nWinWidth-2*m_nBorderCX,m_nBorderCX,IDB_BOTTOMBAR);
//绘制对话框左边框位图
DisplayBmp(m_nWinWidth-m_nBorderCX,m_nTitleBarCY,m_nBorderCX,m_nWinHeight-m_nBorderCY,IDB_RIGHTBAR);
//给对话框绘制最小化按钮
DisplayBmp(m_nWinWidth-26*2-5,0,26,26,IDB_MINBTN1);
//给对话框绘制关闭按钮
DisplayBmp(m_nWinWidth-26-5,0,26,26,IDB_CLOSEBTN1); DrawTitleText();
ReleaseDC(&windowsDC);
}
//=====================在指定位置显示bmp位图图像
void CMiniNewsDlg::DisplayBmp(int x,int y,int w,int h,int nID)
{
CRect winRC;
CDC* pDC=GetWindowDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
BITMAPINFO bmpInfo;
CBitmap bmp;
GetWindowRect(&winRC);
bmp.LoadBitmap(nID);
bmp.GetObject(sizeof(BITMAPINFO),&bmpInfo);
int nBmpCX = bmpInfo.bmiHeader.biWidth;
int nBmpCY = bmpInfo.bmiHeader.biHeight;
memDC.SelectObject(bmp);
pDC->StretchBlt(x,y,w,h,
&memDC,0,0,nBmpCX,nBmpCY,SRCCOPY);//在窗口中绘制位图
bmp.DeleteObject();
ReleaseDC(pDC);
}
void CMiniNewsDlg::SetTitleText(CString strTitle)
{
this->m_strTitle = strTitle + "-小蔡电脑助手";
}
//绘制标题栏标题文本内容
void CMiniNewsDlg::DrawTitleText()
{ CDC* pDC= GetWindowDC();
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
pDC->SetTextAlign(TA_CENTER);
CRect rect;
GetClientRect(&rect);
CSize szText = pDC->GetTextExtent(m_strTitle);
CFont* font,*fOldFont;
font = new CFont;
font->CreateFont(12,0,0,0,FW_BOLD,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,_T("宋体"));
fOldFont = pDC->SelectObject(font);
CRect winRect;
GetWindowRect(&winRect);
pDC->TextOut(winRect.Width()/2,6.5,m_strTitle);
pDC->SelectObject(fOldFont);
ReleaseDC(pDC);
} void CMiniNewsDlg::OnNcPaint()
{
// TODO: 在此处添加消息处理程序代码
DrawDialog();
// 不为绘图消息调用 CDialog::OnNcPaint()
} void CMiniNewsDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
OnNcPaint();
// TODO: 在此处添加消息处理程序代码
} void CMiniNewsDlg::OnNcMouseMove(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect minRC,moreRC,closeRC,winRC,cleanRC,toolkitRC,shoppingRC;
GetWindowRect(&winRC);
closeRC.CopyRect(CRect(m_nWinWidth-26,0,m_nWinWidth-26+26,26));
minRC.CopyRect(CRect(m_nWinWidth-26*2,0,m_nWinWidth-26*2+26,26)); point.Offset(-winRC.left,-winRC.top);//由于point为屏幕坐标,这里将其转换为窗口坐标
if(closeRC.PtInRect(point))//鼠标在关闭按钮上时,更改按钮显示的位图
{
m_bMouseOnCloseBtn = TRUE;
m_bMouseOnMinBtn =FALSE;
m_bMouseOnMoreBtn = FALSE;
DisplayBmp(m_nWinWidth-26-5,0,26,26,IDB_CLOSEBTN2);
DisplayBmp(m_nWinWidth-26*2-5,0,26,26,IDB_MINBTN1);
}
else if(minRC.PtInRect(point))//鼠标在最小化按钮上时,更改按钮显示的位图
{
m_bMouseOnMinBtn =TRUE;
m_bMouseOnCloseBtn = FALSE;
DisplayBmp(m_nWinWidth-26-5,0,26,26,IDB_CLOSEBTN1);
DisplayBmp(m_nWinWidth-26*2-5,0,26,26,IDB_MINBTN2);
}
CDialog::OnNcMouseMove(nHitTest, point);
}
void CMiniNewsDlg::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(m_bMouseOnCloseBtn)
{
this->SendMessage(WM_CLOSE);
}
if(m_bMouseOnMinBtn)
{
this->ShowWindow(SW_MINIMIZE);
m_bMouseOnMinBtn = FALSE;
}
CDialog::OnNcLButtonUp(nHitTest, point);
} void CMiniNewsDlg::OnNcMouseLeave()
{
// 该功能要求使用 Windows 2000 或更高版本。
// 符号 _WIN32_WINNT 和 WINVER 必须 >= 0x0500。
// TODO: 在此添加消息处理程序代码和/或调用默认值
DisplayBmp(m_nWinWidth-26*2-5,0,26,26,IDB_MINBTN1);
DisplayBmp(m_nWinWidth-26-5,0,26,26,IDB_CLOSEBTN1);
m_bMouseOnMinBtn =FALSE;
m_bMouseOnCloseBtn = FALSE;
CDialog::OnNcMouseLeave();
} void CMiniNewsDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(!(m_bMouseOnMinBtn||m_bMouseOnCloseBtn))
CDialog::OnNcLButtonDown(nHitTest, point);
} HBRUSH CMiniNewsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性
HBRUSH brush=CreateSolidBrush(m_bkColor);
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
//设置背景为透明
pDC->SetTextColor(RGB(255,255,255)); //设置字体颜色
pDC->SetBkColor(m_bkColor);
//pWnd->SetFont(cFont); //设置字体
hbr = (HBRUSH)brush;
//创建画刷
break;
case CTLCOLOR_BTN:
pDC->SetBkMode(TRANSPARENT);
//设置背景为透明
pDC->SetTextColor(RGB(255,255,255)); //设置字体颜色
pDC->SetBkColor(m_bkColor);
//pWnd->SetFont(cFont); //设置字体
hbr = (HBRUSH)brush;
//创建画刷
break; } // TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}

  程序的完整源码下载地址http://www.demodashi.com/demo/14683.html

仿QQ迷你首页(VC++,MFC)(迷你资讯)的开发与实现(源代码)的更多相关文章

  1. 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页

    使用CoordinatorLayout打造各种炫酷的效果 自定义Behavior -- 仿知乎,FloatActionButton隐藏与展示 NestedScrolling 机制深入解析 一步步带你读 ...

  2. Windows开发之VC++仿QQ迷你首页(迷你资讯)

    技术:VC++,MFC,WTL,,C++,Windows   概述 之前由于需求和兴趣,需要实现类似QQ迷你资讯首页的东西,看起来很酷,于是就写了个实现方案,主要还是基于WIndows C++ 和MF ...

  3. Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)

    Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...

  4. Html - 仿QQ空间右下角工具浮动块

    仿QQ空间右下角工具浮动块 <style type="text/css"> .cy-tp-area>.cy-tp-fixbtn>.cy-tp-text { ...

  5. 基于jQuery仿QQ音乐播放器网页版代码

    基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m ...

  6. 继上一篇bootstrap框架(首页)弄的资讯页面

    还是和上一篇首页一样给出每一步的注解: 做的有点简单,但是,以后还是会加深的.毕竟是初学者嘛! <html lang="zh-cn">   <head>   ...

  7. 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口

    印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...

  8. iOS仿QQ侧滑菜单、登录按钮动画、仿斗鱼直播APP、城市选择器、自动布局等源码

    iOS精选源码 QQ侧滑菜单,右滑菜单,QQ展开菜单,QQ好友分组 登录按钮 3分钟快捷创建高性能轮播图 ScrollView嵌套ScrolloView(UITableView .UICollecti ...

  9. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  10. 仿QQ大战—界面篇

    之前在<仿QQ大战-服务器的搭建(ServerSocket)>中实现了服务器的搭建,以及一个简单地传递数据的实现,现在就是来实现类似与QQ聊天通信的功能.首先是界面的实现: 首先:服务器和 ...

随机推荐

  1. hdu 3072

    强连通分量——tarjin 算法 这道题和前面那道hdu 2767唯一不同就是,2767需要找出最小数量的边使图成为连通分量,而这个题需要一点点贪心的思想在里面,它需要求出代价最小的边使图成为连通分量 ...

  2. 深入浅出Z-Stack 2006 OSAL多任务资源分配机制

    转自深入浅出Z-Stack 2006 OSAL多任务资源分配机制 一.概述 OSAL (Operating System Abstraction Layer),翻译为"操作系统抽象层&quo ...

  3. Ubuntu 安装基础教程

    转自:http://teliute.org/linux/Ubsetup/index.html 1.进入 live cd 桌面  1)设置好启动后,断开网络,然后重启动计算机,可以用硬盘启动,也可以刻成 ...

  4. 網站SSL加密原理簡介(2张图,握手有9个步骤,解释的很清楚)

    Secure Socket Layer說明 SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸.最早是Netscape公司所提出,SSL的目 ...

  5. PHP的MVC框架 深入解析

    本篇先介绍一下php的MVC实现原理,我们框架的MVC部分也是基于此原理实现的,但是今天的代码并不是框架内的代码,仅仅为说明原理     一.文件结构 建立3个文件夹 controller文件夹存放控 ...

  6. jQueryEasyUI中DataGrid的height,width,fit,fitColumns属性

    height: 600, //不指定则默认垂直包裹,指定了则固定 width:1200,//不指定则水平100%平铺,指定了则固定 fit:false,//true:高度填充父窗体,忽略height属 ...

  7. UVA_11178_Morley's_Theorem_(计算几何基础)

    描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=23&pag ...

  8. 微软Sharepoint的一些缺点

    转:http://bbs.tianya.cn/post-144-566491-1.shtml 微软Sharepoint的一些缺点(一) 微软Sharepoint的一些缺点 关于SharePoint,它 ...

  9. ArcServer,ArcSDE,ArcIMS,ArcEngine

    ArcServer,ArcSDE,ArcIMS,ArcEngine是ESRI的四种产品ArcGIS Server 与 ArcIMS功能相似,是将地图发布成服务供调用的ArcSDE 是空间数据引擎,是将 ...

  10. IIS服务器设置造成引用第三方权限不足问题

    使用IIS部署站点,报以下错误: Exception Details: System.Security.SecurityException: That assembly does not allow ...