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

📄 mainfrm.cpp

📁 一个很好的LFP规约调试器
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "TestLFPProtocol.h"

#include "MainFrm.h"
#include "IniFile.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CAutoHideFrame)

BEGIN_MESSAGE_MAP(CMainFrame, CAutoHideFrame)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_VIEW_CTRL_BAR, OnViewCtrlBar)
	ON_UPDATE_COMMAND_UI(ID_VIEW_CTRL_BAR, OnUpdateViewCtrlBar)
	ON_COMMAND(IDC_FRAME_VIEW, OnFrameView)
	ON_UPDATE_COMMAND_UI(IDC_FRAME_VIEW, OnUpdateFrameView)
	ON_COMMAND(IDC_FRAME_CLEAR, OnFrameClear)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	m_bshowmsg = FALSE;	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	EnableDocking( CBRS_ALIGN_ANY );
	CTestLFPProtocolApp *pApp=(CTestLFPProtocolApp *)AfxGetApp();
	pApp->m_pMainFrame = this;

	if (!m_wndMenuBar.Create(this) ||
		!m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // faile to create
	}

	m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndMenuBar);
	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
	}

	m_wndToolBar.SetButtonText( 0, "串口设置" );
	m_wndToolBar.SetButtonText( 1, "串口打开" );
	m_wndToolBar.SetButtonText( 2, "串口关闭" );
	m_wndToolBar.SetButtonText( 4, "控制窗口" );
	m_wndToolBar.SetButtonText( 5, "报文监视" );
	m_wndToolBar.SetButtonText( 6, "报文清除" );
	m_wndToolBar.SetButtonText( 8, "打开文件" );
	m_wndToolBar.SetButtonText( 9, "保存文件" );
	m_wndToolBar.SetButtonText( 10, "关于" );
	CRect rc(0, 0, 0, 0);
	CSize sizeMax(0, 0);
	CToolBarCtrl& bar = m_wndToolBar.GetToolBarCtrl();
	for (int nIndex = bar.GetButtonCount() - 1; nIndex >= 0; nIndex--)
	{
		bar.GetItemRect(nIndex, rc);

		rc.NormalizeRect();
		sizeMax.cx = __max(rc.Size().cx, sizeMax.cx);
		sizeMax.cy = __max(rc.Size().cy, sizeMax.cy);
	}
	m_wndToolBar.SetSizes(sizeMax, CSize(33,30));
	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
	}

	if( !m_wndDockPageBar.Create( _T("控制台"), this, CSize( 230, 260 ), TRUE, 123 ) ) {
		TRACE0("Failed to create DockPageBar.\n");
		return -1;
	}
	m_wndDockPageBar.SetBarStyle( m_wndDockPageBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC );
	m_wndDockPageBar.EnableDocking(CBRS_ALIGN_ANY);
 	if( !m_wndTreeCtrlEx.Create( WS_TABSTOP | WS_BORDER | WS_CHILD | WS_VISIBLE |
 		TVS_HASLINES | TVS_HASBUTTONS,
 		CRect( 0, 0, 0, 0 ), &m_wndDockPageBar, 1234 ) ) {
 		TRACE0( "Failed to create instant bar child\n" );
 		return -1;
 	}
 	m_wndTreeCtrlEx.ModifyStyleEx( 0, WS_EX_CLIENTEDGE );

	ImageList();
	if( !m_pYxListCtrl.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP,
		CRect( 0, 0, 0, 0 ), this, 126 ) ) {
		TRACE0( "Failed to create Yx List\n" );      // fail to create
		return -1;
	}
	if( !m_pYcListCtrl.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP,
		CRect( 0, 0, 0, 0 ), this, 126 ) ) {
		TRACE0( "Failed to create Yx List\n" );      // fail to create
		return -1;
	}
	if( !m_pSettingValueListCtrl.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP,
		CRect( 0, 0, 0, 0 ), this, 126 ) ) {
		TRACE0( "Failed to create Yx List\n" );      // fail to create
		return -1;
	}
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
	DockControlBar( &m_wndToolBar );
	DockControlBar( &m_wndDockPageBar, AFX_IDW_DOCKBAR_LEFT );
	m_wndDockPageBar.AddPage( &m_wndTreeCtrlEx, "控制", IDI_HELP );
	m_wndDockPageBar.AddPage( &m_pYxListCtrl, "遥信", IDI_HELP );
	m_wndDockPageBar.AddPage( &m_pYcListCtrl, "遥测", IDI_HELP );
	m_wndDockPageBar.AddPage( &m_pSettingValueListCtrl, "定值", IDI_HELP );

	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


void CMainFrame::OnViewCtrlBar() 
{
	// TODO: Add your command handler code here
 	ShowControlBar( &m_wndDockPageBar, !m_wndDockPageBar.IsVisible(), FALSE );
}

void CMainFrame::OnUpdateViewCtrlBar(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
 	pCmdUI->Enable();
 	pCmdUI->SetCheck( m_wndDockPageBar.IsVisible() );		
}

void CMainFrame::ImageList( void )
{
	m_wndImageList.Create( IDB_IMAGELIST, 16, 1, RGB( 255, 0, 255 ) );
	m_wndTreeCtrlEx.SetImageList( &m_wndImageList, TVSIL_NORMAL );
}

void CMainFrame::TreeRootInit( void )
{
 	m_wndTreeCtrlEx.DeleteAllItems();
 	root = m_wndTreeCtrlEx.InsertItem( "NSA3000保护测控装置管理器", 0, 0 );
}

void CMainFrame::AddTree( char* name, BYTE addr )
{
	char	text[128];
	sprintf( text, "%02d - %s", addr, name );
 	m_wndTreeCtrlEx.InsertItem( text, 3, 3, root, TVI_FIRST );
 	m_wndTreeCtrlEx.Expand( root, TVE_EXPAND );
}

void CMainFrame::OnFrameView() 
{
	// TODO: Add your command handler code here
	CTestLFPProtocolApp *pApp=(CTestLFPProtocolApp *)AfxGetApp();
	m_bshowmsg = !m_bshowmsg;
	if( m_bshowmsg ) {
		pApp->m_pMainView->MSGShow( TRUE );
	}
	else {
		pApp->m_pMainView->MSGShow( FALSE );
	}
}

void CMainFrame::OnUpdateFrameView(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck( m_bshowmsg );		
}

void CMainFrame::OnFrameClear()
{
	CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
	pApp->m_pMainView->m_MSG.SetWindowText( "" );
}

void CMainFrame::CreateListView( char* m_devicename )
{
	int				i, m_num;
	float			m_Coef;
	char			text[128], name[128], factor[128];
	char			path[128];
	CString			mItem;
	CStringArray	m_StrArray;
	CImageList		m_Imagelist;
	CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
	strcpy( path, pApp->m_pMainView->filepath );
	strcat( path, "\\" );
	strcat( path, m_devicename );
	CIniFile		config( path ); //assouan
	m_Imagelist.Create( 1, 16, ILC_COLOR | ILC_MASK, 1, 1 ); 
	m_pYxListCtrl.SetImageList( &m_Imagelist, LVSIL_SMALL );
	ASSERT( ( m_pYxListCtrl.GetStyle() & LVS_SHAREIMAGELISTS ) == 0 );
	m_pYxListCtrl.DeleteAllItems();
	m_pYxListCtrl.SetTextColor( RGB( 0, 0, 255 ) );
	while( m_pYxListCtrl.DeleteColumn( 0 ) );
	m_pYxListCtrl.ModifyStyle( 0, LVS_REPORT, TRUE );
	m_pYxListCtrl.SetExtendedStyle( m_pYxListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );
	m_pYxListCtrl.InsertColumn( 0, "序号", LVCFMT_LEFT, 40 );
	m_pYxListCtrl.InsertColumn( 1, "遥信名称", LVCFMT_LEFT, 110 );
	m_pYxListCtrl.InsertColumn( 2, "遥信状态", LVCFMT_LEFT, 80 );
	config.ReadSection( "遥信量", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num < 0 ) {
		sprintf( text, "没有找到%s或格式非法!", m_devicename );
		AfxMessageBox( text );
		return;
	}
	for( i = 0; i < m_num; i++ ) {
		mItem = m_StrArray.GetAt( i );
		mItem = config.ReadString( "遥信量", mItem );
		if( mItem != "" ) {
			sprintf( text, "%d", i );
			m_pYxListCtrl.InsertItem( i, text );
			sscanf((LPSTR)(LPCTSTR)mItem, "%s", name );
			m_pYxListCtrl.SetItemText( i, 1, name );
		}
	}
	m_pYcListCtrl.SetImageList( &m_Imagelist, LVSIL_SMALL );
	ASSERT( ( m_pYcListCtrl.GetStyle() & LVS_SHAREIMAGELISTS ) == 0 );
	m_Imagelist.Detach();
	m_pYcListCtrl.DeleteAllItems();
	m_pYcListCtrl.SetTextColor( RGB( 0, 0, 255 ) );
	while( m_pYcListCtrl.DeleteColumn( 0 ) );
	m_pYcListCtrl.ModifyStyle( 0, LVS_REPORT, TRUE );
	m_pYcListCtrl.SetExtendedStyle( m_pYcListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );
	m_pYcListCtrl.InsertColumn( 0, "序号", LVCFMT_LEFT, 40 );
	m_pYcListCtrl.InsertColumn( 1, "遥测名称", LVCFMT_LEFT, 80 );
	m_pYcListCtrl.InsertColumn( 2, "遥测系数", LVCFMT_LEFT, 80 );
	m_pYcListCtrl.InsertColumn( 3, "实际值", LVCFMT_LEFT, 80 );
	config.ReadSection( "遥测量", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num < 0 ) {
		sprintf( text, "没有找到%s或格式非法!", m_devicename );
		AfxMessageBox( text );
		return;
	}
	for( i = 0; i < m_num; i++ ) {
		mItem = m_StrArray.GetAt( i );
		mItem = config.ReadString( "遥测量", mItem );
		if( mItem != "" ) {
			sprintf( text, "%d", i );
			m_pYcListCtrl.InsertItem( i, text );
			sscanf((LPSTR)(LPCTSTR)mItem, "%s %s", name, factor );
			m_Coef = (float)atof( factor );
			m_pYcListCtrl.SetItemText( i, 1, name );
			sprintf( text, "%.2f", m_Coef );
			m_pYcListCtrl.SetItemText( i, 2, text );
		}
	}
}


void CMainFrame::CreateSettingValueView( char* m_devicename /* = NULL  */ )
{
	int				i, m_num, type;
	char			text[128], name[128];
	char			path[128];
	CString			mItem;
	CStringArray	m_StrArray;
	CImageList		m_Imagelist;
	CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
	strcpy( path, pApp->m_pMainView->filepath );
	strcat( path, "\\" );
	strcat( path, m_devicename );
	CIniFile		config( path ); //assouan
	m_Imagelist.Create( 1, 16, ILC_COLOR | ILC_MASK, 1, 1 ); 
	m_pSettingValueListCtrl.SetImageList( &m_Imagelist, LVSIL_SMALL );
	ASSERT( ( m_pSettingValueListCtrl.GetStyle() & LVS_SHAREIMAGELISTS ) == 0 );
	m_Imagelist.Detach();
	m_pSettingValueListCtrl.DeleteAllItems();
	m_pSettingValueListCtrl.SetTextColor( RGB( 0, 0, 255 ) );
	while( m_pSettingValueListCtrl.DeleteColumn( 0 ) );
	m_pSettingValueListCtrl.ModifyStyle( 0, LVS_REPORT, TRUE );
	m_pSettingValueListCtrl.SetExtendedStyle( m_pSettingValueListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );
	m_pSettingValueListCtrl.InsertColumn( 0, "序号", LVCFMT_LEFT, 80 );
	m_pSettingValueListCtrl.InsertColumn( 1, "定值名称", LVCFMT_LEFT, 220 );
	m_pSettingValueListCtrl.InsertColumn( 2, "定值", LVCFMT_LEFT, 110 );
	config.ReadSection( "保护定值", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num < 0 ) {
		sprintf( text, "没有找到%s或格式非法!", m_devicename );
		AfxMessageBox( text );
		return;
	}
	m_pSettingValueListCtrl.InsertItem( 0, "" );
	for( i = 0; i < m_num; i++ ) {
		mItem = m_StrArray.GetAt( i );
		mItem = config.ReadString( "保护定值", mItem );
		if( mItem != "" ) {
			sprintf( text, "%d", i );
			m_pSettingValueListCtrl.InsertItem( i+1, text );
			sscanf((LPSTR)(LPCTSTR)mItem, "%s %d", name, &type );
			m_pSettingValueListCtrl.SetItemText( i+1, 1, name );
			pApp->m_pMainView->dev_settingvalue_type[i+1] = type;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -