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

📄 executionpage.cpp

📁 eCos1.31版
💻 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){    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):                pDlg->m_Combo.GetWindowText(pDlg->m_strExtension);		        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 + -