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

📄 picturedlg.cpp

📁 遍历文件夹所有的JPG和BMP文件
💻 CPP
字号:
// pictureDlg.cpp : implementation file
//

#include "stdafx.h"
#include "picture.h"
#include "pictureDlg.h"
#include "Image.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPictureDlg dialog
int ss=0;
int a=0;
Image *imageobject;
CPictureDlg::CPictureDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPictureDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPictureDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPictureDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPictureDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPictureDlg, CDialog)
	//{{AFX_MSG_MAP(CPictureDlg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_WM_LBUTTONUP()
	ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPictureDlg message handlers

BOOL CPictureDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	SetWindowPos(NULL,0,0,800,480,SWP_SHOWWINDOW );
	SetWindowText(L"图片列表");
	btmp1.LoadBitmap(IDB_AVI);//载入图片
	btmp2.LoadBitmap(IDB_FILE);
	btmp3.LoadBitmap(IDB_JPG);
	btmp4.LoadBitmap(IDB_MP3);
	btmp5.LoadBitmap(IDB_TXT);
	btmp6.LoadBitmap(IDB_DLL);
	myimage.Create(32,32,0,0,6);//创建图片列表
	myimage.Add(&btmp1,RGB(0,0,0));//在列表中添加图片
	myimage.Add(&btmp2,RGB(0,0,0));
	myimage.Add(&btmp3,RGB(0,0,0));
	myimage.Add(&btmp4,RGB(0,0,0));
	myimage.Add(&btmp5,RGB(0,0,0));
	myimage.Add(&btmp6,RGB(0,0,0));
	mylist=(CListCtrl*)GetDlgItem(IDC_LIST1);//关联一个CListCtrl对象
	mylist->SetWindowPos(NULL,10,40,694,410,SWP_SHOWWINDOW );
	mylist->SetBkColor(RGB(74,63,131));//设置背景颜色
	mylist->SetTextBkColor(RGB(74,63,131));//设置字体背景颜色
	mylist->SetTextColor(RGB(255,255,255));//设置字体颜色
	mylist->SetImageList(&myimage,LVSIL_NORMAL);//关联图片列表
	RECT myrect;
	mylist->GetWindowRect(&myrect);//得到CListCtrl的矩形区域
	mylist->SetIconSpacing((myrect.right-myrect.left)/4,(myrect.bottom-myrect.top)/5);//设置CListCtrl图标大小
	
	WIN32_FIND_DATA mywin;
	HANDLE myHANDLE;
	CString name;
	ss=0;
	myHANDLE=FindFirstFile(L"*.*",&mywin);
	if(myHANDLE!=INVALID_HANDLE_VALUE)
	{
		name=mywin.cFileName;
		FindimageFile( name);
		
		
	}
	while (FindNextFile(myHANDLE,&mywin))
	{
		
		name=mywin.cFileName;
		FindimageFile( name);
		
	}
	
	mylist->DeleteAllItems();
	for(int j=0;j<ss;j++)
	{
		mylist->InsertItem(j,pathname[j],2);

		
	//把路径传到image类的Imagelist容器

	}

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

//********深层遍历函数*********//
void CPictureDlg::FindimageFile(CString strFoldername)
{
	CString FilePath1;
	WIN32_FIND_DATA mywin;
	HANDLE myHANDLE;
	CString name;
	int i=strFoldername.FindOneOf(L".");//判断文件名是否含有.,有则为文件夹
	FilePath1=strFoldername+L"\\";
	if (i==-1)
			 {
		mylist->DeleteAllItems();
		myHANDLE=FindFirstFile(FilePath1+L"*.*",&mywin);
		if(myHANDLE!=INVALID_HANDLE_VALUE)
		{
			name=mywin.cFileName;
			FindimageFile(FilePath1+name);
			
		}
		while (FindNextFile(myHANDLE,&mywin))
		{
			
			name=mywin.cFileName;
			FindimageFile(FilePath1+name);
			
		}
		
			 }
			 if (strFoldername.Right(3)==L"bmp"||strFoldername.Right(3)==L"bmp")
			 {	
				 
				 pathname.insert(pathname.begin(),strFoldername);
				 ss++;
				 
			 }

}
//*********把图片画到对话框*********//
void CPictureDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CDC memory;
	mycbitmap=new CBitmap;
	mycbitmap->LoadBitmap(IDB_BITMAP1);
	memory.CreateCompatibleDC(&dc);
	memory.SelectObject(mycbitmap);
	RECT myrect;
	GetWindowRect(&myrect);
	dc.BitBlt(0,0,myrect.right-myrect.left,myrect.bottom-myrect.top,&memory,0,0,SRCCOPY);
	
	// TODO: Add your message handler code here
	
	// Do not call CDialog::OnPaint() for painting messages
}
//******确定有效区域*********//
BOOL CPictureDlg::InRect(int left, int top, int right, int bottom, int px, int py)
{
	if((left < 0) || (left > 800))
		return FALSE;
	if((right < 0) || (right > 800))
		return FALSE;
	if((top < 0) || (top > 480))
		return FALSE;
	if((bottom < 0) || (bottom > 480))
		return FALSE;
	if((px < 0) || (px > 800))
		return FALSE;
	if((py < 0) || (py > 480))
		return FALSE;
	
	if((px>=left)&&(px<=right) && (py>=top)&&(py<=bottom))
		return TRUE;
	return FALSE;
}
void CPictureDlg::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if (InRect(716,99,783,140,point.x,point.y))
	{
		OnButton1();
	}
	if (InRect(715,167,784,210,point.x,point.y))
	{
		OnButton2();
	}
	if (InRect(714,247,782,284,point.x,point.y))
	{
		OnButton3();
	}
	
	CDialog::OnLButtonUp(nFlags, point);
}

void CPictureDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	if(a!=0)
	{
		a--;
		int j;
		mylist->DeleteAllItems();
		for(j=a*4;j<pathname.size();j++)
		{
			mylist->InsertItem(j,pathname[j],2);
			
		}
		
	}
	
}

void CPictureDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
	int j;
	a++;
	mylist->DeleteAllItems();
	for(j=a*4;j<pathname.size();j++)
	{
		mylist->InsertItem(j,pathname[j],2);
		
	}
	
}

void CPictureDlg::OnButton3() 
{
	// TODO: Add your control notification handler code here
		DestroyWindow();
	
}



void CPictureDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION i;
	int l;
	i=mylist->GetFirstSelectedItemPosition();//得双击项目的位置,位置从开始。GetFirstSelectedItemPosition()与GetNextSelectedItem()配套使用
	l=(int)i-1;//等到双击图片的索引
	imageobject->GetIndex(l);//把索引传到image类
    imagename=mylist->GetItemText(mylist->GetNextSelectedItem(i),0);//得到选择项目的内容
	imageobject=new Image();
	imageobject->Create(IDD_DIALOG1);//创建浏览图片非模态对话框
    imageobject->SetWindowText(L"图片浏览");//设置对话框对话名字
	imageobject->SetWindowPos(NULL,0,0,800,480,SWP_SHOWWINDOW );
	imageobject->ShowWindow(TRUE);
	imageobject->Getimagename(imagename);
	for(int j=0;j<ss;j++)
	{
		imageobject->Receptname(pathname[j]);
			
		
		//把路径传到image类的Imagelist容器
		
	}
	
	*pResult = 0;
}

⌨️ 快捷键说明

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