仿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聊天通信的功能.首先是界面的实现: 首先:服务器和 ...
随机推荐
- mytbatis配置多数据源
http://blog.zous-windows.com/archives/207.html http://www.oschina.net/question/144055_141255?sort=ti ...
- Android UI:机智的远程动态更新策略
问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...
- java自定义接口
compareTo:根据该数值是小于.等于.或大于 val 返回 -1.0 或 1:
- 17.1.1.2 Setting the Replication Slave Configuration
17.1.1.2 Setting the Replication Slave Configuration 在一个复制slave, 你必须创建一个唯一的server ID,如果这个没有做,slave设置 ...
- ajax 初始化请求前携带参数
$(function () { function SetAjax(wxOpenId, departCode) { $.ajaxSetup({ xhrF ...
- ExecutorService生命周期
ExecutorService接口继承了Executor接口,定义了一些生命周期的方法 public interface ExecutorService extends Executor { void ...
- 利用if else来运行咱们结婚吧
static void Main(string[] args) { while (true) { string ...
- POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)
描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wo ...
- Web三维技术:Flash Builder+away3d平台搭建(含演示视频)
转自:http://www.cnblogs.com/beer/archive/2011/07/08/2101492.html 前言:作为页面中实验设备的显示层,需要一个swf作为显示的UI.虽然可以用 ...
- HDU-3719 二叉搜索树
http://acm.hdu.edu.cn/showproblem.php?pid=3791 用数组建立二叉树: 二叉搜索树 Time Limit: 2000/1000 MS (Java/Others ...