有没有人能教一下怎么用mfc基于对话框设计彩色泡泡程序啊,一点不会😭
以下是一个基于MFC对话框的彩色泡泡程序的参考代码:
首先,在对话框资源中添加一个静态文本控件,用于显示彩色泡泡。将该控件的ID设置为IDC_BUBBLE。
然后,在对话框类的头文件中添加以下代码:
class CBubbleDlg : public CDialogEx
{
// ...
private:
CStatic m_bubbleCtrl;
CBitmap m_bubbleBitmap;
CImageList m_bubbleImageList;
int m_bubbleIndex;
UINT_PTR m_bubbleTimer;
COLORREF m_bubbleColor;
int m_bubbleX, m_bubbleY;
int m_bubbleWidth, m_bubbleHeight;
int m_bubbleSpeedX, m_bubbleSpeedY;
int m_bubbleAccelX, m_bubbleAccelY;
int m_bubbleGravity;
// ...
};
在对话框类的实现文件中添加以下代码:
CBubbleDlg::CBubbleDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_BUBBLE_DIALOG, pParent)
{
// ...
m_bubbleIndex = 0;
m_bubbleTimer = 0;
m_bubbleColor = RGB(255, 255, 255);
m_bubbleX = 0;
m_bubbleY = 0;
m_bubbleWidth = 0;
m_bubbleHeight = 0;
m_bubbleSpeedX = 0;
m_bubbleSpeedY = 0;
m_bubbleAccelX = 0;
m_bubbleAccelY = 0;
m_bubbleGravity = 1;
// ...
}
void CBubbleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
// ...
DDX_Control(pDX, IDC_BUBBLE, m_bubbleCtrl);
// ...
}
BOOL CBubbleDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// ...
m_bubbleBitmap.LoadBitmap(IDB_BUBBLE);
m_bubbleImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);
m_bubbleImageList.Add(&m_bubbleBitmap, RGB(255, 0, 255));
m_bubbleCtrl.SetImageList(&m_bubbleImageList);
m_bubbleCtrl.SetWindowText(_T(""));
// ...
return TRUE;
}
void CBubbleDlg::OnDestroy()
{
CDialogEx::OnDestroy();
// ...
m_bubbleImageList.DeleteImageList();
m_bubbleBitmap.DeleteObject();
// ...
}
void CBubbleDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == m_bubbleTimer)
{
// 更新泡泡位置
m_bubbleSpeedX += m_bubbleAccelX;
m_bubbleSpeedY += m_bubbleAccelY + m_bubbleGravity;
m_bubbleX += m_bubbleSpeedX;
m_bubbleY += m_bubbleSpeedY;
// 判断泡泡是否超出边界
if (m_bubbleX < -m_bubbleWidth || m_bubbleX > m_bubbleCtrl.GetClientRect().Width() ||
m_bubbleY < -m_bubbleHeight || m_bubbleY > m_bubbleCtrl.GetClientRect().Height())
{
// 重新生成泡泡
GenerateBubble();
}
// 更新泡泡显示
m_bubbleCtrl.SetWindowPos(nullptr, m_bubbleX, m_bubbleY, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
m_bubbleCtrl.SetIcon(m_bubbleImageList.ExtractIcon(m_bubbleIndex));
}
CDialogEx::OnTimer(nIDEvent);
}
void CBubbleDlg::OnStart()
{
// 生成泡泡
GenerateBubble();
// 启动定时器
m_bubbleTimer = SetTimer(1, 50, nullptr);
}
void CBubbleDlg::OnStop()
{
// 停止定时器
KillTimer(m_bubbleTimer);
m_bubbleTimer = 0;
// 清空泡泡显示
m_bubbleCtrl.SetWindowText(_T(""));
}
void CBubbleDlg::GenerateBubble()
{
// 随机生成泡泡颜色和大小
m_bubbleColor = RGB(rand() % 256, rand() % 256, rand() % 256);
m_bubbleWidth = rand() % 50 + 50;
m_bubbleHeight = m_bubbleWidth;
// 计算泡泡初始位置和速度
m_bubbleX = rand() % (m_bubbleCtrl.GetClientRect().Width() - m_bubbleWidth);
m_bubbleY = m_bubbleCtrl.GetClientRect().Height() + m_bubbleHeight;
m_bubbleSpeedX = rand() % 10 - 5;
m_bubbleSpeedY = -(rand() % 10 + 10);
m_bubbleAccelX = rand() % 2 - 1;
m_bubbleAccelY = rand() % 2 - 1;
// 随机选择泡泡图标
m_bubbleIndex = rand() % m_bubbleImageList.GetImageCount();
// 设置泡泡颜色
CDC* pDC = m_bubbleCtrl.GetDC();
pDC->FillSolidRect(0, 0, m_bubbleWidth, m_bubbleHeight, m_bubbleColor);
m_bubbleCtrl.ReleaseDC(pDC);
}
在对话框类的消息映射中添加以下代码:
BEGIN_MESSAGE_MAP(CBubbleDlg, CDialogEx)
// ...
ON_WM_DESTROY()
ON_WM_TIMER()
// ...
ON_BN_CLICKED(IDC_START, &CBubbleDlg::OnStart)
ON_BN_CLICKED(IDC_STOP, &CBubbleDlg::OnStop)
END_MESSAGE_MAP()
最后,在资源文件中添加一个位图资源,用于作为泡泡的图标。将该位图的ID设置为IDB_BUBBLE。
现在,你可以在对话框中添加“开始”和“停止”按钮,并在按钮的Click事件中调用OnStart和OnStop方法,以启动和停止泡泡动画。
答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
当然可以!下面是一个基于 MFC 对话框设计的彩色泡泡程序的简单示例:
#include <afxwin.h>
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = nullptr);
afx_msg void OnShowBubble();
DECLARE_MESSAGE_MAP()
private:
CRect m_bubbleRect;
COLORREF m_bubbleColor;
};
#include "MyDialog.h"
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_MYDIALOG, pParent)
{
m_bubbleRect = CRect(100, 100, 200, 200); // 泡泡的位置和大小
m_bubbleColor = RGB(255, 0, 0); // 泡泡的颜色
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDC_BUTTON_SHOWBUBBLE, &CMyDialog::OnShowBubble)
END_MESSAGE_MAP()
void CMyDialog::OnShowBubble()
{
CClientDC dc(this);
dc.FillSolidRect(m_bubbleRect, m_bubbleColor);
}
在上述示例中,我们在对话框类中添加了一个用于显示彩色泡泡的按钮,并定义了 OnShowBubble
函数来处理按钮的点击事件。在 OnShowBubble
函数中,我们使用 CClientDC
对象来获取对话框的设备上下文,并使用 FillSolidRect
函数来在指定的矩形区域绘制指定颜色的矩形。
OnShowBubble
函数进行关联。在对话框资源编辑器中选择按钮控件,在属性窗口的“事件”页签中,为按钮的“Clicked”事件选择“OnShowBubble”函数。通过上述步骤,你就可以在 MFC 对话框应用程序中创建一个简单的彩色泡泡程序。当用户点击按钮时,程序将在指定位置绘制指定颜色的矩形,实现彩色泡泡的显示效果。你可以根据需求进一步定制和扩展该程序,例如改变泡泡的形状、添加动画效果等。
根据MSDN,在MFC中有两种添加工具条的方式,
一、利用资源编辑器创建工具条:
二、不利用资源编辑器创建工具条: