⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.h

📁 这是一本学习 window编程的很好的参考教材
💻 H
📖 第 1 页 / 共 2 页
字号:


#if !defined(AFX_COLLAPSIBLETESTVIEW_H__2B5D4682_F2E0_4514_8C8B_9823859F866A__INCLUDED_)
#define AFX_COLLAPSIBLETESTVIEW_H__2B5D4682_F2E0_4514_8C8B_9823859F866A__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <atlctrls.h>
#include "atlgdix.h"
#include "CollapsiblePanel.h"
#include "XAviPlay.h"

#include "gap_b3.h"
#include "util.h"

#include "src/buttonst.h"

#include "atltime.h"


#include "resource.h"

#include "UseShGetFileInfo.h"
#define HAVE_REMOTE
#include <pcap.h>

#pragma comment(lib,"Packet.lib")
#pragma comment(lib,"wpcap.lib")

#define MAX_PROCESS_COUNT 256
#define WM_RESETSIZE WM_USER+1023
#define WM_ERROR WM_USER+1024
#define WM_OK WM_USER+1025
#define WM_SET_PANEL_ACTIVE WM_USER+1026

#define TA_FAILED 0
#define TA_SUCCESS_CLEAN 1
#define TA_SUCCESS_KILL 2
#define TA_SUCCESS_16 3
HWND g_hWndTabView=NULL;
HWND g_hRecvWnd=NULL;
pcap_t *fp;
char g_netchardsource[1024];
BOOL g_bThreadStart=FALSE;
typedef struct tagPacketHeader{
	DWORD dwFlag;
	DWORD dwID;
	//TCHAR szFileName[MAX_PATH];
	BOOL bEnd;
	DWORD dwAllSize;
	DWORD dwCurrentBlockCheckSum;
	DWORD dwCurrentPos;
	DWORD dwCurrentSize;
	
}PACKETHEADER,*PPACKETHEADER;
typedef struct tagPacket{
	PACKETHEADER ph;
	BYTE data[1500-sizeof(PACKETHEADER)];
}PACKET,*PPACKET;
class CPacketPanel : public CDialogImpl<CPacketPanel>
{
public:
   enum { IDD = IDD_PACKETPANEL };

   CBrush m_brBack;

   CButtonST	m_btnSendPacket;
   CButtonST	m_btnRecvPacket;

   BEGIN_MSG_MAP(CPacketPanel)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
	  MESSAGE_HANDLER(WM_DESTROY,OnDestroy)
      MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtlColorDlg)
      MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorDlg)
	  COMMAND_HANDLER(IDC_SENDPACKET, BN_CLICKED, OnClickedSendPacket)
	  COMMAND_HANDLER(IDC_RECVPACKET, BN_CLICKED, OnClickedRecvPacket)
	  REFLECT_NOTIFICATIONS()
   END_MSG_MAP()
  LRESULT OnClickedSendPacket(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
   {
	   if(::IsWindow(g_hWndTabView))::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,0);
	   else
	   {
		   ::SendMessage(GetActiveWindow(),WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
		   ::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,0);
	   }
		return S_OK;

   }
   LRESULT OnClickedRecvPacket(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
   {
	   if(::IsWindow(g_hWndTabView))::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,1);
	    else
	   {
		   ::SendMessage(GetActiveWindow(),WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
		   ::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,1);
	   }
		return S_OK;

   }
   LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
	   m_brBack.Detach();
	   return 0;
   }
   LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
        m_brBack.CreateSolidBrush(RGB(240,241,245));
		
		m_btnSendPacket.SubclassWindow(GetDlgItem(IDC_SENDPACKET));
		m_btnSendPacket.SetIcon(IDI_SEND1
			,IDI_SEND2);
		m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(0, 0, 255));
		m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_FG_OUT, RGB(0, 0, 0));
		m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(240,241,245));
		m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(240,241,245));

		m_btnSendPacket.DrawBorder(FALSE);

	//	m_btnSendPacket.SetAlign(CButtonST::ST_ALIGN_VERT);
		m_btnRecvPacket.SubclassWindow(GetDlgItem(IDC_RECVPACKET));
		m_btnRecvPacket.SetIcon(IDI_RECV1,IDI_RECV2);
		m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(0, 0,255));
		m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_FG_OUT, RGB(0, 0, 0));
		m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(240,241,245));
		m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(240,241,245));
		m_btnRecvPacket.DrawBorder(false);
      return 0;
   }
   LRESULT OnCtlColorDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {  CDCHandle dc = (HDC) wParam;
      dc.SetBkMode(TRANSPARENT);
      return (LRESULT) (HBRUSH) m_brBack;
   }
};





class CVerView : public CCollapsiblePanelImpl<CVerView>
{
public:
   DECLARE_WND_CLASS(_T("WTL_CollapsiblePanel"))

   typedef CCollapsiblePanelImpl<CVerView> parentClass;

   CImageList m_Images;
   CPacketPanel m_view1;


   //CPanel1 m_view3;
      
   BOOL PreTranslateMessage(MSG* pMsg)
   {
      pMsg;
      return FALSE;
   }

   BEGIN_MSG_MAP(CCollapsibleTestView)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
	  MESSAGE_HANDLER(WM_DESTROY, OnDestroy)

      CHAIN_MSG_MAP( parentClass )
   END_MSG_MAP()
  LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
	   PostMessage(WM_DESTROY,0,0);
	   bHandled=FALSE;

		m_Images.Detach();
		return 0;
   }
   LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
     
      LRESULT lRes = parentClass::OnCreate(uMsg, wParam, lParam, bHandled);

      m_Images.CreateFromImage(MAKEINTRESOURCE(IDB_HEADERS), 32, 0, RGB(0,128,128), IMAGE_BITMAP, LR_CREATEDIBSECTION);
      SetImageList(m_Images, LVSIL_NORMAL);

      m_view1.Create(m_hWnd);
    
        
      SetExpandBitmaps(IDI_EXPAND, IDI_COLLAPSE);
     InsertItem(m_view1, _T("原始包处理"),0);
  
      SetItemExpanded(0, true);
  

      return lRes;
   }
};
class CRecvPacketDlg : public CDialogImpl<CRecvPacketDlg>
{
public:
   enum { IDD = IDD_NETSTATDLG };

   CBrush m_brBack;
  

 
	TCHAR	m_szFileName[MAX_PATH] ;
   BEGIN_MSG_MAP(CRecvPacketDlg)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
      MESSAGE_HANDLER(WM_SHOWWINDOW,OnShowWindow)
	  MESSAGE_HANDLER(WM_RESETSIZE,OnResetSize)
	  MESSAGE_HANDLER(WM_ERROR,OnError)
	  MESSAGE_HANDLER(WM_OK,OnCheckOK)

      MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtlColorDlg)
      MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorDlg)
	  COMMAND_HANDLER(IDC_BROWSER, BN_CLICKED,OnBrowse)
	  COMMAND_HANDLER(IDC_RECV, BN_CLICKED,OnRecv)
   END_MSG_MAP()
   LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
	   if ((BOOL)wParam) {

	   }
	   return 0;
   }
   LRESULT OnError(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
	   
	   return 0;
   }
   LRESULT OnResetSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
       
	  
	   return 0;
   }
   LRESULT OnCheckOK(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {

	   return 0;
   }
	LRESULT OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		OPENFILENAME ofn;       // common dialog box structure
		TCHAR szFile[260];       // buffer for file name


		// Initialize OPENFILENAME
		ZeroMemory(&ofn, sizeof(ofn));
		ofn.lStructSize = sizeof(ofn);
		ofn.hwndOwner = m_hWnd;
		ofn.lpstrFile = szFile;
		//
		// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
		// use the contents of szFile to initialize itself.
		//
		ofn.lpstrFile[0] = '\0';
		ofn.nMaxFile = sizeof(szFile);
		ofn.lpstrFilter = _T("All Files\0*.*\0");
		ofn.nFilterIndex = 1;
		ofn.lpstrFileTitle = NULL;
		ofn.nMaxFileTitle = 0;
		ofn.lpstrInitialDir = NULL;
		ofn.Flags = OFN_PATHMUSTEXIST ;

		// Display the Open dialog box. 

		if (GetSaveFileName(&ofn)==TRUE) {

			_tcscpy(m_szFileName,(TCHAR*)ofn.lpstrFile);
			SetDlgItemText(IDC_FILENAME,m_szFileName);
		}



		return 0;
	}  
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
     m_brBack.CreateSolidBrush(RGB(240,241,245));
	*m_szFileName=NULL;
	g_hRecvWnd=m_hWnd;
	g_bThreadStart=FALSE;
	return 0;
   }  
 
    LRESULT OnCtlColorDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      return (LRESULT) (HBRUSH) m_brBack;
   }
   static DWORD lpListenProc(LPVOID lpParam)
   {
	  
	   CoInitialize(NULL);
	   TCHAR *szFileName=(TCHAR*)lpParam;

	   struct pcap_pkthdr *header;
	   u_char *pkt_data;
	   char errbuf[PCAP_ERRBUF_SIZE];
	 
	   int res;
	  
		 CSHProgressWnd dlg;
	   
	   
	   BOOL bCreate=FALSE;	
	   HANDLE hFile=NULL;
	   BYTE cResult[46];
	   ZeroMemory(cResult,sizeof cResult);
	   cResult[45]=1;
	   DWORD dwID=0;
	   while((res = pcap_next_ex( fp, &header,(const BYTE**) &pkt_data)) >= 0)
	   {

		   if(res == 0)
			   /* Timeout elapsed */
			   continue;
		   if ( header->len!=1500)continue;
		   PPACKET pPacket=(PPACKET)pkt_data;
		   if (pPacket->ph.dwFlag!=0x12345678)continue;
		   if(pPacket->ph.dwID==dwID){
				pcap_sendpacket(fp, (u_char *)cResult, sizeof cResult);
				dwID++;
		   }
		   else if(pPacket->ph.dwID<dwID)
			   pcap_sendpacket(fp, (u_char *)cResult, sizeof cResult);
		   else 
			   continue;
		    if(dlg.HasUserCanceled())break;
			if (!bCreate) {
				
				dlg.SetTitle ( _T("正在接收") );
				dlg.SetAnimation ( IDR_FILECOPY );
				dlg.SetCancelMessage ( _T("正在处理取消操作") );
				dlg.SetLineText ( 1, _T("正在接收...") );

				dlg.SetAllowMinimize ( true );
				
				dlg.SetShowProgressBar ( true );
				dlg.SetCalculateTime ( true );
				dlg.ShowModeless(g_hWndTabView);
				
				
				

				dlg.UpdateProgress ( 1500, pPacket->ph.dwAllSize );
				dlg.ResetTimer();

				WIN32_FIND_DATA FindFileData;
				HANDLE hFind;


				hFind = FindFirstFile(szFileName, &FindFileData);
				if (hFind == INVALID_HANDLE_VALUE) 
				{
					hFile=CreateFile(szFileName,
						GENERIC_WRITE|GENERIC_READ,
						FILE_SHARE_WRITE|FILE_SHARE_READ,
						NULL,
						OPEN_ALWAYS,
						FILE_ATTRIBUTE_NORMAL,
						NULL);
					
					DWORD dwWritten;
					char* pbTemp=new char[pPacket->ph.dwAllSize];
					memset(pbTemp,0,pPacket->ph.dwAllSize );
					WriteFile(hFile,pbTemp,pPacket->ph.dwAllSize,&dwWritten,0);
					delete[] pbTemp;
					//CloseHandle(hFile);
					bCreate=TRUE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -