CListCtrl::GetItemText

  int GetItemText(

       int nItem,

       int nSubItem,

       lPTSTR lpszText,

       int nLen

   )const;

   CString GetItemText(

                  int nItem;

                  int nSubItem;

   )const;



nItem:文本将索引项的索引

nSubItem:指定文本要检索的子项

lpszText:为了使接收项的文本字符串的指针

nLen:缓冲区的长度指向由lpszText

返回值

返回int的版本返回该检索的字符串的长度

返回CString的版本返回项文本。





// B2saomiaotuxiangchuangkou.cpp : 实现文件 // #include "stdafx.h" #include "Imageprocessing.h" #include "B2saomiaotuxiangchuangkou.h" #include "afxdialogex.h" // B2saomiaotuxiangchuangkou 对话框 IMPLEMENT_DYNAMIC(B2saomiaotuxiangchuangkou, CDialogEx) B2saomiaotuxiangchuangkou::B2saomiaotuxiangchuangkou(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_B2saomiaotuxiangchuangkou, pParent) { //m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } //B2saomiaotuxiangchuangkou::~B2saomiaotuxiangchuangkou() //{ //} void B2saomiaotuxiangchuangkou::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_FOLDER_PATH, m_editFolderPath); DDX_Control(pDX, IDC_LIST_IMAGES, m_listImages); DDX_Control(pDX, IDC_STATIC_ORIGINAL_IMAGE, m_staticOriginalImage); DDX_Control(pDX, IDC_STATIC_PROCESSED_IMAGE, m_staticProcessedImage); DDX_Control(pDX, IDC_COMBO_SAVE_OPTION, m_comboSaveOption); } BEGIN_MESSAGE_MAP(B2saomiaotuxiangchuangkou, CDialogEx) ON_WM_PAINT() ON_WM_TIMER() ON_WM_MOUSEWHEEL() ON_BN_CLICKED(IDC_BUTTON_SELECT_FOLDER, &B2saomiaotuxiangchuangkou::OnBnClickedButtonSelectFolder) ON_BN_CLICKED(IDC_BUTTON_START, &B2saomiaotuxiangchuangkou::OnBnClickedButtonStart) ON_BN_CLICKED(IDC_BUTTON_PAUSE, &B2saomiaotuxiangchuangkou::OnBnClickedButtonPause) ON_BN_CLICKED(IDC_BUTTON_STOP, &B2saomiaotuxiangchuangkou::OnBnClickedButtonStop) ON_BN_CLICKED(IDC_BUTTON_RESET, &B2saomiaotuxiangchuangkou::OnBnClickedButtonReset) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_IMAGES, &B2saomiaotuxiangchuangkou::OnLvnItemchangedListImages) ON_MESSAGE(WM_UPDATE_IMAGE, [](WPARAM wParam, LPARAM lParam) { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)lParam; pThis->DisplayImage((int)wParam); return 0; }) ON_MESSAGE(WM_PROCESSING_DONE, [](WPARAM wParam, LPARAM lParam) { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)lParam; pThis->ResetProcessing(); return 0; }) ON_MESSAGE(WM_UPDATE_IMAGE, &B2saomiaotuxiangchuangkou::OnUpdateImage) ON_MESSAGE(WM_PROCESSING_DONE, &B2saomiaotuxiangchuangkou::OnProcessingDone) END_MESSAGE_MAP() BOOL B2saomiaotuxiangchuangkou::OnInitDialog() { CDialogEx::OnInitDialog(); /*SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE);*/ // 初始化列表控件 m_listImages.InsertColumn(0, _T("图片文件"), LVCFMT_LEFT, 300); m_listImages.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 初始化下拉框 m_comboSaveOption.AddString(_T("覆盖原图")); m_comboSaveOption.AddString(_T("另存为")); m_comboSaveOption.SetCurSel(0); m_comboSaveOption.EnableWindow(FALSE); // 初始按钮状态 GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); return TRUE; } void B2saomiaotuxiangchuangkou::OnBnClickedButtonSelectFolder() { CString strFolder; BROWSEINFO bi = { 0 }; bi.lpszTitle = _T("选择图片文件夹"); LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if (pidl != nullptr) { TCHAR szPath[MAX_PATH]; if (SHGetPathFromIDList(pidl, szPath)) { m_strFolderPath = szPath; m_editFolderPath.SetWindowText(m_strFolderPath); LoadImageList(); m_comboSaveOption.EnableWindow(TRUE); UpdateButtonStates(); } CoTaskMemFree(pidl); } } void B2saomiaotuxiangchuangkou::LoadImageList() { m_listImages.DeleteAllItems(); m_imageFiles.RemoveAll(); CFileFind finder; BOOL bWorking = finder.FindFile(m_strFolderPath + _T("\\*.*")); int nIndex = 0; while (bWorking) { bWorking = finder.FindNextFile(); if (finder.IsDots()) continue; if (!finder.IsDirectory()) { CString strFile = finder.GetFileName(); CString strExt = strFile.Right(3); strExt.MakeLower(); if (strExt == _T("jpg") || strExt == _T("jpeg") || strExt == _T("bmp") || strExt == _T("png")) { m_listImages.InsertItem(nIndex, strFile); m_imageFiles.Add(finder.GetFilePath()); nIndex++; } } } finder.Close(); if (m_imageFiles.GetSize() > 0) { m_nCurrentIndex = 0; DisplayImage(0); GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE); } } void B2saomiaotuxiangchuangkou::DisplayImage(int nIndex) { if (nIndex < 0 || nIndex >= m_imageFiles.GetSize()) return; m_nCurrentIndex = nIndex; m_currentImage.Destroy(); if (SUCCEEDED(m_currentImage.Load(m_imageFiles[nIndex]))) { m_staticOriginalImage.Invalidate(); m_staticProcessedImage.Invalidate(); } } void B2saomiaotuxiangchuangkou::DisplayProcessedImage() { if (m_processedImage.IsNull()) return; m_staticProcessedImage.Invalidate(); } void B2saomiaotuxiangchuangkou::OnPaint() { CDialogEx::OnPaint(); if (m_currentImage.IsNull()) return; // 绘制原图 CDC* pDC = m_staticOriginalImage.GetDC(); CRect rect; m_staticOriginalImage.GetClientRect(&rect); pDC->FillSolidRect(rect, RGB(240, 240, 240)); DrawImage(pDC, m_currentImage, rect, m_dZoomOriginal, m_ptZoomCenterOriginal); m_staticOriginalImage.ReleaseDC(pDC); // 绘制处理后的图像 if (!m_processedImage.IsNull()) { pDC = m_staticProcessedImage.GetDC(); m_staticProcessedImage.GetClientRect(&rect); pDC->FillSolidRect(rect, RGB(240, 240, 240)); DrawImage(pDC, m_processedImage, rect, m_dZoomProcessed, m_ptZoomCenterProcessed); m_staticProcessedImage.ReleaseDC(pDC); } } void B2saomiaotuxiangchuangkou::DrawImage(CDC* pDC, CImage& image, CRect rect, double dZoom, CPoint ptCenter) { int origWidth = image.GetWidth(); int origHeight = image.GetHeight(); // 计算保持比例的显示尺寸 double dAspect = (double)origHeight / (double)origWidth; int displayWidth = (int)(origWidth * dZoom); int displayHeight = (int)(origHeight * dZoom * dAspect); // 计算显示位置(居中) int x = ptCenter.x - (int)(displayWidth * (double)ptCenter.x / rect.Width()); int y = ptCenter.y - (int)(displayHeight * (double)ptCenter.y / rect.Height()); // 确保图像在控件范围内 if (x < 0) x = 0; if (y < 0) y = 0; if (x + displayWidth > rect.Width()) x = rect.Width() - displayWidth; if (y + displayHeight > rect.Height()) y = rect.Height() - displayHeight; // 绘制图像 image.StretchBlt(pDC->m_hDC, x, y, displayWidth, displayHeight, SRCCOPY); } BOOL B2saomiaotuxiangchuangkou::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { // 确定鼠标在哪个控件上 CRect rectOriginal, rectProcessed; m_staticOriginalImage.GetWindowRect(&rectOriginal); m_staticProcessedImage.GetWindowRect(&rectProcessed); if (rectOriginal.PtInRect(pt)) { // 原图缩放 double dFactor = (zDelta > 0) ? 1.1 : 0.9; m_dZoomOriginal *= dFactor; // 限制缩放范围 if (m_dZoomOriginal < 0.1) m_dZoomOriginal = 0.1; if (m_dZoomOriginal > 5.0) m_dZoomOriginal = 5.0; // 设置缩放中心点 m_ptZoomCenterOriginal = pt - rectOriginal.TopLeft(); m_staticOriginalImage.Invalidate(); } else if (rectProcessed.PtInRect(pt)) { // 处理后图像缩放 double dFactor = (zDelta > 0) ? 1.1 : 0.9; m_dZoomProcessed *= dFactor; // 限制缩放范围 if (m_dZoomProcessed < 0.1) m_dZoomProcessed = 0.1; if (m_dZoomProcessed > 5.0) m_dZoomProcessed = 5.0; // 设置缩放中心点 m_ptZoomCenterProcessed = pt - rectProcessed.TopLeft(); m_staticProcessedImage.Invalidate(); } return CDialogEx::OnMouseWheel(nFlags, zDelta, pt); } void B2saomiaotuxiangchuangkou::OnLvnItemchangedListImages(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVIS_SELECTED)) { if (m_bProcessing) { // 处理过程中:临时显示3秒 m_bUserBrowsing = TRUE; PostMessage(WM_UPDATE_IMAGE, pNMLV->iItem, (LPARAM)this); SetTimer(1, 3000, nullptr); // 3秒定时器 } else { // 非处理状态:持续显示 DisplayImage(pNMLV->iItem); } } *pResult = 0; } void B2saomiaotuxiangchuangkou::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == 1 && m_bUserBrowsing) { KillTimer(1); m_bUserBrowsing = FALSE; DisplayImage(m_nProcessingIndex); // 切回处理中的图片 } CDialogEx::OnTimer(nIDEvent); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonStart() { if (m_imageFiles.GetSize() == 0) return; m_bProcessing = TRUE; m_nProcessingIndex = 0; UpdateButtonStates(); // 启动处理线程 AfxBeginThread([](LPVOID pParam) -> UINT { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)pParam; while (pThis->m_nProcessingIndex < pThis->m_imageFiles.GetSize()) { if (pThis->m_bPaused) { Sleep(100); continue; } // 更新显示 pThis->PostMessage(WM_UPDATE_IMAGE, pThis->m_nProcessingIndex, (LPARAM)pThis); // 处理当前图像 pThis->ProcessCurrentImage(); pThis->DisplayProcessedImage(); // 保存处理结果 pThis->SaveProcessedImage(); pThis->m_nProcessingIndex++; Sleep(500); // 模拟处理时间 } pThis->PostMessage(WM_PROCESSING_DONE, 0, (LPARAM)pThis); return 0; }, this); } void B2saomiaotuxiangchuangkou::ProcessCurrentImage() { if (m_currentImage.IsNull()) return; // 示例处理:转换为灰度图 m_processedImage.Destroy(); m_processedImage.Create(m_currentImage.GetWidth(), m_currentImage.GetHeight(), m_currentImage.GetBPP()); for (int y = 0; y < m_currentImage.GetHeight(); y++) { for (int x = 0; x < m_currentImage.GetWidth(); x++) { COLORREF color = m_currentImage.GetPixel(x, y); BYTE r = GetRValue(color); BYTE g = GetGValue(color); BYTE b = GetBValue(color); BYTE gray = static_cast<BYTE>(0.299 * r + 0.587 * g + 0.114 * b); m_processedImage.SetPixel(x, y, RGB(gray, gray, gray)); } } } void B2saomiaotuxiangchuangkou::SaveProcessedImage() { if (m_processedImage.IsNull()) return; int nOption = m_comboSaveOption.GetCurSel(); CString strPath; if (nOption == 0) { // 覆盖原图 strPath = m_imageFiles[m_nProcessingIndex]; } else { // 另存为 CString strDir = m_strFolderPath + _T("\\Processed"); CreateDirectory(strDir, nullptr); CString strFile; m_listImages.GetItemText(m_nProcessingIndex, 0, strFile); strPath = strDir + _T("\\") + strFile; } // 保存图像 HRESULT hr = m_processedImage.Save(strPath); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonPause() { m_bPaused = !m_bPaused; CButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON_PAUSE); pButton->SetWindowText(m_bPaused ? _T("继续") : _T("暂停")); UpdateButtonStates(); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonStop() { m_bProcessing = FALSE; m_bPaused = FALSE; GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(TRUE); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonReset() { m_processedImage.Destroy(); m_staticProcessedImage.Invalidate(); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); } void B2saomiaotuxiangchuangkou::ResetProcessing() { m_bProcessing = FALSE; m_bPaused = FALSE; m_nProcessingIndex = -1; UpdateButtonStates(); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(TRUE); } void B2saomiaotuxiangchuangkou::UpdateButtonStates() { GetDlgItem(IDC_BUTTON_START)->EnableWindow(!m_bProcessing && m_imageFiles.GetSize() > 0); GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(m_bProcessing); GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(m_bProcessing); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); } LRESULT B2saomiaotuxiangchuangkou::OnUpdateImage(WPARAM wParam, LPARAM lParam) { DisplayImage(static_cast<int>(wParam)); return 0; } LRESULT B2saomiaotuxiangchuangkou::OnProcessingDone(WPARAM wParam, LPARAM lParam) { ResetProcessing(); return 0; }报严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) 不存在从 "lambda []int (WPARAM wParam, LPARAM lParam)->int" 到 "LRESULT (CWnd::*)(WPARAM, LPARAM)" 的适当转换函数 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 45 错误(活动) 不存在从 "lambda []int (WPARAM wParam, LPARAM lParam)->int" 到 "LRESULT (CWnd::*)(WPARAM, LPARAM)" 的适当转换函数 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 50 错误(活动) 没有与参数列表匹配的 重载函数 "CListCtrl::GetItemText" 实例 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 353 错误 C2440 “static_cast”: 无法从“B2saomiaotuxiangchuangkou::GetThisMessageMap::<lambda_ac786482bcca587bd9cc736ece35bc71>”转换为“LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)” Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 49 错误 C2440 “static_cast”: 无法从“B2saomiaotuxiangchuangkou::GetThisMessageMap::<lambda_a9c7879179f942e6187dc0172c95ae29>”转换为“LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)” Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 54 错误 C2661 “CListCtrl::GetItemText: 没有重载函数接受 3 个参数 Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 353
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值