⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 串口通讯演示程序
💻 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 + -