// // Application Verifier UI // Copyright (c) Microsoft Corporation, 2001 // // // // module: ChooseExe.cpp // author: CLupu // created: 04/13/2001 // // Description: // // "Select individual tests" wizard page class. // #include "stdafx.h" #include "appverif.h" #include "ViewLog.h" #include "AVUtil.h" #include "AVGlobal.h" #include "Log.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // // Help IDs // static DWORD MyHelpIds[] = { 0, 0 }; ///////////////////////////////////////////////////////////////////////////// // CViewLogPage property page IMPLEMENT_DYNCREATE(CViewLogPage, CAppverifPage) CViewLogPage::CViewLogPage() : CAppverifPage(CViewLogPage::IDD) { //{{AFX_DATA_INIT(CViewLogPage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_nIssues = 0; } CViewLogPage::~CViewLogPage() { } void CViewLogPage::DoDataExchange(CDataExchange* pDX) { CAppverifPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CViewLogPage) DDX_Control(pDX, IDC_ISSUES, m_IssuesList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CViewLogPage, CAppverifPage) //{{AFX_MSG_MAP(CViewLogPage) ON_MESSAGE( WM_HELP, OnHelp ) ON_WM_CONTEXTMENU() ON_NOTIFY( NM_CLICK, IDC_ISSUES, OnClickIssue ) ON_NOTIFY( NM_CLICK, IDC_ISSUE_DESCRIPTION, OnClickURL ) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// ULONG CViewLogPage::GetDialogId() const { return IDD_VIEWLOG_PAGE; } ///////////////////////////////////////////////////////////////////////////// void CViewLogPage::InsertIssue( DWORD dwIssueId, DWORD dwOccurenceCount ) { LVITEM lvi; TCHAR szBuffer[32]; TCHAR szIssue[256]; wsprintf(szBuffer, _T("%d."), m_nIssues + 1); VERIFY( AVLoadString( dwIssueId, szIssue, 256) ); lvi.mask = LVIF_TEXT | LVIF_PARAM; lvi.pszText = szBuffer; lvi.iItem = m_nIssues; lvi.iSubItem = 0; lvi.lParam = dwIssueId; m_IssuesList.InsertItem(&lvi); wsprintf(szBuffer, _T("%d"), dwOccurenceCount); m_IssuesList.SetItemText(m_nIssues, COLUMN_TIMES, szBuffer); m_IssuesList.SetItemText(m_nIssues, COLUMN_DESCRIPTION, szIssue); m_nIssues++; return; } BOOL CViewLogPage::ReadLog() { HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hMap = NULL; PBYTE pMap = NULL; BOOL bReturn = FALSE; PISSUEREC pRecord; int i; hFile = CreateFile( g_szFileLog, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL ); if ( hFile == INVALID_HANDLE_VALUE ) { goto CleanupAndFail; } hMap = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, LOGFILESIZE, NULL ); if ( hMap == NULL ) { goto CleanupAndFail; } pMap = (PBYTE)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, LOGFILESIZE ); if ( pMap == NULL ) { goto CleanupAndFail; } pRecord = (PISSUEREC)(pMap + sizeof(LOGFILEHEADER)); for ( i = 0; i < MAX_ISSUES_COUNT; i++ ) { if ( pRecord->dwOccurenceCount > 0 ) { InsertIssue( EVENT_FROM_IND( i ), pRecord->dwOccurenceCount ); } pRecord++; } bReturn = TRUE; CleanupAndFail: if ( !bReturn ) { AVErrorResourceFormat( IDS_READLOG_FAILED ); } if ( pMap != NULL ) { UnmapViewOfFile( pMap ); } if ( hMap != NULL ) { CloseHandle( hMap ); } if ( hFile != INVALID_HANDLE_VALUE ) { CloseHandle( hFile ); } return bReturn; } ///////////////////////////////////////////////////////////////////////////// // CViewLogPage message handlers ///////////////////////////////////////////////////////////// LONG CViewLogPage::OnHelp( WPARAM wParam, LPARAM lParam ) { LONG lResult = 0; LPHELPINFO lpHelpInfo = (LPHELPINFO)lParam; ::WinHelp( (HWND) lpHelpInfo->hItemHandle, g_szAVHelpFile, HELP_WM_HELP, (DWORD_PTR) MyHelpIds ); return lResult; } void CViewLogPage::HandleSelectionChanged( int nSel ) { if (nSel == -1) { return; } LVITEM lvi; TCHAR szRemedy[512]; lvi.iItem = nSel; lvi.iSubItem = 0; lvi.mask = LVIF_PARAM; m_IssuesList.GetItem( &lvi ); VERIFY( AVLoadString( (UINT)(lvi.lParam + 1), szRemedy, 512 ) ); m_dwSelectedIssue = (DWORD)lvi.lParam; SetDlgItemText( IDC_ISSUE_DESCRIPTION, szRemedy ); } void CViewLogPage::OnClickIssue( NMHDR* pNMHDR, LRESULT* pResult ) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; LVHITTESTINFO ht; int nSel; ::GetCursorPos(&ht.pt); m_IssuesList.ScreenToClient( &ht.pt ); nSel = m_IssuesList.SubItemHitTest( &ht ); if (nSel != -1) { m_IssuesList.SetItemState( nSel, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); } HandleSelectionChanged( nSel ); } void CViewLogPage::OnClickURL( NMHDR* pNMHDR, LRESULT* pResult ) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; SHELLEXECUTEINFO sei = { 0}; TCHAR szURL[256] = _T(""); VERIFY( AVLoadString( m_dwSelectedIssue + 2, szURL, 256 ) ); if (szURL[0] == 0) { return; } sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_DOENVSUBST; sei.hwnd = m_hWnd; sei.nShow = SW_SHOWNORMAL; sei.lpFile = szURL; ShellExecuteEx(&sei); } ///////////////////////////////////////////////////////////////////////////// void CViewLogPage::OnContextMenu(CWnd* pWnd, CPoint point) { ::WinHelp( pWnd->m_hWnd, g_szAVHelpFile, HELP_CONTEXTMENU, (DWORD_PTR) MyHelpIds ); } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// BOOL CViewLogPage::OnSetActive() { ASSERT_VALID( m_pParentSheet ); m_pParentSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_FINISH ); return CAppverifPage::OnSetActive(); } ///////////////////////////////////////////////////////////////////////////// BOOL CViewLogPage::OnInitDialog() { CAppverifPage::OnInitDialog(); m_IssuesList.SetExtendedStyle( LVS_EX_FULLROWSELECT | m_IssuesList.GetExtendedStyle() ); m_IssuesList.InsertColumn( COLUMN_NUMBER, _T("No."), LVCFMT_LEFT, 40 ); m_IssuesList.InsertColumn( COLUMN_TIMES, _T("Times"), LVCFMT_LEFT, 80 ); m_IssuesList.InsertColumn( COLUMN_DESCRIPTION, _T("Issue description"), LVCFMT_LEFT, 250 ); ReadLog(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ///////////////////////////////////////////////////////////////////////////// // CViewLogPage message handlers