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

📄 executionpage.cpp

📁 ecos实时嵌入式操作系统
💻 CPP
字号:
//####COPYRIGHTBEGIN####//                                                                          // ----------------------------------------------------------------------------// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.//// This program is part of the eCos host tools.//// This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2 of the License, or (at your option) // any later version.// // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for // more details.// // You should have received a copy of the GNU General Public License along with// this program; if not, write to the Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.//// ----------------------------------------------------------------------------//                                                                          //####COPYRIGHTEND####// ExecutionPage.cpp : implementation file//#include "stdafx.h"#include "ExecutionPage.h"#include "shlobj.h"#include "RunTestsSheet.h"#include <afxpriv.h> // for WM_KICKIDLE#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CExecutionPage property pageconst UINT arIds []={IDC_TT_SELECT_ALL,IDC_TT_UNSELECT_ALL,IDC_TT_ADD, IDC_TT_FOLDER, IDC_TT_REMOVE};IMPLEMENT_DYNCREATE(CExecutionPage, CeCosPropertyPage)CExecutionPage::CExecutionPage() :   CeCosPropertyPage(IDD_TT_EXECUTION_PAGE),  m_strExtension(_T("*.exe")){  GetCurrentDirectory(MAX_PATH,m_strFolder.GetBuffer(MAX_PATH));  m_strFolder.ReleaseBuffer();  //{{AFX_DATA_INIT(CExecutionPage)		// NOTE: the ClassWizard will add member initialization here  //}}AFX_DATA_INIT}CExecutionPage::~CExecutionPage(){}void CExecutionPage::DoDataExchange(CDataExchange* pDX){  CeCosPropertyPage::DoDataExchange(pDX);  //{{AFX_DATA_MAP(CExecutionPage)  DDX_Control(pDX, IDC_TT_RUNTESTS_LIST, m_List);  //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CExecutionPage, CeCosPropertyPage)//{{AFX_MSG_MAP(CExecutionPage)ON_BN_CLICKED(IDC_TT_FOLDER, OnFolder)ON_BN_CLICKED(IDC_TT_SELECT_ALL, OnSelectAll)ON_BN_CLICKED(IDC_TT_UNSELECT_ALL, OnUnselectAll)ON_BN_CLICKED(IDC_TT_ADD, OnAdd)ON_BN_CLICKED(IDC_TT_REMOVE, OnRemove)ON_WM_SIZE()ON_MESSAGE(WM_KICKIDLE, OnKickIdle)ON_WM_CHAR()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CExecutionPage message handlersCExecutionPage *CExecutionPage::pDlg=NULL;LRESULT CALLBACK CExecutionPage::WindowProcNew(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam){  if (message ==  WM_COMMAND) {    switch(wParam){    case MAKEWPARAM(IDC_TT_RECURSE,BN_CLICKED):      pDlg->m_bRecurse ^= 1;      pDlg->m_Button.SetCheck(pDlg->m_bRecurse);      return 0;    case MAKEWPARAM(IDC_TT_EXTENSION,EN_CHANGE):      {        CString str;        pDlg->m_Combo.GetWindowText(str);        pDlg->m_strExtension=(LPCTSTR)str;      }      return 0;    default:      break;    }  }  return CallWindowProc(pDlg->m_wndProc, hwnd, message, wParam, lParam);}int CALLBACK CExecutionPage::CBBrowseCallbackProc( HWND hwnd,                                                   UINT uMsg,                                                   LPARAM lParam,                                                   LPARAM lpData                                                   ){  pDlg=(CExecutionPage *)lpData;  switch(uMsg){  case BFFM_INITIALIZED:    {      ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPCTSTR)pDlg->m_strFolder);      CWnd *pWnd=CWnd::FromHandle(hwnd);      pWnd->SetWindowText(_T("Add Files from Folder"));            // Get rect of IDCANCEL button to the right      CRect rect,rect1,rect2;      pWnd->GetDlgItem(IDCANCEL)->GetWindowRect(&rect1);      pWnd->GetWindowRect(&rect2);      int nDlgMargin=rect2.right-rect1.right;      int nButtonHeight=rect1.Height();      rect.left=rect.top=nDlgMargin;      rect.right=rect.left+6*nButtonHeight;      rect.bottom=rect.top+(10*nButtonHeight)/14;      WPARAM wFont=(WPARAM)GetStockObject(DEFAULT_GUI_FONT);      pDlg->m_Button.CreateEx(0,_T("BUTTON"),NULL, WS_VISIBLE|WS_CHILD|BS_CHECKBOX, rect, pWnd, IDC_TT_RECURSE);      pDlg->m_Button.SetWindowText(_T("&Add from subfolders"));      pDlg->m_Button.SendMessage(WM_SETFONT, wFont, 0);      pDlg->m_Button.SetCheck(pDlg->m_bRecurse);            rect.left=rect.right+(4*nButtonHeight)/14;      rect.right=rect.left+3*nButtonHeight;      rect.bottom+=2*GetSystemMetrics(SM_CYBORDER)+4;      pDlg->m_Static.Create(_T("Files of type:"),WS_VISIBLE|WS_CHILD|SS_LEFT, rect, pWnd);      pDlg->m_Static.SendMessage(WM_SETFONT, wFont, 0);      rect.bottom-=2*GetSystemMetrics(SM_CYBORDER)+4;            rect.left=rect.right+(4*nButtonHeight)/14;      rect.right=rect.left+3*nButtonHeight;      //rect.bottom=rect.top+2*nButtonHeight;      rect.top=rect.bottom-(12*nButtonHeight)/14;      pDlg->m_Combo.CreateEx(WS_EX_CLIENTEDGE,_T("Edit"),NULL,WS_VISIBLE|WS_CHILD|WS_BORDER|ES_LEFT/*|CBS_DROPDOWN*/, rect, pWnd, IDC_TT_EXTENSION);      //pDlg->m_Combo.AddString(pDlg->m_strExtension);      //pDlg->m_Combo.SetCurSel(0);      pDlg->m_Combo.SetWindowText(pDlg->m_strExtension);      pDlg->m_Combo.SendMessage(WM_SETFONT, wFont, 0);            pDlg->m_wndProc = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (long)WindowProcNew);          }  case BFFM_SELCHANGED:    {      // Change the cwd such that if the New button is used, we know where we are to start from      ITEMIDLIST *iil=(ITEMIDLIST *)lParam;      CString strFolder;      SHGetPathFromIDList(iil,strFolder.GetBuffer(MAX_PATH));      strFolder.ReleaseBuffer();      SetCurrentDirectory(strFolder);    }    break;  default:    ;  }    return 0;}void CExecutionPage::OnFolder() {    BROWSEINFO bi;  bi.hwndOwner = GetSafeHwnd();   bi.pidlRoot = NULL;     bi.pszDisplayName = m_strFolder.GetBuffer(MAX_PATH);  bi.lpszTitle = _T("");  bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT/*|0x0010 BIF_EDITBOX*/;               bi.lpfn = (BFFCALLBACK)CBBrowseCallbackProc;  bi.lParam = (LPARAM)this;    bool bSaveRecurse=m_bRecurse;  LPITEMIDLIST iil = SHBrowseForFolder(&bi);  m_strFolder.ReleaseBuffer();  if(iil){    SHGetPathFromIDList(iil,m_strFolder.GetBuffer(MAX_PATH));    m_strFolder.ReleaseBuffer();    SetModified();    FillListBox(m_strFolder);  } else {    m_bRecurse=bSaveRecurse;  }  }/*void CExecutionPage::OnRefresh() {FillListBox(m_strFolder);}*/void CExecutionPage::FillListBox(LPCTSTR pszFolder){  CWaitCursor wait;  CString strOldFolder;  ::GetCurrentDirectory(MAX_PATH,strOldFolder.GetBuffer(MAX_PATH));  strOldFolder.ReleaseBuffer();    if(::SetCurrentDirectory(pszFolder)){    int nCount=m_List.GetCount();    m_List.Dir(DDL_READWRITE,m_strExtension);    for(int i=nCount;i<m_List.GetCount();i++){      TCHAR strFull[1+MAX_PATH];      CString str;      m_List.GetText(i,str);      TCHAR *pFile;      ::GetFullPathName(str,MAX_PATH,strFull,&pFile);      m_List.DeleteString(i);      if(LB_ERR==m_List.FindStringExact(-1,strFull)){        m_List.InsertString(i,strFull);        m_List.SetCheck(i,TRUE);      } else {        --i;      }    }    if(m_bRecurse){		    CFileFind finder;        BOOL bMore=finder.FindFile();        while (bMore)    {          bMore = finder.FindNextFile();          if(finder.IsDirectory() && !finder.IsDots()){            FillListBox(finder.GetFileName());          }        }    }    ::SetCurrentDirectory(strOldFolder);  }  GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(m_List.GetCount()>0);  GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(m_List.GetCount()>0);}void CExecutionPage::OnSelectAll() {  for(int i=0;i<m_List.GetCount();i++){    m_List.SetCheck(i,TRUE);  }}void CExecutionPage::OnUnselectAll() {  for(int i=0;i<m_List.GetCount();i++){    m_List.SetCheck(i,FALSE);  }}bool CExecutionPage::IsSelected(int i){  return TRUE==m_List.GetCheck(i);}void CExecutionPage::OnAdd() {  CFileDialog dlg(TRUE, _T("exe"), _T("*.exe"), OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,    _T("Executables(*.exe)\0*.exe\0"));  dlg.m_ofn.lpstrTitle=_T("Add");  if(IDOK==dlg.DoModal()){    LPCTSTR pszDir=dlg.m_ofn.lpstrFile;    DWORD dwAttr=GetFileAttributes(pszDir);    if(0xFFFFFFFF!=dwAttr){      bool bErr=false;      if(dwAttr&FILE_ATTRIBUTE_DIRECTORY){        for(LPCTSTR c=pszDir+_tcslen(pszDir)+1;_TCHAR('\0')!=*c;c+=_tcslen(c)+1){          CString str(pszDir);          str+=_TCHAR('\\');          str+=c;          if(LB_ERR==m_List.FindStringExact(-1,str)){            m_List.SetCheck(m_List.AddString(str),TRUE);          } else {            bErr=true;          }        }      } else {        if(LB_ERR==m_List.FindStringExact(-1,pszDir)){          m_List.SetCheck(m_List.AddString(pszDir),TRUE);        } else {          bErr=true;        }      }      if(bErr){        MessageBox(_T("One or more of the files was already present"));      }    }  }  GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(m_List.GetCount()>0);  GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(m_List.GetCount()>0);}int CExecutionPage::SelectedTestCount(){  int n=0;  if(IsWindow(m_List.m_hWnd)){    for(int i=0;i<m_List.GetCount();i++){      n+=m_List.GetCheck(i);    }  }  return n;}CString CExecutionPage::SelectedTest(int nIndex){  CString str;  for(int i=0;i<m_List.GetCount();i++){    if(m_List.GetCheck(i)){      if(0==nIndex--){        m_List.GetText(i,str);        break;      }    }  }  return str;  }BOOL CExecutionPage::OnInitDialog() {  CeCosPropertyPage::OnInitDialog();  for(POSITION pos = m_arstrPreLoad.GetStartPosition(); pos != NULL; ){    CString strFile;    void *p;    m_arstrPreLoad.GetNextAssoc( pos, strFile,p);    m_List.SetCheck(m_List.AddString(strFile),0!=p);  }  return TRUE;  // return TRUE unless you set the focus to a control  // EXCEPTION: OCX Property Pages should return FALSE}void CExecutionPage::OnSize(UINT nType, int cx, int cy) {  CRect rect;  GetClientRect(rect);  CeCosPropertyPage::OnSize(nType, cx, cy);    CWnd *pWnd=GetDlgItem(IDC_TT_RUNTESTS_LIST);  if(pWnd){    ((CRunTestsSheet*)GetParent())->MoveWindow(pWnd,CRunTestsSheet::Stretch);    const int nWnds=sizeof(arIds)/sizeof(arIds[0]);    CRect rc[nWnds];        CWnd *pWnd0=GetDlgItem(arIds[0]);    ((CRunTestsSheet*)GetParent())->MoveWindow(pWnd0,CRunTestsSheet::TopLeft);    CWnd *pWndn=GetDlgItem(arIds[nWnds-1]);    ((CRunTestsSheet*)GetParent())->MoveWindow(pWndn,CRunTestsSheet::TopRight);        CRect rect0;    pWnd0->GetWindowRect(rect0);    ScreenToClient(rect0);        CRect rectn;    pWndn->GetWindowRect(rectn);    ScreenToClient(rectn);        int nSpacing=(rectn.left-rect0.left)/(nWnds-1);    for(int i=1;i<nWnds-1;i++){      CRect rect;      rect.left=rect0.left+i*nSpacing;      rect.right=rect.left+rect0.Width();      rect.top=rect0.top;      rect.bottom=rect0.bottom;      pWnd=GetDlgItem(arIds[i]);      pWnd->GetWindowRect(rc[i]);      ScreenToClient(rc[i]);      pWnd->MoveWindow(rect);    }        for(i=0;i<sizeof(arIds)/sizeof(arIds[0]);i++){      InvalidateRect(rc[i]);      GetDlgItem(arIds[i])->Invalidate();    }      }	}LRESULT CExecutionPage::OnKickIdle(WPARAM, LPARAM){  if(IsWindow(m_List.m_hWnd)){    int n=m_List.GetCount();    bool bSelectAll=false;    bool bUnSelectAll=false;    if(n>0){      bool bPrev=false;      for(int i=0;i<n;i++){        bool bCheck=(TRUE==m_List.GetCheck(i));        if(bCheck){          bUnSelectAll=true;        } else {          bSelectAll=true;        }        if(i>0 && bCheck!=bPrev){          break;        }        bPrev=bCheck;      }    }    GetDlgItem(IDC_TT_SELECT_ALL)->EnableWindow(bSelectAll);    GetDlgItem(IDC_TT_UNSELECT_ALL)->EnableWindow(bUnSelectAll);  }  return 0;}bool CExecutionPage::SomeTestsSelected(){  bool b=0;  if(IsWindow(m_List.m_hWnd)){    for(int i=0;i<m_List.GetCount();i++){      if(m_List.GetCheck(i)){        b=true;        break;      }    }  }  return b;  }void CExecutionPage::OnRemove() {  m_List.SendMessage(WM_COMMAND,IDC_TT_REMOVE,0);}

⌨️ 快捷键说明

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