由于需求,需要写个类似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. 安装ECMall后报PHP Strict Standards错误,请问如何解决

    Strict Standards: Non-static method ECMall::startup() should not be called statically in /htdocs/ecm ...

  2. 【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)

    [题意] n个点,m条边,求最小生成树的值和次小生成树的值. InputThe Input starts with the number of test cases, T (1 < T < ...

  3. <c:if>判断参数是否为空

    EL表达式判断字符串是否为空: <c:if test="${empty str}"> str为空</c:if> <c:if test="${ ...

  4. perl 监控数据库用到的数据结构

    [root@yun1 test]# cat a1.pl my $h={'192.168.11.187'=>['root','1234567'], '192.168.5.7' =>['roo ...

  5. oracle core04_undo

    undo信息 oracle中undo的信息主要完成下面的功能: 1,构建块一致性读 2,回滚事务 UBA:undo block address 1,块中的事务槽ITL中的UBA表示这个ITL所在的bl ...

  6. bzoj1202

    很久以前写的,忘补解题报告了首先似乎dfs就可以了吧?但还有更高大上的做法其实这东西就是告诉sum[y]-sum[x-1]=z然后给出一堆看成不成立可以用并查集,维护每个点到father点的差即可 . ...

  7. JSONP跨域的原理解析(转)

    JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略). ...

  8. HDU --1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  9. A. Difference Row

    A. Difference Row time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  10. ARM学习笔记4——加载存储指令

    一.字数据传送指令 作用:用于把单一的数据传入或者传出一个寄存器. 1.LDR指令 1.1.作用 根据<addr_mode>所确定的地址模式从内存中将一个32位的字段读取到目标寄存器< ...