MFC基于对话框中,如何用定时器制作一个两张图片交替的动画,请给出代码和步骤,并说明所添加变量的类型
时间: 2024-02-25 15:55:32 浏览: 73
步骤如下:
1. 在对话框类的头文件中添加两个成员变量:
```cpp
CStatic m_pic1;
CStatic m_pic2;
```
2. 在 OnInitDialog 函数中初始化这两个控件并为其中一个设置初始可见性:
```cpp
m_pic1.SubclassDlgItem(IDC_STATIC_PIC1, this);
m_pic2.SubclassDlgItem(IDC_STATIC_PIC2, this);
m_pic2.ShowWindow(SW_HIDE); // 初始时只显示 m_pic1
```
3. 添加一个定时器,用于控制两张图片的交替:
```cpp
SetTimer(1, 500, NULL); // 每隔 500 毫秒切换一次图片
```
4. 在 OnTimer 函数中切换图片的可见性:
```cpp
void CMyDialog::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1)
{
if (m_pic1.IsWindowVisible())
{
m_pic1.ShowWindow(SW_HIDE);
m_pic2.ShowWindow(SW_SHOW);
}
else
{
m_pic1.ShowWindow(SW_SHOW);
m_pic2.ShowWindow(SW_HIDE);
}
}
CDialogEx::OnTimer(nIDEvent);
}
```
5. 在对话框资源文件中添加两个静态图片控件,并为它们设置唯一的 ID:
```xml
<CONTROL
ID="IDC_STATIC_PIC1"
TYPE="STATIC"
STYLE="SS_BITMAP"
...
/>
<CONTROL
ID="IDC_STATIC_PIC2"
TYPE="STATIC"
STYLE="SS_BITMAP"
...
/>
```
6. 在资源文件的头部添加以下代码,用于声明两张图片的位图资源 ID:
```cpp
#define IDB_BITMAP1 101
#define IDB_BITMAP2 102
```
7. 在 OnInitDialog 函数中加载这两张图片,并将它们分别设置到对应的静态图片控件中:
```cpp
HBITMAP hBmp1 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
HBITMAP hBmp2 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
m_pic1.SetBitmap(hBmp1);
m_pic2.SetBitmap(hBmp2);
```
变量类型说明:
- m_pic1 和 m_pic2:CStatic 类型,用于显示静态图片控件;
- nIDEvent:UINT_PTR 类型,定时器事件 ID;
- hBmp1 和 hBmp2:HBITMAP 类型,两张图片的位图句柄。
阅读全文