📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "CeTools.h"
#include "MainFrm.h"
#include "CeToolsView.h"
#include "UManageView.h"
#include "PortDataView.h"
#include "LineView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_OPENCOMM, OnOpencomm)
ON_COMMAND(ID_CLOSECOMM, OnClosecomm)
ON_UPDATE_COMMAND_UI(ID_OPENCOMM, OnUpdateOpencomm)
ON_UPDATE_COMMAND_UI(ID_CLOSECOMM, OnUpdateClosecomm)
ON_COMMAND(ID_VIEW_TOP, OnViewTop)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOP, OnUpdateViewTop)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
ON_MESSAGE(ID_APPINFO, OnShowAppInfo)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_APPINFO,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
app = (CCeToolsApp *)AfxGetApp();
AppInfoIndex=1;
TopWinFlag=0;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
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
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CClientDC dc(this);
SIZE size=dc.GetTextExtent("COM1打开, 19200, 使用编码, 基本通道数据, 缓冲区字符数=0");
AppInfoIndex=m_wndStatusBar.CommandToIndex(ID_APPINFO);
m_wndStatusBar.SetPaneInfo(AppInfoIndex,ID_APPINFO,SBPS_NORMAL,size.cx);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter2.CreateStatic(
&wndSplitter,4, 1,
WS_CHILD | WS_VISIBLE | WS_BORDER,
wndSplitter.IdFromRowCol(0, 1)))
return FALSE;
if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CCeToolsView), CSize(0, 80), pContext) ||
!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CPortDataView), CSize(0, 1000), pContext) ||
!m_wndSplitter2.CreateView(2, 0, RUNTIME_CLASS(CUManageView), CSize(0, 0), pContext) ||
!m_wndSplitter2.CreateView(3, 0, RUNTIME_CLASS(CLineView), CSize(0, 0), pContext))
return FALSE;
DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation;
// |CGfxOutBarCtrl::fSelHighlight;
wndBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &wndSplitter, wndSplitter.IdFromRowCol(0, 0), dwf);
wndBar.SetOwner(this);
imaLarge.Create(IDB_IMAGELIST, 32, 0, RGB(128,128,128));
imaSmall.Create(IDB_SMALL_IMAGELIST, 16, 0, RGB(0,128,128));
wndBar.SetImageList(&imaLarge, CGfxOutBarCtrl::fLargeIcon);
wndBar.SetImageList(&imaSmall, CGfxOutBarCtrl::fSmallIcon);
// wndTree.Create(WS_CHILD|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS, CRect(0,0,0,0), &wndBar, 1010);
// wndTree.SetImageList(&imaSmall, TVSIL_NORMAL);
wndBar.SetAnimationTickCount(20);
wndBar.SetAnimSelHighlight(200);
/*
HTREEITEM htm = wndTree.InsertItem("tree 1", 0,0);
HTREEITEM htm1 = wndTree.InsertItem("tree 2", 1,1, htm);
wndTree.InsertItem("tree 3", 1,1, htm);
for (int xx = 0; xx < 30; xx ++)
{
htm = wndTree.InsertItem("tree 1", 0,0);
htm1 = wndTree.InsertItem("tree 2", 1,1, htm);
wndTree.InsertItem("tree 3", 1,1, htm);
htm = wndTree.InsertItem("tree 1", 0,0);
htm1 = wndTree.InsertItem("tree asdasdasdadasdasdasdasdas2", 1,1, htm);
wndTree.InsertItem("tree 3", 1,1, htm);
}
*/
wndBar.AddFolder("接收", 0);
// wndBar.AddFolderBar("TreeBar", &wndTree);
wndBar.AddFolder("设置", 1);
wndBar.InsertItem(0, 0, "无编码", 1, 0);
wndBar.InsertItem(0, 1, "有编码", 0, 0);
// wndBar.InsertItem(0, 2, "A通道", 2, 0);
// wndBar.InsertItem(0, 3, "B通道", 3, 0);
// wndBar.InsertItem(0, 4, "所有通道", 0, 0);
wndBar.InsertItem(0, 2, "解码", 2, 0);
wndBar.InsertItem(0, 3, "停止", 3, 0);
wndBar.InsertItem(1, 0, "保存参数", 3, 0);
wndBar.SetSelFolder(0);
CRect r;
GetClientRect(&r);
int w1 = r.Width()/5;
int w2 = r.Width()/4;
wndSplitter.SetColumnInfo( 0, w1, 0 );
wndSplitter.SetColumnInfo( 1, w2, 0 );
wndSplitter.RecalcLayout();
return true;
}
long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
::SendMessage(m_wndSplitter2.GetPane(0,0)->m_hWnd,OUTBAR_NOTIFY,wParam,lParam);
::SendMessage(m_wndSplitter2.GetPane(2,0)->m_hWnd,OUTBAR_NOTIFY,wParam,lParam);
return 1;
/*
switch (wParam)
{
case NM_OB_ITEMCLICK:
// cast the lParam to an integer to get the clicked item
{
int index = (int) lParam;
CString cs, cs1;
cs1 = wndBar.GetItemText(index);
cs.Format("Clicked on %d - <%s>", (int)lParam, cs1);
AfxMessageBox(cs);
}
return 0;
case NM_OB_ONLABELENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_ONGROUPENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_DRAGITEM:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);
}
return 1;
}
return 0;
*/
}
void CMainFrame::OnOpencomm()
{
::SendMessage(m_wndSplitter2.GetPane(2,0)->m_hWnd,ID_OPENCOMM,0,0);
}
void CMainFrame::OnClosecomm()
{
::SendMessage(m_wndSplitter2.GetPane(2,0)->m_hWnd,ID_CLOSECOMM,0,0);
ShowAppInfo(0);
}
void CMainFrame::OnUpdateOpencomm(CCmdUI* pCmdUI)
{
pCmdUI->Enable(app->PortState!=2);
}
void CMainFrame::OnUpdateClosecomm(CCmdUI* pCmdUI)
{
pCmdUI->Enable(app->PortState==2);
}
void CMainFrame::OnShowAppInfo(WPARAM wParam,LPARAM lParam)
{
ShowAppInfo(0);
}
void CMainFrame::ShowAppInfo(int flag)
{
CString str,str1;
int baud;
switch(AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("PortBaud"),6))
{
case 0:
baud=300;
break;
case 1:
baud=600;
break;
case 2:
baud=1200;
break;
case 3:
baud=2400;
break;
case 4:
baud=4800;
break;
case 5:
baud=9600;
break;
case 6:
baud=19200;
break;
case 7:
baud=38400;
break;
default:
baud=1200;
break;
}
int temp=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("PortNo"),0)+1;
if(app->PortState==1)
str.Format("COM%d关闭, %u",temp,baud);
else if(app->PortState==2)
str.Format("COM%d打开, %u",temp,baud);
else
str.Format("COM%d错误, %u",temp,baud);
if(app->BmState==1)
str+=", 使用编码";
else
str+=", 不使用编码";
if(app->ShowSel==1)
str+=", 基本通道数据";
else if(app->ShowSel==2)
str+=", 扩展通道数据";
else
str+=", 所有通道数据";
str1.Format(", 缓冲区字符数=%d",app->BufferDataLen);
str+=str1;
m_wndStatusBar.SetPaneText(AppInfoIndex,str);
}
void CMainFrame::OnViewTop()
{
if(TopWinFlag)
::SetWindowPos(app->m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
else
::SetWindowPos(app->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
TopWinFlag=~TopWinFlag;
}
void CMainFrame::OnUpdateViewTop(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(TopWinFlag);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -