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

📄 editidlg.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// EditiDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Editi.h"
#include "EditiDlg.h"
#include "DlgAlignment.h"

#include "Afxtempl.h"
#include "iafxtemplate.h"
#include "Ok_Cancel_Select.h"

//#include "c:\MATLAB6p5\extern\include\engine.h"

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

int CEditiDlg::m_Ikey = 0;
short CEditiDlg::m_AlignHV=0;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEditiDlg dialog

CEditiDlg::CEditiDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CEditiDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CEditiDlg)
	m_editNum = 1;
	m_fNameIn = _T("");
	m_fNameOut = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_edit = 0;

	m_selectedRow = 1;
	m_selectedCol = 1;
	m_oldSelectedRow = 1;
	m_oldSelectedCol = 1;
}

void CEditiDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEditiDlg)
	DDX_Control(pDX, IDC_MSFLEXGRID1, m_gridCtrl);
	DDX_Text(pDX, IDC_EDIT1, m_editNum);
	DDX_Text(pDX, IDC_EDIT_FNAMEIN, m_fNameIn);
	DDX_Text(pDX, IDC_EDIT_FNAMEOUT, m_fNameOut);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CEditiDlg, CDialog)
	//{{AFX_MSG_MAP(CEditiDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_EN_KILLFOCUS(IDC_EDIT1, OnKillfocusEdit1)
	ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
	ON_BN_CLICKED(IDC_BtnFileDlg, OnBtnFileDlg)
	ON_BN_CLICKED(IDC_BtnSaveToFile, OnBtnSaveToFile)
	ON_BN_CLICKED(IDC_Btn2Matlab, OnBtn2Matlab)
	ON_MESSAGE(GRID_DATA_CHANGED,OnGridDataChanged)
	ON_WM_RBUTTONDOWN()
	ON_BN_CLICKED(IDC_BtnSetCellAlignment, OnBtnSetCellAlignment)
	ON_BN_CLICKED(IDC_BtnColor, OnBtnColor)
	ON_BN_CLICKED(IDC_BtnClear, OnBtnClear)
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_CellSize, OnReleasedcaptureCellSize)
	ON_COMMAND(ID_mnuCOPY, OnmnuCOPY)
	ON_COMMAND(ID_mnuPASTE, OnmnuPASTE)
	ON_WM_HSCROLL()
	ON_WM_TIMER()
	ON_COMMAND(ID_mnuBackColor, OnmnuBackColor)
	ON_COMMAND(ID_mnuForeColor, OnmnuForeColor)
	ON_COMMAND(ID_mnuRowInsert, OnmnuRowInsert)
	ON_COMMAND(ID_mnuRowDelete, OnmnuRowDelete)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEditiDlg message handlers

BOOL CEditiDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
      //m_fNameIn=_T("");
      //m_fNameOut=_T("");

      m_editSetFocus=false;
	int m=2; int n = 8;
      //void CEditiDlg::updateFlexGrid(int m,int n)
	updateFlexGrid(m,n);
	
     //Below for HScroll for Adjust RowHeight or ColWidth
	CSliderCtrl* pCellSize = (CSliderCtrl*)GetDlgItem(IDC_CellSize);

	//设定滚动条的滚动范围和初始位置
	pCellSize->SetRange(0,20);
	pCellSize->SetPos(10);
       iColWidth0=m_gridCtrl.GetColWidth(long(0));
       iRowHeight0=m_gridCtrl.GetRowHeight(long(0));

       strColSel=":";   //用于多列选中
       strRowSel=";";   //用于多行选中
       bMultiSel=false; //EnterCell时,是否在当前Cell处创建EditBox 
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CEditiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CEditiDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CEditiDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CEditiDlg::OnKillfocusEdit1() 
{
	// TODO: Add your control notification handler code here
 if(m_editSetFocus)
 {
	 m_editSetFocus=false;

	CString str0;
	CEdit * pEdit = (CEdit *)this->GetDlgItem(IDC_EDIT1);  //支点个数
	pEdit->GetWindowText(str0);
        m_editNum = atoi(str0);

	int m=m_editNum+1; int n = 8;
   //void CEditiDlg::refreshFlexGrid(int m,int n);
    refreshFlexGrid(m,n);
 }
}

BOOL CEditiDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message==WM_KEYDOWN)
	{
		if (pMsg->wParam==13)	// Enter键
			pMsg->message=WM_KILLFOCUS;
		if (pMsg->wParam==27)	//ESC键
			pMsg->message=WM_KILLFOCUS;
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CEditiDlg::OnSetfocusEdit1() 
{
	// TODO: Add your control notification handler code here
    m_editSetFocus=true;   //设置支点个数
}

void CEditiDlg::OnBtnFileDlg() 
{
	// TODO: Add your control notification handler code here

	CString FileTitle;			//除去后缀的文件名
	char Filter[]="所有文件(*.*)|*.*||";
	CFileDialog dlgOpen(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
		(LPCTSTR)Filter,NULL);
	if(dlgOpen.DoModal()==IDOK)
	{
		m_fNameIn=dlgOpen.GetPathName();
		FileTitle=dlgOpen.GetFileName(); //取得文件名(不包含路径、扩展名)
	}
	else
		return;
	SetDlgItemText(IDC_EDIT_FNAMEIN,(LPCTSTR)m_fNameIn); //在编辑框中显示文件名
	SetDlgItemText(IDC_EDIT_FNAMEOUT, _T("")); //在编辑框中覆盖前次操作的文件数
	Invalidate(TRUE); //对对话框窗口进行重画	

      CString str;
	CString strText = "";
	CString szLine = "";
	CString szLine0;
      int LineNum=-1;		
	//打开文件
	CStdioFile file;
	file.Open(m_fNameIn,CFile::modeRead);

	//逐行读取字符串
	while(file.ReadString(szLine))
	{
		strText += szLine;
  	 szLine.TrimLeft();
	 if(szLine!="")
	 {
		str=szLine.GetAt(0);
		if(str!="*") 
		{
			LineNum=LineNum+1;
			if(LineNum==0) szLine0=szLine;
		}
	 }
	}
	file.Close();
       LineNum=LineNum+1;
       int i,j;
      //Below to get 分隔符号(list seperator) in the effective line
       int iSeperator;
       szLine0.TrimLeft(); szLine0.TrimRight();
       if(szLine0.Find(char(9))!=-1)
       {
      	 iSeperator=9;  //Tab
       }
       else if(szLine0.Find(char(44))!=-1)
       {
      	 iSeperator=44; //colon ","
       }
       else if(szLine0.Find(char(32))!=-1)
       {
       	 iSeperator=32; //Space
       }
       else
       {
          MessageBox(_T("文本行内无有效分隔符号"), _T("无有效分隔符号!"), MB_ICONEXCLAMATION);
      	return;
      }
      
   CString ** data;
   Make2DArray<CString>(data,1,LineNum);
	file.Open(m_fNameIn,CFile::modeRead);

   LineNum=-1; strText="";
	//逐行读取字符串
	while(file.ReadString(szLine))
	{
		strText += szLine;
		szLine.TrimLeft();
	 if(szLine!="")
	 {
		str=szLine.GetAt(0);
		if(str!="*")
		{
		  LineNum=LineNum+1;
		  data[0][LineNum]=szLine;
        }
	 }
	}
	file.Close();
   LineNum=LineNum+1;
   str.Format("LineNum=%d",LineNum);
  // MessageBox(str);
 
	CListBox *pList =(CListBox*)GetDlgItem(IDC_LIST_RESULT); //显示字符串	
	pList->ResetContent();  //重新设置列表框内容
		for(i=0;i<LineNum;i++)
		{
			szLine="";
			szLine=data[0][i];
			pList->AddString(szLine);//向列表框中添加源文件中的数据行
		}
        //below to Parse inform from the CString Array 
        double ** inputMatrix;
        double outDat[7];
        CString ** inputMatrixS;
        CString outStr[7];
         Make2DArray<double>(inputMatrix,LineNum,7);
         Make2DArray<CString>(inputMatrixS,LineNum,7);
		for(i=0;i<LineNum;i++)
		{
			szLine="";
			szLine=data[0][i];
            //ParseLine(CString strIn, double outData[7], CString outStr[7], int iChar)
			ParseLine(szLine, outDat, outStr, iSeperator);
          for(j=0;j<7;j++)
		  {
			  inputMatrix[i][j]=outDat[j];
			  inputMatrixS[i][j]=outStr[j];
		  }
		}
   Delete2DArray<CString>(data,1);
   Delete2DArray<double>(inputMatrix,LineNum);

  //Below to display the input into MSFlexGrid
	int m=LineNum+1; int n = 8; char buf[128];
  //void CEditiDlg::updateFlexGrid(int m,int n)
	updateFlexGrid(m,n);
    n=n-1; m=m-1;
	for(i=0;i<m;i++)
	{
	   for(j=1;j<n;j++)
	   {
			sprintf(buf,"%s",inputMatrixS[i][j]);
			m_gridCtrl.SetTextMatrix(i+1, j, buf);
	   }
	}
  str.Format("%d",LineNum);
	SetDlgItemText(IDC_EDIT1,str); //在编辑框中显示支点个数
  m_editNum=LineNum;
  Delete2DArray<CString>(inputMatrixS,LineNum);
}

void CEditiDlg::OnBtnSaveToFile() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	CString FileTitle;			//除去后缀的文件名
	char Filter[]="所有文件(*.*)|*.*||";
	CFileDialog dlgOpen(FALSE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
		(LPCTSTR)Filter,NULL);
	if(dlgOpen.DoModal()==IDOK)
	{
		m_fNameOut=dlgOpen.GetPathName();
		FileTitle=dlgOpen.GetFileName(); //取得文件名(不包含路径、扩展名)
	}
	else
		return;
	SetDlgItemText(IDC_EDIT_FNAMEOUT,(LPCTSTR)m_fNameOut); //在编辑框中显示文件名
	Invalidate(TRUE); //对对话框窗口进行重画	

	COk_Cancel_Select CDlg; 
    int nResponse=CDlg.DoModal();
    int nColumn;
   if(nResponse==IDOK)
   {
	   nColumn=8;
   }
   else if(nResponse==IDCANCEL)
   {
	   nColumn=7;
   }

	//创建文件
	CStdioFile file;	

⌨️ 快捷键说明

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