仿QQ迷你首页(VC++,MFC)(迷你资讯)的开发与实现(源代码)
由于需求,需要写个类似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)(迷你资讯)的开发与实现(源代码)的更多相关文章
- 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
使用CoordinatorLayout打造各种炫酷的效果 自定义Behavior -- 仿知乎,FloatActionButton隐藏与展示 NestedScrolling 机制深入解析 一步步带你读 ...
- Windows开发之VC++仿QQ迷你首页(迷你资讯)
技术:VC++,MFC,WTL,,C++,Windows 概述 之前由于需求和兴趣,需要实现类似QQ迷你资讯首页的东西,看起来很酷,于是就写了个实现方案,主要还是基于WIndows C++ 和MF ...
- Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)
Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...
- Html - 仿QQ空间右下角工具浮动块
仿QQ空间右下角工具浮动块 <style type="text/css"> .cy-tp-area>.cy-tp-fixbtn>.cy-tp-text { ...
- 基于jQuery仿QQ音乐播放器网页版代码
基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="m ...
- 继上一篇bootstrap框架(首页)弄的资讯页面
还是和上一篇首页一样给出每一步的注解: 做的有点简单,但是,以后还是会加深的.毕竟是初学者嘛! <html lang="zh-cn"> <head> ...
- 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口
印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...
- iOS仿QQ侧滑菜单、登录按钮动画、仿斗鱼直播APP、城市选择器、自动布局等源码
iOS精选源码 QQ侧滑菜单,右滑菜单,QQ展开菜单,QQ好友分组 登录按钮 3分钟快捷创建高性能轮播图 ScrollView嵌套ScrolloView(UITableView .UICollecti ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 仿QQ大战—界面篇
之前在<仿QQ大战-服务器的搭建(ServerSocket)>中实现了服务器的搭建,以及一个简单地传递数据的实现,现在就是来实现类似与QQ聊天通信的功能.首先是界面的实现: 首先:服务器和 ...
随机推荐
- 形形色色Node工程Angular2
最近项目要用的 一些无关紧要的文件夹, demo是一些示例, dist是webpack打包后发布的代码,server是用node启动服务,typings和tsconfig是一些ts配置. npm in ...
- Z-stack之OSAL初始化流程
转自点击打开链接 我使用的协议栈版本及例子信息: ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\Sam ...
- 【网络流24题】No.19 负载平衡问题 (费用流)
[题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input ...
- efront二次开发记要
efront系统是一套开源的在线学习系统,是用PHP编写的,内含“考试”功能.该系统的开源的是社区版,虽然看上去功能强大,但使用起来却很不符合国情.为了让公司使用,先做了一次最简化的二次开发,由于是最 ...
- HNOI2008 and ZJOI2006 排名系统
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1311 Solved: 337[Submit][Statu ...
- (转载)c库不正确问题
(转载)http://blog.csdn.net/piratejk/article/details/6115748 在linux下面变成,有时候在一个发行版本上编译通过,并且可以运行,但是将程序拷贝到 ...
- jquery mobile (一)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 算法 python实现(二) 冒泡排序
首先说一下 冒泡排序 是怎么做的: 总体的想法是,把小的轻的浮上前面去,把大的重的沉到后面去. 这样设置两个指针,i j, 1. i标识每一趟循环.这一趟的目的是把后面那些未排序的数列中最小的浮上前面 ...
- winform代码反编译后图片等资源文件恢复解决方案
用Reflector工具反编译的winform代码,图片等资源文件不能很好的反编译成功. 这里有一个笨的解决方案.首先我们要了解图片资源当初加入到工程的几种方式,及他们所在的位置. 一般winform ...
- 对使命召唤OL游戏中队友能相互救治的动作设定的感慨
很偶然的在网吧看到有人在玩一个枪战游戏,场景特别真实特别吸引人,后来留意到是使命召唤OL.我使用QQ帐号(是腾讯代理)玩了一次,觉得游戏做的确实精致,子弹打击效果和人物被子弹击中的效果特别真实,大家可 ...