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

📄 mainfrm.cpp

📁 远程控制系统,可以实现局域网内进行远程控制计算机,很方便,并且是学习用的非常好的资料.
💻 CPP
字号:
// MainFrm.cpp : implmentation of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "common.h"

#include "ntshell.h"
#include "aboutdlg.h"
#include "consoleView.h"
#include "MainFrm.h"

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
	if (CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg))
		return TRUE;

	return m_view.PreTranslateMessage(pMsg);
}

BOOL CMainFrame::OnIdle()
{
	UIUpdateToolBar();
	return FALSE;
}

LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
	// create command bar window
	HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
	// attach menu
	m_CmdBar.AttachMenu(GetMenu());
	// load command bar images
	m_CmdBar.LoadImages(IDR_MAINFRAME);
	// remove old menu
	SetMenu(NULL);

	HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);

	CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
	AddSimpleReBarBand(hWndCmdBar);
	AddSimpleReBarBand(hWndToolBar, NULL, TRUE);

	CreateSimpleStatusBar();

	m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, WS_EX_CLIENTEDGE, IDC_TABCTRL);

	LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
	m_view.InitView(lpcs->lpCreateParams);
	pwip = (PWND_INIT_PARAM)lpcs->lpCreateParams;

	connwait = false;

	mod[0].hwnd = m_view.GetSubWnd(0);
	mod[0].id = ID_MODULE_0;
	mod[0].sock = INVALID_SOCKET;
	mod[0].msg = WM_SOCKET_0;
	mod[0].function = WORK_CONSOLE;

	mod[1].hwnd = m_view.GetSubWnd(1);
	mod[1].id = ID_MODULE_1;
	mod[1].sock = INVALID_SOCKET;
	mod[1].msg = WM_SOCKET_1;
	mod[1].function = WORK_CMDSHELL;

	mod[2].hwnd = m_view.GetSubWnd(2);
	mod[2].id = ID_MODULE_2;
	mod[2].sock = INVALID_SOCKET;
	mod[2].msg = WM_SOCKET_2;
	mod[2].function = WORK_PROCESSMANAGER;

	mod[3].hwnd = m_view.GetSubWnd(3);
	mod[3].id = ID_MODULE_3;
	mod[3].sock = INVALID_SOCKET;
	mod[3].msg = WM_SOCKET_3;
	mod[3].function = WORK_FILEMANAGER;

	mod[4].hwnd = m_view.GetSubWnd(4);
	mod[4].id = ID_MODULE_4;
	mod[4].sock = INVALID_SOCKET;
	mod[4].msg = WM_SOCKET_4;
	mod[4].function = WORK_SOCKPROXY;

	mod[5].hwnd = m_view.GetSubWnd(5);
	mod[5].id = ID_MODULE_5;
	mod[5].sock = INVALID_SOCKET;
	mod[5].msg = WM_SOCKET_5;
	mod[5].function = WORK_SCREENCAPTURE;

	UIAddToolBar(hWndToolBar);
	UISetCheck(ID_VIEW_TOOLBAR, 1);
	UISetCheck(ID_VIEW_STATUS_BAR, 1);

	// register object for message filtering and idle updates
	CMessageLoop* pLoop = _Module.GetMessageLoop();
	ATLASSERT(pLoop != NULL);
	pLoop->AddMessageFilter(this);
	pLoop->AddIdleHandler(this);

	return 0;
}

LRESULT CMainFrame::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
	bHandled = FALSE;

	if (mod[0].sock != INVALID_SOCKET)
	{
		closesocket(mod[0].sock);
		mod[0].sock = INVALID_SOCKET;
	}

	if (mod[1].sock != INVALID_SOCKET)
	{
		closesocket(mod[1].sock);
		mod[1].sock = INVALID_SOCKET;
	}

	if (mod[2].sock != INVALID_SOCKET)
	{
		closesocket(mod[2].sock);
		mod[2].sock = INVALID_SOCKET;
	}

	if (mod[3].sock != INVALID_SOCKET)
	{
		closesocket(mod[3].sock);
		mod[3].sock = INVALID_SOCKET;
	}

	if (mod[4].sock != INVALID_SOCKET)
	{
		closesocket(mod[4].sock);
		mod[4].sock = INVALID_SOCKET;
	}

	if (mod[5].sock != INVALID_SOCKET)
	{
		closesocket(mod[5].sock);
		mod[5].sock = INVALID_SOCKET;
	}

	return TRUE;
}

LRESULT CMainFrame::OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	PostMessage(WM_CLOSE);
	return 0;
}

LRESULT CMainFrame::OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	// TODO: add code to initialize document

	return 0;
}

LRESULT CMainFrame::OnFileNewWindow(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	::PostThreadMessage(_Module.m_dwMainThreadID, WM_USER, 0, (LPARAM)pwip);
	return 0;
}

LRESULT CMainFrame::OnModuleSelect(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	switch (wID)
	{
	case IDM_MODULE_0:
		m_view.SetCurFocus(0);
		break;
	case IDM_MODULE_1:
		m_view.SetCurFocus(1);
		break;
	case IDM_MODULE_2:
		m_view.SetCurFocus(2);
		break;
	case IDM_MODULE_3:
		m_view.SetCurFocus(3);
		break;
	case IDM_MODULE_4:
		m_view.SetCurFocus(4);
		break;
	case IDM_MODULE_5:
		m_view.SetCurFocus(5);
		break;
	}

	return 0;
}

