一、设置对话框基本元素
入下图所示,可以添加static Text,在对话框中。我在这里设置了三个按钮,分别对应如下:
二、添加相应控件的变量并初始化
1、对话框变量添加操作
1)单击控件,右击鼠标,如下图所示:
2)按照上一步,分别对三个按钮进行添加变量,添加的变量入下图所示:
注!:所有变量设置参数注意事项
2、Dlg类中添加成员变量
1)打开类视图,入下图所示:
2)在该类中添加成员变量:
3)添加如下变量:
int m_index;
int m_w;
int m_h;
bool m_isAuto;
3、初始化数据
在Dlg.cpp文件里如下函数BOOL CMFC_Photo_rotationDlg::OnInitDialog()
添加代码:
// TODO: 在此添加额外的初始化代码
//设置适合位图的风格样式
//SS_CENTERIMAGE居中
//SS_BITMAP设定bmp格式照片
m_bmp.ModifyStyle(0xf,SS_BITMAP | SS_CENTERIMAGE);
//获取静态控件大小
CRect rect;
m_bmp.GetWindowRect(&rect);
m_w = rect.Width();
m_h = rect.Height();
//设置图片
#define HBMP(filePath, width, height)(HBITMAP)LoadImage(AfxGetInstanceHandle(), filePath, IMAGE_BITMAP, width, height, LR_LOADFROMFILE | LR_CREATEDIBSECTION)
m_index = 1;
CString path;
path.Format(TEXT("../MFC_Photo_rotation/res/bmp/%d.bmp"),m_index);
m_bmp.SetBitmap(HBMP(path,m_w,m_h));
m_isAuto = true;
4、按钮控件点击事件处理
1)在进行按钮控件处理的时候,还设置了定时器,因为static Text图片轮播需要,如下代码所示:
在对话框中双击按钮控件,如下:
//上一张图片
void CMFC_Photo_rotationDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_index--;
if(m_index < 1)
{
m_index = 5;
}
CString path;
path.Format(TEXT("../MFC_Photo_rotation/res/bmp/%d.bmp"),m_index);
m_bmp.SetBitmap(HBMP(path,m_w,m_h));
}
//自动
void CMFC_Photo_rotationDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
if(true == m_isAuto) //自动播放按钮
{
//上一张下一张按钮变灰
m_buttonPre.EnableWindow(FALSE);
m_buttonNext.EnableWindow(FALSE);
//自动->暂停
m_buttonAuton.SetWindowTextW(TEXT("暂停"));
//启动定时器
SetTimer(1,1000,NULL);
}
else //暂停按钮
{
//上一张下一张按钮恢复
m_buttonPre.EnableWindow(TRUE);
m_buttonNext.EnableWindow(TRUE);
//暂停->自动
m_buttonAuton.SetWindowTextW(TEXT("自动"));
//关闭定时器
KillTimer(1);
}
m_isAuto = !m_isAuto;
}
//下一张
void CMFC_Photo_rotationDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
m_index++;
if(m_index>5)
{
m_index = 1;
}
CString path;
path.Format(TEXT("../MFC_Photo_rotation/res/bmp/%d.bmp"),m_index);
m_bmp.SetBitmap(HBMP(path,m_w,m_h));
}
注意: 这里的图片路径在文件中的这个位置:
这些图片位置路径,可以根据那个自由去调整,也就是代码运行试一试,我个人喜欢把图片放在这个位置!
2)设置定时器:
首先:
其次点击消息:
最后添加函数OnTimer()
成功显示Dlg.cpp文件代码如下:
//定时器处理函数
void CMFC_Photo_rotationDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//按下一长功能
OnBnClickedButton3();
CDialogEx::OnTimer(nIDEvent);
}
三、结果显示
四、文件包如下
https://download.csdn.net/download/Nuky_/86097622