// Surveillant_ClientView.cpp : implementation of the CSurveillant_ClientView class
//
#include "stdafx.h"
#include "Surveillant_Client.h"
#include "Surveillant_ClientDoc.h"
#include "Surveillant_ClientView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSurveillant_ClientView
IMPLEMENT_DYNCREATE(CSurveillant_ClientView, CView)
BEGIN_MESSAGE_MAP(CSurveillant_ClientView, CView)
//{{AFX_MSG_MAP(CSurveillant_ClientView)
ON_COMMAND(ID_SAVESCREEN, OnSavescreen)
ON_UPDATE_COMMAND_UI(ID_SAVESCREEN, OnUpdateSavescreen)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MSG,OnSocket)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSurveillant_ClientView construction/destruction
CSurveillant_ClientView::CSurveillant_ClientView()
{
sock = INVALID_SOCKET;
pointer = 0;
m_FileID = 1;
rect = CRect(300, 200, 460, 360);
}
CSurveillant_ClientView::~CSurveillant_ClientView()
{
}
BOOL CSurveillant_ClientView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSurveillant_ClientView drawing
void CSurveillant_ClientView::OnDraw(CDC* pDC)
{
CSurveillant_ClientDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CSurveillant_ClientView diagnostics
#ifdef _DEBUG
void CSurveillant_ClientView::AssertValid() const
{
CView::AssertValid();
}
void CSurveillant_ClientView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSurveillant_ClientDoc* CSurveillant_ClientView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSurveillant_ClientDoc)));
return (CSurveillant_ClientDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSurveillant_ClientView message handlers
void CSurveillant_ClientView::LinkToServer(CString strIP)
{
if (sock != INVALID_SOCKET)
closesocket(sock);
WSADATA wsa;
DWORD IPaddr;
if (WSAStartup(0x101, &wsa))
{
WSACleanup();
return;
}
if (LOBYTE(wsa.wVersion) != 1 || HIBYTE(wsa.wVersion) != 1)
{
WSACleanup();
return;
}
unsigned short m_Port = htons(PORT);
if ((IPaddr = inet_addr(strIP)) == INADDR_NONE)
{
AfxMessageBox("目标无法锁定!");
return;
}
else
{
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
WSACleanup();
return;
}
sockin_c.sin_family = AF_INET;
sockin_c.sin_addr.S_un.S_addr = IPaddr;
sockin_c.sin_port = m_Port;
int nConnect = connect(sock, (LPSOCKADDR)&sockin_c, sizeof(sockin_c));
if (nConnect)
{
AfxMessageBox("目标无法锁定!");
WSACleanup();
return;
}
WSAAsyncSelect(sock, m_hWnd, WM_MSG, FD_READ | FD_CLOSE);
}
}
BOOL CSurveillant_ClientView::DestroyWindow()
{
if (sock != INVALID_SOCKET)
closesocket(sock);
WSACleanup();
return CView::DestroyWindow();
}
void CSurveillant_ClientView::OnSocket(WPARAM wParam, LPARAM lParam)
{
int iReadLen = 0;
int i;
int message = lParam & 0x0000FFFF;
CDC* pDC = GetDC();
switch (message)
{
case FD_READ:
iReadLen = recv(sock, buffer, 1024 * 768 * 2, 0);
for (i = 0; i < iReadLen; i++)
{
dot[pointer] = buffer[i];
pointer++;
if (pointer == 1024 * 768 * 2)
{
// 把pbit0指向的内存数据复制到bmp2中
bmp.SetBitmapBits(1024 * 768 * 2, (LPVOID)dot);
// 把bmp2中图像复制到用户窗口中
GetClientRect(&rect);
pDC->StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(), &wdc, 0, 0, 1024, 768, SRCCOPY);
pointer = 0;
}
}
break;
case FD_CLOSE:
AfxMessageBox("目标失去锁定!");
break;
default:
break;
}
ReleaseDC(pDC);
}
void CSurveillant_ClientView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// 引用用户窗口指针定义对象ddc
CDC* pDC = GetDC();
// 建立与ddc兼容的device context
wdc.CreateCompatibleDC(pDC);
// 建立与ddc兼容的位图
bmp.CreateCompatibleBitmap(pDC, 1024, 768);
wdc.SelectObject(&bmp);
GetClientRect(&rect);
}
void CSurveillant_ClientView::OnSavescreen()
{
CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);
HBITMAP hbmp = CopyScreenToBitmap(&rect);
CString m_sSavePath;
m_sSavePath.Format("保存文件_%d.bmp", m_FileID);
m_FileID++;
char path[255];
::strcpy(path, m_sSavePath);
SaveBitmapToFile(hbmp, path);
}
HBITMAP CSurveillant_ClientView::CopyScreenToBitmap(LPRECT lpRect)
{
// 屏幕和内存设备描述表
HDC hScrDC, hMemDC;
// 位图句柄
HBITMAP hBitmap, hOldBitmap;
// 选定区域坐标
int nX, nY, nX2, nY2;
// 位图宽度和高度
int nWidth, nHeight;
// 屏幕分辨率
int xScrn, yScrn;
// 确保选定区域不为空矩形
if (IsRectEmpty(lpRect))
return NULL;
// 为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
// 为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得选定区域坐标
nX = lpRect->left;
nY = lpRect->top;
nX2 = lpRect->right;
nY2 = lpRect->bottom;
// 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
//确保选定区域是可见的
if (nX<0)
nX = 0;
if (nY<0)
nY = 0;
if (nX2>xScrn)
nX2 = xScrn;
if (nY2>yScrn)
nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);
//得到屏幕位图的句柄
hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}
void CSurveillant_ClientView::SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName)
{
// 设备描述表
HDC hDC;
// 当前显示分辨率下每个像素所占字节数
int iBits;
// 位图中每个像素所占字节数
WORD wBitCount;
// 定义调色板大小, 位图中像素字节大小 , 位图文件大小 , 写入文件字节数
DWORD dwPaletteSize = 0, dwBmBitsSize, dwDIBSize, dwWritten;
// 位图属性结构
BITMAP Bitmap;
// 位图文件头结构
BITMAPFILEHEADER bmfHdr;
// 位图信息头结构
BITMAPINFOHEADER bi;
// 指向位图信息头结构
LPBITMAPINFOHEADER lpbi;
// 定义文件,分配内存句柄,调色板句柄
HANDLE fh, hDib, hPal,hOldPal = NULL;
// 计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
// 计算调色板大小
if (iBits <= 1)
wBitCount = 1;
else if (iBits<= 4)
wBitCount = 4;
else if (iBits<= 8)
wBitCount = 8;
else if (iBits <= 24)
wBitCount = 24;
else
wBitCount = 32;
// 设置位图信息头结构
if (wBitCount <= 8)
dwPaletteSize = (1 << wBitCount) * sizeof(RGBQUAD);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
// 为位图内容分配内存
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
没有合适的资源?快使用搜索试试~ 我知道了~
VC++网络通信程序开发基础及实例解析3
共657个文件
obj:124个
h:112个
cpp:92个
需积分: 3 25 下载量 53 浏览量
2008-07-24
08:39:57
上传
评论
收藏 8.97MB RAR 举报
温馨提示
VC++网络通信程序开发基础及实例解析源代码的8-9
资源推荐
资源详情
资源评论
收起资源包目录
VC++网络通信程序开发基础及实例解析3 (657个子文件)
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Toolbar.bmp 1KB
Receiver.clw 3KB
Receiver.clw 3KB
Receiver.clw 3KB
Sender.clw 3KB
Sender.clw 2KB
Sender.clw 2KB
Sender.clw 2KB
Receiver.clw 2KB
MailslotServer.clw 2KB
MailslotClient.clw 2KB
Server.clw 2KB
Client.clw 2KB
Surveillant_Client.clw 1KB
RSARegister.clw 1KB
Surveillant_Server.clw 1KB
Server.clw 919B
Sample25.clw 852B
Client.clw 804B
Surveillant_ClientView.cpp 9KB
MainFrm.cpp 6KB
ReceiverView.cpp 6KB
ServerDlg.cpp 5KB
Sample25Dlg.cpp 5KB
Surveillant_ServerView.cpp 5KB
ReceiverView.cpp 5KB
Surveillant_Client.cpp 5KB
Sender.cpp 5KB
Receiver.cpp 5KB
Receiver.cpp 5KB
Sender.cpp 4KB
MailslotServer.cpp 4KB
MailslotClient.cpp 4KB
Receiver.cpp 4KB
Receiver.cpp 4KB
Sender.cpp 4KB
Sender.cpp 4KB
Client.cpp 4KB
Server.cpp 4KB
ServerView.cpp 4KB
SenderView.cpp 4KB
SenderView.cpp 4KB
MailslotClientView.cpp 4KB
RSARegisterDlg.cpp 4KB
MailslotServerView.cpp 4KB
ClientView.cpp 3KB
ReceiverView.cpp 3KB
ClientDlg.cpp 3KB
ReceiverView.cpp 3KB
SenderView.cpp 3KB
SenderView.cpp 3KB
Surveillant_Server.cpp 3KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
MainFrm.cpp 2KB
RSARegister.cpp 2KB
Sample25.cpp 2KB
Client.cpp 2KB
Server.cpp 2KB
RSA.cpp 2KB
Surveillant_ServerDoc.cpp 2KB
Surveillant_ClientDoc.cpp 2KB
RSA.cpp 2KB
MailslotServerDoc.cpp 2KB
MailslotClientDoc.cpp 2KB
ReceiverDoc.cpp 2KB
ReceiverDoc.cpp 2KB
ReceiverDoc.cpp 2KB
ReceiverDoc.cpp 2KB
SenderDoc.cpp 2KB
SenderDoc.cpp 2KB
SenderDoc.cpp 2KB
SenderDoc.cpp 2KB
ClientDoc.cpp 2KB
ServerDoc.cpp 2KB
MainFrm.cpp 2KB
ListeningSocket.cpp 1KB
RecvSocket.cpp 1KB
ListeningSocket.cpp 1KB
共 657 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
xiaoxiaoren12
- 粉丝: 7
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功