📄 mainfrm.h
字号:
// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_)
#define AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "util.h"
#include "view.h"
#include "taskbaricon.h"
#include "dlgtabctrl.h"
#define HAVE_REMOTE
BOOL g_bStart=FALSE;
class CMainFrame :
public CMDIFrameWindowImpl<CMainFrame>,
public CMDICommands<CMainFrame>,
public CCustomizableToolBarCommands<CMainFrame>,
public CUpdateUI<CMainFrame>,
public CMessageFilter,
public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
CMDICommandBarXPCtrl m_CmdBar;
CMultiPaneStatusBarXPCtrl m_StatusBar;
CMDIContainer m_MDIContainer;
CImageListCtrl m_Images;
CDotNetDockingWindow m_dock;
CDialogTabCtrl m_ctrlTab;
CAccelerator m_accel;
CVerView m_view;
CTaskBarIcon m_ti;
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if( CMDIFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg) )
return TRUE;
if( !m_accel.IsNull() && m_accel.TranslateAccelerator(m_hWnd, pMsg) )
return TRUE;
HWND hWnd = MDIGetActive();
if( hWnd != NULL )
return (BOOL)::SendMessage(hWnd, WM_FORWARDMSG, 0, (LPARAM) pMsg);
return FALSE;
}
virtual BOOL OnIdle()
{
HWND hWnd = MDIGetActive();
UIUpdateToolBar();
UISetCheck(ID_SWITCH_WINDOW, ::IsWindowVisible(m_view));
m_dock.OnIdle();
SetWindowText("以太帧的发送和接收");
return FALSE;
}
#ifndef BTNS_SHOWTEXT
#define BTNS_SHOWTEXT 0x0040
#endif // BTNS_SHOWTEXT
void AddButtonText(CToolBarCtrl tb, UINT nID, UINT nRes)
{
TBBUTTONINFO tbi = { 0 };
tbi.cbSize = sizeof(TBBUTTONINFO),
tbi.dwMask = TBIF_STYLE;
tb.GetButtonInfo(nID, &tbi);
tbi.dwMask = TBIF_STYLE | TBIF_TEXT;
tbi.fsStyle |= TBSTYLE_AUTOSIZE | BTNS_SHOWTEXT;
WTL::CString s(MAKEINTRESOURCE(nRes));
tbi.pszText = (LPTSTR) (LPCTSTR) s;
tb.SetButtonInfo(nID, &tbi);
}
void AddDropDownButton(CToolBarCtrl tb, UINT nID)
{
tb.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
TBBUTTONINFO tbi = { 0 };
tbi.cbSize = sizeof(TBBUTTONINFO);
tbi.dwMask = TBIF_STYLE;
tb.GetButtonInfo(nID, &tbi);
tbi.fsStyle |= TBSTYLE_DROPDOWN;
//tbi.fsStyle |= BTNS_WHOLEDROPDOWN ;
tb.SetButtonInfo(nID, &tbi);
}
void AddControlToToolbar(CToolBarCtrl tb, HWND hWnd, USHORT cx, UINT nCmdPos, bool bIsCommandId, bool bInsertBefore = true)
{
ATLASSERT(::IsWindow(hWnd));
static UINT s_nCmd = 45000; // Unique number for new toolbar separator
int iIndex = nCmdPos;
if( bIsCommandId ) iIndex = tb.CommandToIndex(nCmdPos);
if( !bInsertBefore ) iIndex++;
// Create a separator toolbar button
TBBUTTON but = { 0 };
but.fsStyle = TBSTYLE_SEP;
but.fsState = TBSTATE_ENABLED;
but.idCommand = s_nCmd;
BOOL bRes = tb.InsertButton(iIndex, &but);
ATLASSERT(bRes);
bRes;
TBBUTTONINFO info;
info.cbSize = sizeof(info);
info.dwMask = TBIF_SIZE;
info.cx = cx;
tb.SetButtonInfo(s_nCmd++, &info);
// Chain the control to its new parent
::SetParent(hWnd, tb);
// Position the new control on top of the separator
RECT rc;
tb.GetItemRect(iIndex, &rc);
::SetWindowPos(hWnd, NULL, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_NOACTIVATE);
}
BEGIN_UPDATE_UI_MAP(CMainFrame)
/* UPDATE_ELEMENT(ID_FILE_PRINT, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_FILE_SAVE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_EDIT_COPY, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)*/
UPDATE_ELEMENT(ID_EDIT_CLEAR, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
/* UPDATE_ELEMENT(ID_EDIT_PASTE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)*/
/* UPDATE_ELEMENT(ID_VIEW_VIEW1, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_VIEW2, UPDUI_MENUPOPUP)*/
UPDATE_ELEMENT(ID_SWITCH_WINDOW, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_NCLBUTTONDOWN, OnNCLButtonDown)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
COMMAND_ID_HANDLER(ID_FILE_CLOSE, OnFileClose)
COMMAND_ID_HANDLER(ID_SWITCH_WINDOW, OnViewBar)
/* COMMAND_ID_HANDLER(ID_TOOLS_CUSTOMIZE, OnToolCustomize)*/
COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
TASKBAR_MESSAGE_HANDLER(m_ti, WM_LBUTTONDOWN, OnTaskIconClick)
CHAIN_MSG_MAP_MEMBER(m_ti)
//NOTIFY_CODE_HANDLER(TBN_DROPDOWN, OnToolbarDropDown)
CHAIN_MDI_CHILD_COMMANDS()
CHAIN_MSG_MAP(CMDICommands<CMainFrame>)
CHAIN_DOCK_CHILD_COMMANDS(m_view)
CHAIN_MSG_MAP(CCustomizableToolBarCommands<CMainFrame>)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CMDIFrameWindowImpl<CMainFrame>)
// This is actually for the XP combobox
if( uMsg == WM_COMMAND && LOWORD(wParam) == IDC_COMBO ) REFLECT_NOTIFICATIONS()
END_MSG_MAP()
LRESULT OnViewBar(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
HWND hWnd;
switch( wID ) {
case ID_SWITCH_WINDOW:
if (!::IsWindow(m_view)) {
m_view.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
m_view.SetWindowText("窗口切换");
m_dock.AddWindow(m_view);
m_dock.DockWindow(m_view, DOCK_LASTKNOWN);
return 0;
}
hWnd = m_view;
break;
default: return 0;
}
if( ::IsWindowVisible(hWnd) )
m_dock.HideWindow(hWnd);
else
m_dock.DockWindow(hWnd, DOCK_LASTKNOWN);
return 0;
}
LRESULT 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 | TBSTYLE_LIST | CCS_ADJUSTABLE);
InitToolBar(hWndToolBar, IDR_MAINFRAME);
CToolBarCtrl tb = hWndToolBar;
// Load previously saved button layout
tb.RestoreState(HKEY_CURRENT_USER, _T("SOFTWARE\\NetChina\\RawPacket"), _T("Toolbar"));
// Manipulate some toolbar buttons
// Notice how the TBSTYLE_LIST style was added to place text on the
// right of the buttons...
// AddDropDownButton(tb, ID_FILE_OPEN);
AddButtonText(tb, ID_FILE_OPEN, IDS_OPEN);
// AddButtonText(tb, ID_TOOLS_RUN, IDS_RUN);
tb.AutoSize();
// Create rebar
CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
AddSimpleReBarBand(hWndCmdBar);
AddSimpleReBarBand(hWndToolBar, NULL, TRUE);
// Create StatusBar
m_hWndStatusBar = m_StatusBar.Create(m_hWnd);
int aPanes[] = { ID_DEFAULT_PANE, IDS_SB_PANE1, IDS_SB_PANE2 };
m_StatusBar.SetPanes(aPanes, 3);
m_StatusBar.SetPaneWidth(IDS_SB_PANE1,280);
m_StatusBar.SetPaneWidth(IDS_SB_PANE2,60);
// Create XP ComboBox in ToolBar
// Create MDI Client
CreateMDIClient();
m_CmdBar.SetMDIClient(m_hWndMDIClient);
// Docking Windows
m_dock.Create(m_hWnd, rcDefault);
m_dock.SetExtendedDockStyle(DCK_EX_DESTROYONCLOSE);
// Attach MDI Container (manages the MDI Client and tabbed frame)
m_MDIContainer.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
m_MDIContainer.SetMDIClient(m_hWndMDIClient);
// Create docked views
m_dock.SetClient(m_MDIContainer);
m_view.Create(m_dock, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
m_view.SetWindowText("窗口切换");
m_dock.AddWindow(m_view);
m_dock.DockWindow(m_view, DOCK_LEFT);
m_dock.SetPaneSize(DOCK_LEFT, 200);
m_dock.SetPaneSize(DOCK_RIGHT, 160);
m_ti.Install(m_hWnd, 1, IDR_MAINFRAME);
m_hWndClient =m_dock/* m_AutoHide*/;
m_CmdBar.AddToolbar(hWndToolBar);
m_CmdBar.Prepare();
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);
PostMessage(WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
return 0;
}
LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
// Get the toolbar HWND.
// Ok, I could have stored it in a member variable,
// but this is much more fun 8-(
CReBarCtrl rebar = m_hWndToolBar;
UINT iBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST + 1); // toolbar is 2nd added band
REBARBANDINFO rbi = { 0 };
rbi.cbSize = sizeof(REBARBANDINFO);
rbi.fMask = RBBIM_CHILD;
rebar.GetBandInfo(iBandIndex, &rbi);
CToolBarCtrl tb = rbi.hwndChild;
tb.SaveState(HKEY_CURRENT_USER, _T("SOFTWARE\\Netchina\\RawPacket"), _T("Toolbar"));
bHandled = FALSE;
return 0;
}
LRESULT OnNCLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// Get the toolbar HWND.
// Ok, I could have stored it in a member variable,
// but this is much more fun 8-(
if(wParam==HTCLOSE||wParam==HTMINBUTTON){
PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
bHandled=TRUE;
return 0;
}
bHandled=FALSE;
return 0;
}
LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
if (CChildFrame::m_nCount==0) {
CChildFrame* pChild = new CChildFrame;
pChild->CreateEx(m_hWndMDIClient);
}
return 0;
}
LRESULT OnFileClose(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
HWND hWnd = MDIGetActive();
if( hWnd ) ::PostMessage(hWnd, WM_CLOSE, 0, 0);
return 0;
}
LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
PostMessage(WM_CLOSE);
Sleep(300);
return 0;
}
LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
if( wParam==SIZE_MINIMIZED) ShowWindow(SW_HIDE);
bHandled = FALSE;
return 0;
}
LRESULT OnTaskIconClick(LPARAM /*uMsg*/, BOOL& /*bHandled*/)
{
ShowWindow(SW_SHOWNORMAL);
::SetForegroundWindow(m_hWnd);
return 0;
}
LRESULT 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 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 OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CAboutDlg dlg;
dlg.DoModal();
return 0;
}
};
#endif // !defined(AFX_MAINFRM_H__8D2936ED_9E84_4EEE_92DA_4DDE7CC73914__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -