?? peeperfrm.cpp
字號:
///////////////////////////////////////////////////////////////////////////////
// 遠程控制軟件-偷窺者 主窗口 //
// 日期:2001/10/02 //
// 作者:劉東發(fā) //
// Email:dongfa@yeah.net //
// http://dongfa.yeah.net //
// OICQ:5584173 阿東 //
// 作者聲明: //
// 此部分代碼全是作者所寫,可以隨便傳播,但要保持文件的完整性,有問題 //
// 或者意見請來信,謝謝! //
///////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PeeperClient.h"
#include "PeeperFrm.h"
#include "PeeperWnd.h"
#include "PeeperClientDoc.h"
#include "../peeperzip.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CMainClientWnd::CMainClientWnd()
{
m_bStretch = FALSE;
}
CMainClientWnd::~CMainClientWnd()
{
}
BEGIN_MESSAGE_MAP(CMainClientWnd, CWnd)
//{{AFX_MSG_MAP(CMainClientWnd)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMainClientWnd::SetBkBitmap(HBITMAP hBmp, BOOL bStretch)
{
if(m_memDC.m_hDC != NULL)
{
m_memDC.DeleteDC();
}
m_memDC.CreateCompatibleDC(NULL);
BITMAP bm;
::GetObject(hBmp, sizeof(bm), &bm);
m_szBmp.cx = bm.bmWidth;
m_szBmp.cy = bm.bmHeight;
::SelectObject(m_memDC.m_hDC, hBmp);
m_bStretch = bStretch;
return TRUE;
}
BOOL CMainClientWnd::PaintBmp()
{
CClientDC dc(this);
if(m_memDC.m_hDC != NULL)
{
CRect rect;
GetClientRect(&rect);
if(m_bStretch)
{
dc.SetStretchBltMode(COLORONCOLOR);
dc.StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&m_memDC, 0, 0, m_szBmp.cx, m_szBmp.cy, SRCCOPY);
}
else
{
int nXn = rect.Width()/m_szBmp.cx;
int nYn = rect.Height()/m_szBmp.cy;
if(rect.Width()%m_szBmp.cx > 0)
nXn ++;
if(rect.Height()%m_szBmp.cy > 0)
nYn ++;
for(int i = 0; i < nXn; i ++)
{
for(int j = 0; j < nYn; j ++)
{
int w = min(m_szBmp.cx, rect.Width() - i*m_szBmp.cx);
int h = min(m_szBmp.cy, rect.Height() - j*m_szBmp.cy);
dc.BitBlt(i*m_szBmp.cx, j*m_szBmp.cy, w, h, &m_memDC, 0, 0, SRCCOPY);
}
}
}
}
return TRUE;
}
void CMainClientWnd::OnPaint()
{
CPaintDC dc(this);
PaintBmp();
}
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
ON_WM_GETMINMAXINFO()
ON_WM_CREATE()
ON_WM_MDIACTIVATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CChildFrame::CChildFrame()
{
}
CChildFrame::~CChildFrame()
{
}
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
ModifyStyleEx(WS_EX_CLIENTEDGE, WS_EX_STATICEDGE);
CRect rect;
GetWindowRect(&rect);
rect.right += 1;
rect.bottom += 1;
MoveWindow(rect);
return 0;
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
return CMDIChildWnd::PreCreateWindow(cs);
}
void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMaxSize.x = 3200;
lpMMI->ptMaxSize.y = 2400;
lpMMI->ptMaxTrackSize.x = 3200;
lpMMI->ptMaxTrackSize.y = 2400;
CMDIChildWnd::OnGetMinMaxInfo(lpMMI);
}
void CChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();
if(pMainWnd)
{
pMainWnd->OnFileNew();
}
}
CPeeperBar::CPeeperBar()
{
}
CPeeperBar::~CPeeperBar()
{
}
BEGIN_MESSAGE_MAP(CPeeperBar, CDialogBar)
//{{AFX_MSG_MAP(CPeeperBar)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_BTN_COMMAND_EXEC, OnMenuCommand)
ON_UPDATE_COMMAND_UI(ID_FILE_CLOSESERVER, OnUpdateMenuCommand)
ON_WM_GETMINMAXINFO()
ON_BN_CLICKED(IDC_BTN_COMPUTER_EXEC, OnMenuCommand)
ON_BN_CLICKED(IDC_BTN_FILE_EXEC, OnMenuCommand)
ON_BN_CLICKED(IDC_BTN_FILE_SOURCE, OnMenuCommand)
ON_BN_CLICKED(IDC_BTN_FILE_TARGET, OnMenuCommand)
ON_CBN_SELCHANGE(IDC_COMBO_FILE_TYPE, OnMenuCommand)
ON_COMMAND(ID_FILE_CLOSESERVER, OnMenuCommand)
ON_COMMAND(ID_VIEW_SEND, OnMenuCommand)
ON_COMMAND(ID_FILE_MANAGE, OnMenuCommand)
ON_COMMAND(ID_VIEW_COMPUTER, OnMenuCommand)
ON_COMMAND(ID_TOOL_DIBVIEW_FULL, OnMenuCommand)
ON_COMMAND(ID_OPTION_PAUSE, OnMenuCommand)
ON_COMMAND(ID_OPTION_MOUSE_MOVE, OnMenuCommand)
ON_COMMAND(ID_OPTION_MOUSE_LBUTTON, OnMenuCommand)
ON_COMMAND(ID_OPTION_MOUSE_RBUTTON, OnMenuCommand)
ON_COMMAND(ID_OPTION_MOUSE_LDBLCLK, OnMenuCommand)
ON_COMMAND(ID_OPTION_MOUSE_RDBLCLK, OnMenuCommand)
ON_COMMAND(ID_OPTION_KEY, OnMenuCommand)
ON_COMMAND(ID_OPTION_DIB, OnMenuCommand)
ON_COMMAND(ID_OPTION_1BITS, OnMenuCommand)
ON_COMMAND(ID_OPTION_4BITS, OnMenuCommand)
ON_COMMAND(ID_OPTION_8BITS, OnMenuCommand)
ON_COMMAND(ID_OPTION_24BITS, OnMenuCommand)
ON_COMMAND(ID_OPTION_NOZIP, OnMenuCommand)
ON_COMMAND(ID_OPTION_LZ77, OnMenuCommand)
ON_COMMAND(ID_OPTION_LZW, OnMenuCommand)
// ON_COMMAND(ID_OPTION_JPEG, OnMenuCommand)
ON_COMMAND(ID_OPTION_LZSS, OnMenuCommand)
ON_COMMAND(ID_OPTION_ARI, OnMenuCommand)
ON_COMMAND(ID_HELP_REGISTER, OnMenuCommand)
ON_COMMAND(ID_HELP_HELP, OnMenuCommand)
ON_UPDATE_COMMAND_UI(ID_VIEW_SEND, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_FILE_MANAGE, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_VIEW_COMPUTER, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_TOOL_DIBVIEW_FULL, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_PAUSE, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_MOVE, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_LBUTTON, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_RBUTTON, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_LDBLCLK, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_MOUSE_RDBLCLK, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_KEY, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_DIB, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_1BITS, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_4BITS, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_8BITS, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_24BITS, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_NOZIP, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_LZ77, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_LZW, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_JPEG, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_LZSS, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_OPTION_ARI, OnUpdateMenuCommand)
//信息條
ON_UPDATE_COMMAND_UI(ID_STATUS_CONN_INFO, OnUpdateMenuCommand)
ON_UPDATE_COMMAND_UI(ID_STATUS_TIME, OnUpdateMenuCommand)
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
ID_STATUS_CONN_INFO,
ID_STATUS_TIME,
};
CMainFrame::CMainFrame()
{
m_bIsFullScreen = FALSE;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
//改變信息條的區(qū)域
UINT nID = 0;
UINT nStyle = 0;
int cxWidth = 0;
m_wndStatusBar.GetPaneInfo(1, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo(1, nID, nStyle, 200);
UINT nStyle1 = 0;
m_wndStatusBar.GetPaneInfo(0, nID, nStyle1, cxWidth);
m_wndStatusBar.SetPaneInfo(0, nID, nStyle, 200);
m_wndStatusBar.GetPaneInfo(2, nID, nStyle, cxWidth);
m_wndStatusBar.SetPaneInfo(2, nID, nStyle | SBPS_STRETCH, 0);
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
if (!m_wndCommand.Create(this, IDD_DLGBAR_COMMAND, CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE, IDD_DLGBAR_COMMAND)) { TRACE0("Failed to create dialog bar m_wndCommand\n"); return -1; // fail to create }
if (!m_wndFile.Create(this, IDD_DLGBAR_FILE,
CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
IDD_DLGBAR_FILE))
{
TRACE0("Failed to create dialog bar m_wndFile\n");
return -1; // fail to create
}
if (!m_wndComputer.Create(this, IDD_DLGBAR_COMPUTER,
CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
IDD_DLGBAR_COMPUTER))
{
TRACE0("Failed to create dialog bar m_wndFile\n");
return -1; // fail to create
}
if (!m_wndDibView.Create(this) ||
!m_wndDibView.LoadToolBar(IDR_TOOLBAR_DIBVIEW))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_wndDibView.ModifyStyle(0, TBSTYLE_FLAT);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndCommand.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM); m_wndFile.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
m_wndComputer.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
m_wndDibView.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndFile, AFX_IDW_DOCKBAR_BOTTOM);
RecalcLayout();
CRect rcMain;
CRect rcTool;
GetWindowRect(&rcMain);
m_wndToolBar.GetWindowRect(&rcTool);
rcMain.top = rcTool.top;
rcMain.left = rcTool.right;
rcMain.bottom = rcMain.top + rcTool.Height();
DockControlBar(&m_wndCommand, AFX_IDW_DOCKBAR_TOP, &rcMain);
RecalcLayout();
GetWindowRect(&rcMain);
m_wndCommand.GetWindowRect(&rcTool);
rcMain.top = rcTool.top;
rcMain.left = rcTool.right;
rcMain.bottom = rcMain.top + rcTool.Height();
DockControlBar(&m_wndComputer, AFX_IDW_DOCKBAR_TOP, &rcMain);
RecalcLayout();
m_wndToolBar.SetWindowText(_T("主工具條"));
m_wndCommand.SetWindowText(_T("命令工具條"));
m_wndFile.SetWindowText(_T("文件操作工具條"));
m_wndComputer.SetWindowText(_T("電腦控制工具條"));
ShowControlBar(&m_wndCommand, FALSE, FALSE);
ShowControlBar(&m_wndComputer, FALSE, FALSE);
ShowControlBar(&m_wndFile, FALSE, FALSE);
ShowControlBar(&m_wndDibView, FALSE, FALSE);
//init some data
CComboBox *pCombo = (CComboBox *)(m_wndCommand.GetDlgItem(IDC_COMBO_COMMAND_TYPE));
if(pCombo)
{
int nItem = pCombo->AddString(_T("消息"));
pCombo->SetItemData(nItem, PL_MSG);
nItem = pCombo->AddString(_T("命令"));
pCombo->SetItemData(nItem, PL_FUNC_EXEC);
pCombo->SetCurSel(0);
}
pCombo = (CComboBox *)(m_wndFile.GetDlgItem(IDC_COMBO_FILE_TYPE));
if(pCombo)
{
int nItem = pCombo->AddString(_T("拷貝到遠程"));
pCombo->SetItemData(nItem, PL_FUNC_FILE_COPY_S);
nItem = pCombo->AddString(_T("拷貝到本地"));
pCombo->SetItemData(nItem, PL_FUNC_FILE_COPY_C);
nItem = pCombo->AddString(_T("刪除文件"));
pCombo->SetItemData(nItem, PL_FUNC_FILE_DELETE);
nItem = pCombo->AddString(_T("移動文件"));
pCombo->SetItemData(nItem, PL_FUNC_FILE_MOVE);
pCombo->SetCurSel(0);
}
pCombo = (CComboBox *)(m_wndComputer.GetDlgItem(IDC_COMBO_COMPUTER_TYPE));
if(pCombo)
{
int nItem = pCombo->AddString(_T("注銷"));
pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+0);
nItem = pCombo->AddString(_T("重啟"));
pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+1);
nItem = pCombo->AddString(_T("關(guān)機"));
pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+2);
nItem = pCombo->AddString(_T("鎖定"));
pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+3);
nItem = pCombo->AddString(_T("解鎖"));
pCombo->SetItemData(nItem, PL_FUNC_EXITWIN+4);
pCombo->SetCurSel(0);
}
//設(shè)置背景,通過一個圖像
m_wndClientWnd.SubclassWindow(m_hWndMDIClient);
HBITMAP hBmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_MAINCLIENT_BK));
m_wndClientWnd.SetBkBitmap(hBmp, FALSE);
::DeleteObject(hBmp);
//設(shè)置自己的風格菜單
m_hPeeperMenu.SetBkImage(IDB_BITMAP_MENU_BK);
// //設(shè)置系統(tǒng)菜單
// m_hPeeperSysMenu.AttachMenu(GetSystemMenu(FALSE)->GetSafeHmenu(), 0, CSize(0, 0));
#if 0
HGLOBAL hDib = ::PL_ReadDataFromFile(_T("d:\\test.doc"));
#endif
#if 0 //為了C_LZSS測試
HGLOBAL hUnZip = PL_LZSS_Zip(hDib);
HGLOBAL hZip = PL_LZSS_UnZip(hUnZip);
#endif //為了C_LZSS測試
#if 0//為了C_ARI測試
HGLOBAL hUnZip = PL_ARI_Zip(hDib);
HGLOBAL hZip = PL_ARI_UnZip(hUnZip);
#endif//為了C_ARI測試
#if 0 //為了LZ77測試
HGLOBAL hZip = ::PL_LZ77_Zip(hDib);
HGLOBAL hUnZip = ::PL_LZ77_UnZip(hZip);
#endif
#if 0 // 為了LZW測試
HGLOBAL hZip = PL_LZW_Zip(hDib);
HGLOBAL hUnZip = PL_LZW_UnZip(hZip);
PL_WriteDataToFile(_T("d:\\test_lzw.doc"), hUnZip);
#endif
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
return CMDIFrameWnd::PreCreateWindow(cs);
}
BOOL CMainFrame::PeeperMenuAttach(HMENU hMenu)
{
BOOL bRet = m_hPeeperMenu.AttachMenu(hMenu, IDR_MAINFRAME, CSize(16, 15));
m_hPeeperMenu.AddToolBar(IDR_TOOLBAR_DIBVIEW, CSize(16, 15));
return bRet;
}
BOOL CMainFrame::PeeperClientMenuAttach(HMENU hMenu)
{
return m_hPeeperClientMenu.AttachMenu(hMenu, IDR_MAINFRAME, CSize(16, 15));
}
int CMainFrame::GetClientCount()
{
int nCount = 0;
POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
while(pos)
{
CDocTemplate* pTemplate = (CDocTemplate*)AfxGetApp()->GetNextDocTemplate(pos);
POSITION pos2 = pTemplate->GetFirstDocPosition();
while(pos2)
{
CDocument * pDocument = pTemplate->GetNextDoc(pos2);
if(pDocument)
{
nCount ++;
}
}
break ;
}
return nCount;
}
CChildFrame *CMainFrame::GetCurFrame()
{
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if(pFrame)
{
return (CChildFrame *)pFrame->GetActiveFrame();
}
return NULL;
}
CPeeperWnd *CMainFrame::GetCurPeeperWnd()
{
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if(pFrame)
{
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
if(pChild)
{
return (CPeeperWnd *)pChild->GetActiveView();
}
}
return NULL;
}
CPeeperClientDoc *CMainFrame::GetCurPeeperDoc()
{
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if(pFrame)
{
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
if(pChild)
{
return (CPeeperClientDoc *)pChild->GetActiveDocument();
}
}
return NULL;
}
void CMainFrame::OnFileClose()
{
CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
if(!pPeeperWnd)
{
ShowControlBar(&m_wndCommand, FALSE, FALSE);
ShowControlBar(&m_wndComputer, FALSE, FALSE);
ShowControlBar(&m_wndFile, FALSE, FALSE);
ShowControlBar(&m_wndDibView, FALSE, FALSE);
RecalcLayout();
}
}
void CMainFrame::OnFileNew()
{
return ;
}
void CMainFrame::OnMenuCommand()
{
const MSG *pMsg = CWnd::GetCurrentMessage();
if(pMsg != NULL)
{
int nMenuID = (int)(LOWORD(pMsg->wParam));
CPeeperWnd *pPeeperWnd = GetCurPeeperWnd();
switch(nMenuID)
{
case ID_VIEW_SEND:
{
ShowControlBar(&m_wndCommand, !(m_wndCommand.IsWindowVisible()), TRUE);
}
break ;
case ID_FILE_MANAGE:
{
ShowControlBar(&m_wndFile, !(m_wndFile.IsWindowVisible()), TRUE);
}
break ;
case ID_VIEW_COMPUTER:
{
ShowControlBar(&m_wndComputer, !(m_wndComputer.IsWindowVisible()), TRUE);
}
break ;
case ID_TOOL_DIBVIEW_FULL:
{
ShowControlBar(&m_wndDibView, !(m_wndDibView.IsWindowVisible()), TRUE);
OnFullScreen();
}
break ;
case ID_FILE_CLOSESERVER:
{
if(pPeeperWnd && pPeeperWnd->GetState())
{
pPeeperWnd->CloseServer();
}
}
break ;
case ID_OPTION_PAUSE:
{
if(pPeeperWnd)
{
BOOL bPause = pPeeperWnd->IsPause();
if(bPause)
{
pPeeperWnd->Resume();
}
else
{
pPeeperWnd->Pause();
}
}
}
break ;
case ID_OPTION_MOUSE_MOVE:
{
if(pPeeperWnd)
{
BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_MOVE);
pPeeperWnd->SetEnableFlag(PL_ENABLE_MOUSE_MOVE, !bOld);
}
}
break ;
case ID_OPTION_MOUSE_LBUTTON:
{
if(pPeeperWnd)
{
BOOL bOld = pPeeperWnd->GetEnableFlag(PL_ENABLE_MOUSE_LBUTTON);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -