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

📄 mainfrm.cpp

📁 开发环境为VC++ 的数据库管理系统
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "MESTang.h"

#include "MainFrm.h"

#include "LogDlg.h"							 //  
#include "Aquiesce_FormView.h"
#include "SlabInputFormView.h"
#include "SlabSearchFormView.h"
#include "FeedFormView.h"
#include "ClientSocketThread.h"
#include "SlabHisFormView.h"
#include "SlabOutFormView.h"
#include "SlabStackMFormView.h"
#include "ReturnSlabFormView.h"

#include "MessageView.h"
#include "LogoFormView.h"

#include "ConfigDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
const UINT ID_RA_MSG =::RegisterWindowMessage(ra_MSG);

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_COMMAND(ID_SLAB_INPUT, OnSlabInput)
	ON_COMMAND(ID_CAST_VIEW, OnSlabSearch)
	ON_COMMAND(ID_FEED, OnFeed)
	ON_MESSAGE(WM_PRINT_MESSAGE,ProcessMessage)
	ON_COMMAND(ID_SET_CONFIG, OnSetConfig)
	ON_MESSAGE(WM_SEVER_CLIENT_OPC_MSG, ProcessClientOPCEvent)
	ON_COMMAND(ID_SLAB_HIS_RECORD, OnSlabHisRecord)
	ON_COMMAND(ID_SLAB_OUT, OnSlabOut)
	ON_COMMAND(ID_SLAB_STACK, OnSlabStack)
	ON_COMMAND(ID_SLAB_SEARCH, OnSlabSearch)
	ON_COMMAND(ID_SLAB_RETURN, OnSlabReturn)
	//}}AFX_MSG_MAP
	ON_REGISTERED_MESSAGE(ID_RA_MSG,OnRaMsg)
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()
{
	p_socket_thread=NULL;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::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
	}
	
	m_wndToolBar.SetSizes(CSize(40,40),CSize(32,32));
	m_imageList.Create(32, 32, TRUE | ILC_COLOR24|ILC_MASK, 1, 1);
	HICON hIcon = NULL;

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON2), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON4), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON5), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON6), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON7), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON8), IMAGE_ICON, 32, 32, 0);
	m_imageList.Add(hIcon);


	m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imageList);


	SetToolBarHide();

	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
	if (!m_wndToolBar_mark.CreateEx(this, /*TBSTYLE_TRANSPARENT*/TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, IDB_BITMAP_MARK, IDB_BITMAP_MARK, 10, false) ||
		!m_wndToolBar_mark.LoadToolBar(IDR_TOOLBAR1))
		//	if (!m_wndToolBar_mark.CreateEx(this, iconsize, WS_CHILD | WS_VISIBLE | CBRS_TOP
		//		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, IDB_BITMAP_MARK, IDB_BITMAP_MARK, 10, false) ||
		//		!m_wndToolBar_mark.LoadToolBar(IDR_TOOLBAR1))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	theApp.Msg("连接通信服务器......");
	if (p_socket_thread==NULL)
	{
		if(p_socket_thread=AfxBeginThread(RUNTIME_CLASS(CClientSocketThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL))
		{
			p_socket_thread->m_bAutoDelete=true; 
			p_socket_thread->ResumeThread(); 
		}
	}
	return 0;
	
//	
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::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
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::SetToolBarShow()
{
	m_wndToolBar.GetToolBarCtrl().SetState(ID_FILE_NEW,TBSTATE_HIDDEN);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_SYS_DISCONNECT,TBSTATE_ENABLED);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_SLAB_INPUT,TBSTATE_ENABLED);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_FEED,TBSTATE_ENABLED);
 	m_wndToolBar.GetToolBarCtrl().SetState(ID_CAST_VIEW,TBSTATE_ENABLED);
	RecalcLayout( );

}

void CMainFrame::SetToolBarHide()
{
	m_wndToolBar.GetToolBarCtrl().SetState(ID_FILE_NEW,TBSTATE_ENABLED);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_SYS_DISCONNECT,TBSTATE_HIDDEN);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_SLAB_INPUT,TBSTATE_HIDDEN);
	m_wndToolBar.GetToolBarCtrl().SetState(ID_FEED,TBSTATE_HIDDEN);
 	m_wndToolBar.GetToolBarCtrl().SetState(ID_CAST_VIEW,TBSTATE_HIDDEN);
	RecalcLayout( );

}





LRESULT CMainFrame::OnRaMsg( WPARAM wParam,LPARAM lParam )
{
// process message
//	SetForegroundWindow();
	ShowWindow(SW_SHOWMAXIMIZED);
	return 0;
}

void CMainFrame::OnDestroy() 
{
	CMDIFrameWnd::OnDestroy();
	
	// TODO: Add your message handler code here

	if(p_socket_thread!=NULL)
	{
		PostThreadMessage(p_socket_thread->m_nThreadID,WM_QUIT_THREAD,WM_QUIT_OK,0);
		theApp.m_event->WaitForObject(WM_QUIT_OK);
		PostThreadMessage(p_socket_thread->m_nThreadID,WM_SOCKET_STOP,WM_SOCKET_STOP_OK,0);
		theApp.m_event->WaitForObject(WM_SOCKET_STOP_OK);
		p_socket_thread=NULL;
	}
	
}



BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	CRect r;
	r.left=20;
	r.right=GetSystemMetrics(SM_CXSCREEN); 
    r.top=50;
	r.bottom=GetSystemMetrics(SM_CYSCREEN)-50; 

	//将窗口切分为1和2两个窗口
	if (!m_SplitterFirst.CreateStatic(this, 2, 1))
		return FALSE;
	else
	{
		//将窗口2切分为两个窗口
		if(!m_SplitterSecond.CreateStatic(&m_SplitterFirst, 1, 2, WS_CHILD | WS_VISIBLE |
							   WS_BORDER, m_SplitterFirst.IdFromRowCol(1, 0)))
		return FALSE;

		if (!m_SplitterSecond.CreateView(0,0,RUNTIME_CLASS(CMessageView), CSize(r.Width()*1.5, r.Height()*0.1),pContext))
		{
			m_SplitterSecond.DestroyWindow();
			return false;
		}

		if (!m_SplitterSecond.CreateView(0,1,RUNTIME_CLASS(CLogoFormView), CSize(r.Width()*0.12, r.Height()*0.1),pContext))
		{
			m_SplitterSecond.DestroyWindow();
			return false;
		}
		
	}
    //增加第一个窗口的视图类
	m_SplitterFirst.AddSwitchableView(m_SplitterFirst.IdFromRowCol(0,0),RUNTIME_CLASS(CAquiesce_FormView),
		pContext, CRect(0,0,r.Width()*0.88, r.Height()*0.45),
			true , 11);

	m_SplitterFirst.AddSwitchableView(12, 
			RUNTIME_CLASS( CFeedFormView), pContext,
			CRect(0,0,r.Width()*0.88, r.Height()*0.45));

	m_SplitterFirst.AddSwitchableView(13, 
			RUNTIME_CLASS( CSlabInputFormView), pContext,
			CRect(0,0,r.Width()*0.88, r.Height()*0.45));

	m_SplitterFirst.AddSwitchableView(14, 
			RUNTIME_CLASS( CSlabSearchFormView), pContext,
			CRect(0,0,r.Width()*0.88, r.Height()*0.45));


	m_SplitterFirst.AddSwitchableView(16, 
						RUNTIME_CLASS( CSlabHisFormView), pContext,
						CRect(0,0,r.Width()*0.88, r.Height()*0.45));
	m_SplitterFirst.AddSwitchableView(17, 
						RUNTIME_CLASS( CslabOutFormView), pContext,
						CRect(0,0,r.Width()*0.88, r.Height()*0.45));
		
	m_SplitterFirst.AddSwitchableView(18, 
								RUNTIME_CLASS( CSlabStackMFormView), pContext,
						CRect(0,0,r.Width()*0.88, r.Height()*0.45));
				
		
	m_SplitterFirst.AddSwitchableView(19, 
						RUNTIME_CLASS( CReturnSlabFormView), pContext,
						CRect(0,0,r.Width()*0.88, r.Height()*0.45));
		


	m_SplitterFirst.SetRowInfo(0,r.Height()*0.87, 50);
    m_SplitterFirst.RecalcLayout();

	return CMDIFrameWnd::OnCreateClient(lpcs, pContext);
}



void CMainFrame::OnSlabInput() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(13,0,0))
	{
		return;
	}
}

void CMainFrame::OnSlabSearch() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(14,0,0))
	{
		return;
	}	
}

void CMainFrame::OnFeed() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(12,0,0))
	{
		return;
	}	
}


//界面显示信息处理
LRESULT CMainFrame::ProcessMessage(WPARAM wParam, LPARAM lParam)
{
	theApp.Msg(theApp.comm_message);
	theApp.comm_message.Empty();

	return TRUE;
}

void CMainFrame::OnSetConfig() 
{
	CConfigDlg configdlg;
	configdlg.DoModal();
	delete configdlg;
}
LRESULT CMainFrame::ProcessClientOPCEvent(WPARAM wParam, LPARAM lParam)
{
	//调用挂料界面的函数
	CFeedFormView *pview=(CFeedFormView *)m_SplitterFirst.GetViewPtr(12,0,0);
	pview->ClientOPCEvent();
	return true;
}

void CMainFrame::OnSlabHisRecord() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(16,0,0))
	{
		return;
	}	
}

void CMainFrame::OnSlabOut() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(17,0,0))
	{
		return;
	}	
}

void CMainFrame::OnSlabStack() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(18,0,0))
	{
		return;
	}	
}

void CMainFrame::OnSlabReturn() 
{
	// TODO: Add your command handler code here
	if (!((CMainFrame*)AfxGetMainWnd())->m_SplitterFirst.SwitchView(19,0,0))
	{
		return;
	}	
}

⌨️ 快捷键说明

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