=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/winfep/winfepDlg.cpp,v retrieving revision 1.1 retrieving revision 1.5 diff -u -p -r1.1 -r1.5 --- OpenXM_contrib2/windows/winfep/winfepDlg.cpp 2010/01/20 08:24:23 1.1 +++ OpenXM_contrib2/windows/winfep/winfepDlg.cpp 2013/08/07 01:53:40 1.5 @@ -95,7 +95,6 @@ CWinfepDlg::CWinfepDlg(CWnd* pParent /*=NULL*/) : CDialog(CWinfepDlg::IDD, pParent) { //{{AFX_DATA_INIT(CWinfepDlg) - // メモ: この位置に ClassWizard によってメンバの初期化が追加されます。 //}}AFX_DATA_INIT // メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。 get_asirhwnd(); @@ -106,9 +105,9 @@ void CWinfepDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWinfepDlg) + DDX_Control(pDX, IDC_CURRENTLINE, m_currentline); DDX_Control(pDX, IDC_AFTER, m_after); DDX_Control(pDX, IDC_BEFORE, m_before); - DDX_Control(pDX, IDC_CURRENTLINE, m_currentline); DDX_Control(pDX, IDC_CURRENTFILE, m_currentfile); //}}AFX_DATA_MAP } @@ -125,6 +124,7 @@ BEGIN_MESSAGE_MAP(CWinfepDlg, CDialog) ON_BN_CLICKED(IDC_PREV, OnPrev) ON_BN_CLICKED(IDC_PREV10, OnPrev10) ON_BN_CLICKED(IDC_NEXT10, OnNext10) + ON_BN_CLICKED(IDC_QUIT, OnQuit) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -215,14 +215,38 @@ HCURSOR CWinfepDlg::OnQueryDragIcon() void CWinfepDlg::OnSend() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください - if ( !infile ) return; + int i; + if ( !infile ) return; if ( currentline >= 0 && currentline < nlines ) { - char *line = lineptr[currentline]; - for ( int i = 0; line[i]; i++ ) { - if ( line[i] == '\t' ) - ::SendMessage(asirhwnd,WM_CHAR,' ',8); - else - ::SendMessage(asirhwnd,WM_CHAR,line[i],1); + CString str; + m_currentline.GetWindowText(str); + LPCSTR line = (LPCSTR)str; + for ( i = 0; line[i] && isspace(line[i]); i++ ); + if ( line[i] && + !strncmp(line+i,"end$",4) || !strncmp(line+i,"end;",4) ) return; + +// for ( i = 0; line[i]; i++ ) { +// if ( line[i] == '\t' ) +// ::SendMessage(asirhwnd,WM_CHAR,' ',8); +// else +// ::SendMessage(asirhwnd,WM_CHAR,line[i],1); +// } +// ::SendMessage(asirhwnd,WM_CHAR,'\n',1); + if ( line[i] ) { +#if 0 + m_currentline.SetSel(0,str.GetLength()); + m_currentline.Copy(); +#else + int len=str.GetLength()+1; + if (!::OpenClipboard(NULL) ) return; + HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED,len); + LPTSTR pMem = (LPTSTR)hMem; + ::lstrcpy(pMem,(LPCTSTR)line); + ::EmptyClipboard(); + ::SetClipboardData(CF_TEXT,hMem); + ::CloseClipboard(); +#endif + ::SendMessage(asirhwnd,WM_CHAR,0x19,1); } ::SendMessage(asirhwnd,WM_CHAR,'\n',1); show_line(++currentline); @@ -282,7 +306,7 @@ void CWinfepDlg::OnAsir() CFileDialog fileDialog(TRUE); if ( fileDialog.DoModal() == IDOK ) { CString pathName = fileDialog.GetPathName(); - _spawnl(_P_NOWAIT,pathName,pathName,NULL); + _spawnl(_P_NOWAIT,pathName,"asirgui",NULL); Sleep(5000); get_asirhwnd(); } @@ -350,4 +374,17 @@ void CWinfepDlg::OnNext10() currentline += 10; if ( currentline >= nlines ) currentline = nlines; show_line(currentline); +} + +void CWinfepDlg::OnOK() +{ + // TODO: この位置にその他の検証用のコードを追加してください + OnSend(); +} + +void CWinfepDlg::OnQuit() +{ + // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください + CDialog::OnOK(); + }