plcsim2016/PLCSim2016/PLCSim2016Dlg.cpp
2016-08-02 00:36:22 +09:00

303 lines
6.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// PLCSim2016Dlg.cpp : ±¸Çö ÆÄÀÏ
//
#include "stdafx.h"
#include "PLCSim2016.h"
#include "PLCSim2016Dlg.h"
#include "afxdialogex.h"
#include "PLCDlg.h"
#include "IO_SIMULATORDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CIO_SIMULATORDlg* pdlg;
////////////////////////////////////////////////////////////////////
#define OUTPUT_FILE "C:\\PLCSim2016\\output.txt"
int fnReadOutput(char* pBuffer) {
FILE* pOutFile;
char sFileName[256];
sprintf(sFileName, "%s", OUTPUT_FILE);
pOutFile = fopen(OUTPUT_FILE, "r");
if (pOutFile != NULL) {
fread(pBuffer, 1, 256, pOutFile);
fclose(pOutFile);
return 0;
}
return -1;
}
VOID CALLBACK MyTimerProcIO(HWND hwnd, UINT iMsg, UINT iTimerID, DWORD dwTime)
{
/* timeup do timer proc */
HWND hWnd;
char strBuf[20];
char sBuffer[256];
memset(sBuffer, 0x00, 256);
hWnd = GetDlgItem(pdlg->m_hWnd, IDC_STATUS);
GetWindowText(hWnd, strBuf, 20);
switch (strBuf[0]) {
case '-': SetWindowText(hWnd, "\\"); break;
case '\\': SetWindowText(hWnd, "|"); break;
case '|': SetWindowText(hWnd, "/"); break;
case '/': SetWindowText(hWnd, "-"); break;
default: SetWindowText(hWnd, "-"); break;
}
fnReadOutput(sBuffer);
/* OUTPUT */
for (int i = 0; i < 8; i++) {
switch (i) {
case 0:
if (sBuffer[i] == 0x31)
pdlg->m_Out0.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out0.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 1:
if (sBuffer[i] == 0x31)
pdlg->m_Out1.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out1.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 2:
if (sBuffer[i] == 0x31)
pdlg->m_Out2.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out2.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 3:
if (sBuffer[i] == 0x31)
pdlg->m_Out3.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out3.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 4:
if (sBuffer[i] == 0x31)
pdlg->m_Out4.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out4.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 5:
if (sBuffer[i] == 0x31)
pdlg->m_Out5.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out5.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 6:
if (sBuffer[i] == 0x31)
pdlg->m_Out6.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out6.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
case 7:
if (sBuffer[i] == 0x31)
pdlg->m_Out7.SetIcon(AfxGetApp()->LoadIcon(IDI_ON));
else
pdlg->m_Out7.SetIcon(AfxGetApp()->LoadIcon(IDI_OFF));
break;
}
}
}
BOOL openSimulationModal() {
CIO_SIMULATORDlg dlg;
CIO_SIMULATORDlg* m_pMainWnd;
pdlg = &dlg;
m_pMainWnd = &dlg;
dlg.iTimerHandle = SetTimer(m_pMainWnd->m_hWnd, 500, 10, MyTimerProcIO);
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
////////////////////////////////////////////////////////////////////
// ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù.
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù.
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù.
// ±¸ÇöÀÔ´Ï´Ù.
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CPLCSim2016Dlg ´ëÈ­ »óÀÚ
CPLCSim2016Dlg::CPLCSim2016Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_PLCSIM2016_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPLCSim2016Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CPLCSim2016Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CPLCSim2016Dlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CPLCSim2016Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CPLCSim2016Dlg::OnBnClickedButton2)
END_MESSAGE_MAP()
// CPLCSim2016Dlg ¸Þ½ÃÁö 󸮱â
BOOL CPLCSim2016Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù.
// IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â
// ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
// TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù.
return TRUE; // Æ÷Ä¿½º¸¦ ÄÁÆ®·Ñ¿¡ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù.
}
void CPLCSim2016Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é
// ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â
// ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
void CPLCSim2016Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®ÀÔ´Ï´Ù.
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Ŭ¶óÀ̾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
// »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­
// ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
HCURSOR CPLCSim2016Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CPLCSim2016Dlg::OnBnClickedOk()
{
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
CDialogEx::OnOK();
}
void CPLCSim2016Dlg::OnBnClickedButton1()
{
CPLCDlg* dlg = new CPLCDlg();
dlg->Create(IDD_PLC_DIALOG, this);
dlg->ShowWindow(SW_NORMAL);
}
void CPLCSim2016Dlg::OnBnClickedButton2()
{
//CIO_SIMULATORDlg Dlg;
//Dlg.DoModal();
openSimulationModal();
}