📄 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<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 + -