//将屏幕信息转换为位图结构
  CDC *pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象
  int width=;
  int height=;
  CDC memDC;//定义一个内存画布
  memDC.CreateCompatibleDC(pDeskDC);//创建一个兼容的画布
  CBitmap bmp;
  bmp.CreateCompatibleBitmap(pDeskDC,width,height);//创建兼容位图
  memDC.SelectObject(&bmp);//选中位图对象
  memDC.BitBlt(,,width,height,pDeskDC,,,SRCCOPY);//将屏幕信息绘制到位图中
  。。。。
  char* pData=new char[bitmap,bmWidthBytes* bitmap,bmHeight];//分配内存,存储位图的实际数据
  //获取位图的实际数据
  ::GetDIBits(memDC.m_hDC,bmp,,bitmap.bmHeight,pData,pBInfo,DIB_RGB_COLORS);
  // 客户端SOCKET通信
  #include "Winsock2.h"
  #pragma comment(lib,"Ws2_32.lib");
  // 连接库文件
  WSDATA data;
  WSAStartup(,&data);//初始化套接字
  hostent* phost=gethostbyname("");//获取本机信息
  char* localIP=inet_ntoa(*(struct in_addr*)*phost->h_addr_list);//获取IP地址
  sockaddr_in addr;
  //定义一个套接字地址
  addr.sin_addr.S_un.S_addr=inet_addr(localIP);//设置IP地址
  addr.sin_port=htons();//设置端口号
  m_Socket=socket(AF_INET,SOCK_DGRAM,);//创建UDP套接字
  if(m_Socket==INVALID_SOCKET)
  {
  MessageBox("套接字创建失败");
  //如果套接字创建失败,弹出对话框
  }
  char*len="";
  if(setsockopt(m_Socket,SQL_SOCKET,SO_SNDBUF,len,)!=)
  {
  MessageBox("设置失败");
  }
  if(bind(m_Socket,(sockeaddr*)&addr,sizeof(addr))==SOCKET_ERROR)//绑定套接字
  {
  MessageBox("套接字绑定失败");
  }
  char* len="";
  if(setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,)!=)
  {//设置套接字发送缓冲区大小
  MessageBox("设置失败");
  }
  if(bind(m_Socket,(sockaddr*)&addr,sizeof(addr)==SOCKET_ERROR)//绑定套接字
  {MessageBox("套接字绑定失败");
  }
  //在创建成功后可以调用sendto方法发送数据。
  sendto(m_Socket,pPackage,packsize,,(sockaddr*)&addr,sizeof(addr));
  ////////////////////////////////////////////////////////////////////////////////////////////
  //主窗体设计
  hostent* phost=gethostbyname("");
  char* localIP=inet_ntoa(*(struct in_addr*)*phost->h_addr_list);//获取IP地址
  sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_addr.S_addr=inet_addr(localIP);
  addr.sin_port=htons();
  m_Socket=socket(AF_INET,SOCK_DGRAM,);
  if(bind(m_Socket,(sockaddr*)&addr,sizeof(addr)==SOCKET_ERROR)//绑定套接字
  {
  MessageBox("套接字绑定失败");
  }
  /////////////////////////////////////////////
  sockaddr_in addr;//定义网络地址
  addr.sin_family=AF_INET;//设置网络地址类型
  addr.sin_port=htons(m_ClientPort);//设置网络端口号
  addr.sin_addr.S_un.S_addr=inet_addr(m_ClientIP.GetBuffer());//设置IP
  int size=sizeof(addr);//获取地址大小
  char* pData="Confirm";//定义发送的信息
  sendto(m_Socket,pData,,,(socketaddr*)&addr,size);//发送数据
  atoi()//将编辑文本转换为整数。
  CFont newFont,*oldFont;
  //声明新字体对象,和旧字体对象。
  gameFrame::gameFrame()
  {
  Rect rect;
  Create(NULL,"绘图窗口");
  //建立窗口
  CClientDC dc(this);//将DC的数据映射到窗口
  int width=dc.GetDeviceCaps(HORZRES);//取得屏幕区的宽度
  int height=dc.GetDeviceCaps(VERTRES);//取得屏幕区的高度
  GetWindowRect(&rect);//取得窗口区矩形的大小
  width=(width-(rect.right-rect.left))/;
  height=(height-(rect.bottom-rect.top))/;
  MoveWindow(width,//移动窗口位置
  height,
  (rect.right-rect.left),
  (rect.bottom-rect.top),
  true);
  //在这里建立Cfont类对象newFont
  newFont.CreateFont(,,,,,
  TRUE,TRUE,FALSE,
  DEFAULT_CHARSET,
  OUT_CHARCTER_PRECIS,
  CLIP_DEFAULT_PRECIS,
  DEFAULT_QUALITY,
  FIXED_PITCH|FF_MODERN,
  "楷体");
  }
  //////////////////////////////////////
  LoadImage()//加载位图
  CPaintDC dc(this);//建立响应WM_PAINT消息的DC
  CDC *mdc=new CDC;
  //声明内存dc
  CBitmap * bitmap=new CBitmap;//声明CBitmap位图对象
  mdc->CreateCompatibleDC(&dc);//建立于dc兼容的DC
  bitmap->m_hObject=(HBITMAP)::LoadImage(NULL,"/bground.bmp",
  IMAGE_BITMAP,,,LR_LOADFROMFILE);//加载位图
  mdc->SelectObject(bitmap);//将位图对象指定到mdc中
  //镂空原理的和运算与或运算。
  OnPaint()
  {
  CPaintDC dc(this);
  mdc->SelectObject(bgbmp);//取得背景图
  //贴上背景图
  dc.BitBlt(,,rect,right,rect.bottom,mdc,,,SRCCOPY);
  mdc->SelectObject(bitmap);//取得原位图
  //将蒙版与背景图做AND运算
  dc.BitBlt(,,,,mdc,,,SRCAND);
  //将要镂空的图与背景图做OR运算
  dc.BitBlt(,,,,mdc,,,SRCPAINT);
  }
  //服务器端SOCKET
  BOOL CServerDlg::OnInitDialog()
  {
  //获取本机IP
  hostent* phost=gethostbyname("");
  char* localIP=inet_ntoa(*(struct in_addr *)*phost->h_addr_list);
  sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_addr.S_un.S_addr=inet_addr(localIP);
  addr.sin_port=htons();
  //创建套接字
  m_Socket=socket(AF_INET,SOCK_DGRAM,);
  if(m_Socket==INVALID_SOCKET);
  {
  MessageBox("套接字创建失败");
  }
  //绑定套接字
  if(bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
  {
  MessageBox("套接字绑定失败");
  }
  m_BmpData=new char[**];
  memset(m_BmpData,,**);
  m_TempData=new char[**];
  memset(m_TempData,,**);
  m_Header=m_BmpData;
  WSAAsyncSelect(m_Socket,m_hWnd,CM_RECEIVEDM,FD_READ);
  m_ShowBmp=FALSE;
  m_BmpSize=;
  m_RecSize=;
  m_ClientPort=;
  CServerApp* pApp=(CServerApp*)AfxGetApp();
  CString sql="select * from tb_ClientInfo";
  pAp->m_DataManage.m_pRecord->CusorLocation=adUseServer;
  pApp->m_DataManage.m_pRecord->Open((_bstr_t)sql,pApp->m_DataManage.m_pConnect.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
  m_ClientIP="";
  if(pApp->m_DataManage.m_pRecord->RecordCount>)
  {
  m_ClientIP=(char*)(_bstr_t)pApp->m_DataManage.m_pRecord->GetFields()->GetItem(0L)->Value;
  }
  pApp->m_DtaManage.m_pRecord->Close();
  m_LeftTopX=;
  m_LeftTopY=;
  m_BK.SetWindowPos(NULL,,,,,SWP_NOMOVE);
  return TRUE;
  }
  void CServerDlg::OnReceived()
  {
  //接收数据
  char* buffer=new char[MAX_BUFF];
  sockaddr_in addr;
  int factsize=sizeof(sockaddr);
  int ret=recvfrom(m_Socket,buffer,MAX_BUFF,,(sockaddr*)&addr,&factsize);
  if(ret!=-)
  {CString recvIP=inet_ntoa(addr.sin_addr);
  if(recvIP!=m_ClinetIP)
  { delete []buffer;
  return;
  }
  m_ClientPort=ntohs(addr.sin_port);
  //记录接收的数据报大小
  m_RecvSize+=ret;
  //读取序号
  WORD orderID=*(WORD)&buffer[];
  WORD endID=*(WORD)&buffer[];
  //读取位图的大小
  int bmpsize=*(int*)&buffer[ret-];
  //获取屏幕的X轴坐标
  m_LeftTopX=*(WORD*)&buffer[ret-];
  //获取屏幕的Y轴坐标
  m_LeftTopY=*(WORD*)&buffer[ret-];
  //读取结束标记
  sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_port=htons(m_ClientPort);
  addr.sin_addr.S_un.S_addr=inet_addr(m_ClientIP.GetBuffer());
  int size=sizeof(addr);
  //发送确认信息
  char* pData="Confirm";
  sendto(m_Socket,pData,,,(sockaddr*)&addr,size);
  if(orderID==)
  {m_BmpSize=bmpsize;
  m_BmpData=m_Header;
  }else
  m_BmpSize+=bmpsize;
  memcpy(m_BmpData,&buffer[],bmpsize);
  m_BmpData=m_Header;
  }else
  m_BmpSize+=bmpsize;
  memcpy(m_BmpData,&buffer[],bmpsize);
  m_BmpData+=bmpsize;
  m_ShowBmp=FALSE;
  if(endID==)
  { m_ShowBmp=TRUE;
  m_BmpData=m_Header;
  memcpy(m_TempData,m_Header,*);
  ShowImage();
  m_RecSize=;
  }
  }
  delete [] buffer;
  }
  void CServerDlg::OnButtonDown(UINT nID)
  {
  if(!m_ClinetIP.IsEmpty())
  {
  WORD x=m_LeftTopX;
  WORD y=m_LeftTopY;
  char buffer[];
  sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.,sin_port=htons(m_ClinetPort);
  addr.sin_addr.S_un.S_addr=inet_addr(m_ClientIP.GetBuffer());
  int size=sizeof(addr);
  switch(nID)
  {
  case IDC_BTNDOWN:
  {
  y=m_LeftTopY+;
  *(WORD*)&buffer[]=x;
  *(WORD*)&buffer[]=y;
  int ret=sendto(m_Socket,&buffer[],,,(sockaddr*)&addr,size);
  break;
  }
  case IDC_BTUP:
  {y=m_LeftTopY-;
  *(WORD*)&buffer[]=x;
  *(WORD*)&buffer[]=y;
  int ret=sendto(m_Socket,&buffer[],,,(sockaddr*)&addr,size);
  break;
  }
  case IDC_BTLEFT:
  {
  x=m_LeftTopX-;
  *(WORD*)&buffer[]=x;
  *(WORD*)&buffer[]=y;
  int ret=sendto(m_Socket,&buffer[],,,(sockaddr*)&addr,size);
  break;
  }
  case IDC_BTRIGHT:
  {
  x=m_LeftTopX+;
  *(WORD*)&buffer[]=x;
  *(WORD*)&buffer[]=y;
  int ret=sendto(m_SOcket,&buffer[],,,(sockaddr*)&addr,size);
  break;
  }
  case IDC_BTRESTORE:
  {
  *(WORD*)&buffer[]=;
  *(WORD*)&buffer[]=;
  int ret=sendto(m_Socket,&buffer[],,,(sockaddr*)&addr,size);
  break;
  }
  }
  }
  }

---------------------------------

http://www.educity.cn/wenda/285572.html

C++加载位图跟SOCKET通信的编写的更多相关文章

  1. Android中加载位图的方法

    Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...

  2. Direct2D开发:从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  3. SharpDX之Direct2D教程II——加载位图文件和保存位图文件

    本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...

  4. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  5. Direct2D 加载位图

    说明: 通过WIC从文件加载位图. 可缩放后加载到内存. 源码: HRESULT LoadImageFormFile( IWICImagingFactory *pWicFactory, ID2D1Re ...

  6. vs2010 单文档MFC 通过加载位图文件作为客户区背景

    实现效果: 这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面.其实只要在view类中重载OnEraseBkgnd()这个函数就好了. 代码如下: BOOL CdddView:: ...

  7. windows程序设计 加载位图图片

    现在网上随便下个jpg图片,用windows自带的画图工具打开,点击画图工具左上角,文件->另存为->选择bmp,点击保存,保存好后,就得到一张位图了. 得到的位图,位图的内存比原图片jp ...

  8. [Direct2D开发] 从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  9. Direct2D开发:MFC下从资源文件中加载位图

    转载请注明出处:http://www.cnblogs.com/ye-ming 0X01 概述: 相对于GDI处理界面,Direct2D有得天独厚的优势,下图就是Direct2D与GDI的效果对比,wi ...

随机推荐

  1. SSM三大框架整合(Spring+SpringMVC+MyBatis)

    一. 导包 18个必须的包 二.配置Spring MVC的web文件 <?xml version="1.0" encoding="UTF-8"?> ...

  2. spring容器和上下文的理解

    spring容器和上下文的理解 spring框架现在使用的很多,这说明有其独特之处----依赖注入,很简单的四个字,在我们需要对象的时候,spring就可以给我们提供所需要的对象,对象的创建.销毁.管 ...

  3. QT中给程序加上主界面的图标

    首先在源码目录下面新建一个 myapp.rc的文件,在里面填写如下: IDI_ICON1 ICON DISCARDABLE "myappico.ico" (名字看自己的图片,注意图 ...

  4. Week06《Java程序设计》第六次作业总结

    Week06<Java程序设计>第六次作业总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行 ...

  5. R语言:数据的分割-计算-整合(split-apply-aggregate)

    当获取到原始数据时,我们通常的做法是对该数据进行分割成小片段,然后对各小片段进行计算统计,最后整合成最终的数据.这是统计学里数据处理的一般规律. R语言为我们提供了相应的函数来分别处理这三个阶段任务. ...

  6. ViewPager实现图片轮翻效果

    很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的.今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的 ...

  7. SEH:结构化异常处理 学习

    SEH:结构化异常处理 结构化异常处理机制提供了一个操作系统,用于优化结构的方案,为客户提供更强大的程序执行环境.试想一下,你写程序不用考虑内存访问错误,那里是空指针错误,一直在按照程序的逻辑结构来写 ...

  8. 安装使用lynis扫描Linux的安全漏洞

    Lynis是Linux平台上的一款安全漏洞扫描工具.它可以扫描系统的安全漏洞.收集系统信息.安装的软件信息.配置问题.没有设置密码的用户和防火墙等等. Lynis是流行可靠的安全扫描工具. 前不久,L ...

  9. 使用Metasploit收集邮箱信息

    Metasploit提供了很多辅助的模块,非常实用.今天介绍一个叫search_email_collector的模块,它的功能是查找搜索引擎(google.bing.yahoo),收集和某个域名有关的 ...

  10. [BZOJ5290][HNOI2018]道路

    bzoj luogu sol 考场上普及\(dp\)都做不来,果然是思想僵化了. 设\(f[u][i][j]\)表示在\(u\)点,上方有\(i\)条未修复的公路和\(j\)条未修复的铁路的最小花费. ...