📄 picturedlg.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 + -