📄 mainfrm.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 + -