LRESULT CMainFrame::OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	static BOOL bVisible = TRUE;	// initially visible
	bVisible = !bVisible;
	CReBarCtrl rebar = m_hWndToolBar;
	int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST + 1);	// toolbar is 2nd added band
	rebar.ShowBand(nBandIndex, bVisible);
	UISetCheck(ID_VIEW_TOOLBAR, bVisible);
	UpdateLayout();
	return 0;
}

LRESULT CMainFrame::OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
	::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
	UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
	UpdateLayout();
	return 0;
}

LRESULT CMainFrame::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	CAboutDlg dlg;
	dlg.DoModal();
	return 0;
}

void CMainFrame::OnSocketConnect(int nModuleId, WPARAM wParam)
{
	connwait = false;
	mod[nModuleId].sock = (SOCKET)wParam;
	WSAAsyncSelect(mod[nModuleId].sock, m_hWnd, mod[nModuleId].msg, FD_READ | FD_WRITE | FD_CLOSE);
	SendMessage(mod[nModuleId].hwnd, WM_CONNECT_CREATED, wParam, 0);
	UIEnable(mod[nModuleId].id, TRUE);
	m_view.SetCurFocus(nModuleId);
}

LRESULT CMainFrame::OnConnOk(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	switch (lParam)
	{
	case 0:
		OnSocketConnect(0, wParam);
		break;
	case 1:
		OnSocketConnect(1, wParam);
		break;
	case 2:
		OnSocketConnect(2, wParam);
		break;
	case 3:
		OnSocketConnect(3, wParam);
		break;
	case 4:
		OnSocketConnect(4, wParam);
		break;
	case 5:
		OnSocketConnect(5, wParam);
		break;
	}

	return 0;
}

LRESULT CMainFrame::OnConnTimeOut(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
	connwait = false;
	UISetCheck(mod[lParam].id, FALSE);
	UIEnable(mod[lParam].id, TRUE);

	MessageBox("连接失败", "main", MB_ICONERROR);

	return 0;
}

LRESULT CMainFrame::ModuleClick(int nModuleId)
{
	if (connwait == true)
	{
		MessageBox("连接中,请稍候...", "提示", 0x40);
		return 0;
	}

	if (UIGetState(mod[nModuleId].id) & UPDUI_CHECKED)
	{
		if (mod[nModuleId].sock != INVALID_SOCKET)
		{
			closesocket(mod[nModuleId].sock);
			mod[nModuleId].sock = INVALID_SOCKET;
		}

		SendMessage(mod[nModuleId].hwnd, WM_CONNECT_CLOSED, 0, 0);
		UISetCheck(mod[nModuleId].id, FALSE);
	}
	else
	{
		UISetCheck(mod[nModuleId].id, TRUE);
		UIEnable(mod[nModuleId].id, FALSE);

		rc.hAcceptWnd = m_hWnd;
		rc.funBack = NULL;
		rc.lpParam = (LPVOID)nModuleId;
		rc.dwWorkType = mod[nModuleId].function;
		rc.lpCtrlHandle = pwip->lpCtrlHandle;

		::PostMessage(pwip->hConnMgrWnd, WM_REQUEST_CONNECT, 0, (LPARAM)&rc);
	}

	return 0;
}

LRESULT CMainFrame::OnSocketNodify(int nModuleId, WPARAM wParam, LPARAM lParam)
{
	if (WSAGETSELECTERROR(lParam))
	{
		SendMessage(mod[nModuleId].hwnd, WM_CONNECT_CLOSED, 0, 0);
		closesocket(mod[nModuleId].sock);
		mod[nModuleId].sock = INVALID_SOCKET;
		UISetCheck(mod[nModuleId].id, FALSE);
		return 0;
	}

	switch (WSAGETSELECTEVENT(lParam))
	{
	case FD_READ:
		SendMessage(mod[nModuleId].hwnd, WM_SOCKET_READ, wParam, 0);
		break;

	case FD_WRITE:
		SendMessage(mod[nModuleId].hwnd, WM_SOCKET_WRITE, wParam, 0);
		break;

	case FD_CLOSE:
		SendMessage(mod[nModuleId].hwnd, WM_CONNECT_CLOSED, 0, 0);
		closesocket(mod[nModuleId].sock);
		mod[nModuleId].sock = INVALID_SOCKET;
		UISetCheck(mod[nModuleId].id, FALSE);
		break;
	}

	return 0;
}

LRESULT CMainFrame::OnModule0(WORD wNotifyCode, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(0);
}

LRESULT CMainFrame::OnSocket0(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(0, wParam, lParam);
}

LRESULT CMainFrame::OnModule1(WORD wNotifyCode, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(1);
}

LRESULT CMainFrame::OnSocket1(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(1, wParam, lParam);
}

LRESULT CMainFrame::OnModule2(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(2);
}

LRESULT CMainFrame::OnSocket2(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(2, wParam, lParam);
}

LRESULT CMainFrame::OnModule3(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(3);
}

LRESULT CMainFrame::OnSocket3(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(3, wParam, lParam);
}

LRESULT CMainFrame::OnModule4(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(4);
}

LRESULT CMainFrame::OnSocket4(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(4, wParam, lParam);
}

LRESULT CMainFrame::OnModule5(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	return ModuleClick(5);
}

LRESULT CMainFrame::OnSocket5(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
	return OnSocketNodify(5, wParam, lParam);
}

⌨️ 快捷键说明

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