www.pudn.com > ntshell.rar > mainfrm.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::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); 
}