// ConfigRes.cpp : implementation file // #include "stdafx.h" #include "twnconfig.h" #include "ConfigRes.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif typedef struct _tagCompareData { CListCtrl * pListCtrl; INT nCol; } COMPAREDATA, * pCOMPAREDATA; int CALLBACK ResCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); ///////////////////////////////////////////////////////////////////////////// // CConfigResult dialog CConfigResult::CConfigResult(pFASTCONFIG pBestConfig, pFASTCONFIG pResConfigs, L_INT nResConfigsCount, CWnd * pParent /*=NULL*/) : CDialog(CConfigResult::IDD, pParent) { //{{AFX_DATA_INIT(CConfigResult) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pBestConfig = pBestConfig; m_pResConfigs = pResConfigs; m_nResConfigsCount = nResConfigsCount; } void CConfigResult::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConfigResult) DDX_Control(pDX, IDC_LIST_RES_CONFIGS, m_lstResConfigs); DDX_Control(pDX, IDC_LIST_BEST_CONFIG, m_lstBestConfig); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CConfigResult, CDialog) //{{AFX_MSG_MAP(CConfigResult) ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_RES_CONFIGS, OnColumnclickListResConfigs) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CConfigResult message handlers BOOL CConfigResult::OnInitDialog() { CDialog::OnInitDialog(); m_lstResConfigs.InsertColumn(0, _T("Transfer Mode"), LVCFMT_LEFT, 90, -1); m_lstResConfigs.InsertColumn(1, _T("File Format"), LVCFMT_LEFT, 100, -1); m_lstResConfigs.InsertColumn(2, _T("Buffer Size"), LVCFMT_LEFT, 70, -1); m_lstResConfigs.InsertColumn(3, _T("Required Time"), LVCFMT_LEFT, 90, -1); m_lstResConfigs.InsertColumn(4, _T("BPP"), LVCFMT_LEFT, 50, -1); CString csText; CTwainConfigApp * pTheApp = (CTwainConfigApp *)AfxGetApp(); LV_ITEM lv; memset(&lv, 0, sizeof(LV_ITEM)); for (int i=0; iGetTransferName(&m_pResConfigs[i], csText); lv.iSubItem = 0; lv.pszText = (LPTSTR)(LPCTSTR)csText; lv.cchTextMax = csText.GetLength(); m_lstResConfigs.InsertItem(&lv); pTheApp->GetFormatName(&m_pResConfigs[i], csText); m_lstResConfigs.SetItemText(i, 1, csText); csText.Format(_T("%d"), m_pResConfigs[i].ulBufferSize); m_lstResConfigs.SetItemText(i, 2, csText); csText.Format(_T("%d"), m_pResConfigs[i].uTime); m_lstResConfigs.SetItemText(i, 3, csText); csText.Format(_T("%d"), m_pResConfigs[i].nBitsPerPixel); m_lstResConfigs.SetItemText(i, 4, csText); } m_lstBestConfig.InsertColumn(0, _T("Transfer Mode"), LVCFMT_LEFT, 90, -1); m_lstBestConfig.InsertColumn(1, _T("File Format"), LVCFMT_LEFT, 100, -1); m_lstBestConfig.InsertColumn(2, _T("Buffer Size"), LVCFMT_LEFT, 70, -1); m_lstBestConfig.InsertColumn(3, _T("Required Time"), LVCFMT_LEFT, 90, -1); m_lstBestConfig.InsertColumn(4, _T("BPP"), LVCFMT_LEFT, 50, -1); csText.Format(_T("%d"), m_pBestConfig->uTransferMode); pTheApp->GetTransferName(m_pBestConfig, csText); m_lstBestConfig.InsertItem(0, csText); pTheApp->GetFormatName(m_pBestConfig, csText); m_lstBestConfig.SetItemText(0, 1, csText); csText.Format(_T("%d"), m_pBestConfig->ulBufferSize); m_lstBestConfig.SetItemText(0, 2, csText); csText.Format(_T("%d"), m_pBestConfig->uTime); m_lstBestConfig.SetItemText(0, 3, csText); csText.Format(_T("%d"), m_pBestConfig->nBitsPerPixel); m_lstBestConfig.SetItemText(0, 4, csText); // sort the result list upon the required time... COMPAREDATA Data; Data.pListCtrl = &m_lstResConfigs; Data.nCol = 3; m_lstResConfigs.SortItems(ResCompareFunc, (LPARAM)&Data); UpdateItemParam(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } int CALLBACK ResCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { pCOMPAREDATA pData = (pCOMPAREDATA)lParamSort; CString csText1, csText2; L_INT32 lNum1, lNum2; L_INT nRet; csText1 = pData->pListCtrl->GetItemText(lParam1, pData->nCol); csText2 = pData->pListCtrl->GetItemText(lParam2, pData->nCol); switch (pData->nCol) { case 0: // Transfer name nRet = lstrcmp(csText1, csText2); break; case 1: // Format name nRet = lstrcmp(csText1, csText2); break; case 2: // Buffer size lNum1 = _ttol(csText1); lNum2 = _ttol(csText2); nRet = (lNum2 > lNum1) ? -1 : (lNum2 == lNum1) ? 0 : 1; break; case 3: // Required time lNum1 = _ttol(csText1); lNum2 = _ttol(csText2); nRet = (lNum2 > lNum1) ? -1 : (lNum2 == lNum1) ? 0 : 1; break; case 4: // BPP lNum1 = _ttol(csText1); lNum2 = _ttol(csText2); nRet = (lNum2 > lNum1) ? -1 : (lNum2 == lNum1) ? 0 : 1; break; } return nRet; } void CConfigResult::OnColumnclickListResConfigs(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; COMPAREDATA Data; Data.pListCtrl = &m_lstResConfigs; Data.nCol = pNMListView->iSubItem; m_lstResConfigs.SortItems(ResCompareFunc, (LPARAM)&Data); UpdateItemParam(); *pResult = 0; } void CConfigResult::UpdateItemParam() { L_INT nCount = m_lstResConfigs.GetItemCount(); LV_ITEM lv; memset(&lv, 0, sizeof(LV_ITEM)); lv.mask = LVIF_PARAM; for(L_INT i=0; i