writefile.cpp

来自「IO函数调用测试」· C++ 代码 · 共 223 行

CPP
223
字号
// WriteFile.cpp : implementation file
//

#include "stdafx.h"
#include "afxtempl.h"

#include "help.h"
#include "DataArray.h"
#include "HexDisp.h"
#include "Status.h"
#include "IOExplorer.h"
#include "NumericEdit.h"
#include "TraceEvent.h"
#include "EventList.h"
   #include "EventLog.h"
#include "Handle.h"
  #include "HandleCombo.h"
  #include "handleManager.h"
  #include "TraceManager.h"
    #include "CreateFileSheet.h"
      #include "WriteFileEvent.h"
#include "HandlePage.h"
#include "WriteFile.h"

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

/////////////////////////////////////////////////////////////////////////////
// CWriteFile property page

IMPLEMENT_DYNCREATE(CWriteFile, CHandlePage)

CWriteFile::CWriteFile() : CHandlePage(CWriteFile::IDD)
{
    initialized = FALSE;
	//{{AFX_DATA_INIT(CWriteFile)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CWriteFile::~CWriteFile()
{
}

void CWriteFile::DoDataExchange(CDataExchange* pDX)
{
	CHandlePage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWriteFile)
	DDX_Control(pDX, IDC_BYTES, c_Bytes);
	DDX_Control(pDX, IDC_HEX, c_Hex);
	DDX_Control(pDX, IDC_WRITEFILE, c_WriteFile);
	DDX_Control(pDX, IDC_BYTESTOWRITE, c_BytesToWrite);
	DDX_Control(pDX, IDC_BYTESWRITTEN, c_BytesWritten);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWriteFile, CHandlePage)
	//{{AFX_MSG_MAP(CWriteFile)
	ON_EN_CHANGE(IDC_BYTES, OnChangeBytes)
	ON_BN_CLICKED(IDC_WRITEFILE, OnWritefile)
	ON_BN_CLICKED(IDC_HEX, OnHex)
	ON_BN_CLICKED(IDC_HELPBUTTON, OnHelp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWriteFile message handlers

/****************************************************************************
*                          CWriteFile::OnChangeBytes
* Result: void
*       
* Effect: 
*       Note that we use OnChange because OnUpdate is reflected
*	to the control and we can't reflect it back up here without getting
*	into an infinite recursion.
****************************************************************************/

void CWriteFile::OnChangeBytes() 
{
 updateControls();
}

/****************************************************************************
*                           CWriteFile::OnWriteFile
* Result: void
*       
* Effect: 
*       Actually writes the data to the file
****************************************************************************/

void CWriteFile::OnWritefile() 
{
 CCreateFileSheet * sheet = getSheet();
 CHandle * ho = sheet->HandleList.getCurrentHandle();
 
 CDataArray b;
 c_Bytes.GetWindowText(b);

 WriteFileEvent * e = new WriteFileEvent(ho == NULL ? _T("") : ho->Name, 
                                       ho == NULL ? NULL : ho->h, 
 				       b);
 e->execute();

 c_Status.SetWindowText(e->lasterror);

 sheet->log->add(e);

 setEvent(*e);
}


/****************************************************************************
*                              CWriteFile::OnHex
* Result: void
*       
* Effect: 
*       Changes the display to hex bytes
****************************************************************************/

void CWriteFile::OnHex() 
{
 if(c_Hex.GetCheck() == BST_CHECKED)
    { /* hex */
     c_Bytes.toHex();
    } /* hex */
 else
    { /* ascii */
     c_Bytes.toAscii();
    } /* ascii */
}

/****************************************************************************
*                             CWriteFile::getEvent
* Inputs:
*       WriteFileEvent & e:
* Result: void
*       
* Effect: 
*       Copies controls to a Writefile object
****************************************************************************/

void CWriteFile::getEvent(WriteFileEvent & e)
    {
    }

/****************************************************************************
*                             CWriteFile::setEvent
* Inputs:
*       WriteFileEvent & e
* Result: void
*       
* Effect: 
*       Transfers contents of event to controls
****************************************************************************/

void CWriteFile::setEvent(WriteFileEvent & e)
    {
     c_BytesWritten.SetWindowText(e.NumberOfBytesWritten);
    }

/****************************************************************************
*                          CWriteFile::updateControls
* Result: void
*       
* Effect: 
*       Updates the controls
****************************************************************************/

void CWriteFile::updateControls()
    {
     CDataArray b;
     CCreateFileSheet * sheet = getSheet();
     CHandle * ho = sheet->HandleList.getCurrentHandle();

     c_Bytes.GetWindowText(b); // Handle UNICODE properly

     c_BytesToWrite.SetWindowText(b.GetSize());

     c_Hex.EnableWindow(c_Bytes.canAscii());

     WriteFileEvent e(ho == NULL ? _T("") : ho->Name, 
                     ho == NULL ? 0 : ho->h, 
                     b);

     CString s = e.display();
     c_Text.SetWindowTextA(s);
     c_WriteFile.EnableWindow(b.GetSize() >  0);
    }

BOOL CWriteFile::OnInitDialog() 
{
	CHandlePage::OnInitDialog();
	
        initialized = TRUE;
        updateControls();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CWriteFile::OnSetActive() 
{
     return CHandlePage::OnSetActive();
}

/****************************************************************************
*                             CWriteFile::OnHelp
* Result: void
*       
* Effect: 
*       Calls the help system
****************************************************************************/

void CWriteFile::OnHelp()
    {
     AfxGetApp()->WinHelp(WriteFileHelp, HELP_CONTEXT);
    }

⌨️ 快捷键说明

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