用vs 的mfc实现一个旋转三角形
时间: 2024-03-11 10:44:10 浏览: 33
好的,以下是一个用MFC实现旋转三角形的示例代码:
1. 创建一个MFC应用程序项目,并在资源视图中添加一个空白对话框。
2. 在对话框类的头文件中添加以下成员变量和函数声明:
```
class CMyDlg : public CDialogEx
{
public:
CMyDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CMyDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MY_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
private:
CPoint m_center; // 旋转中心点
double m_angle; // 旋转角度
private:
void DrawTriangle(CDC& dc, CPoint* points); // 绘制三角形
void RotateTriangle(CDC& dc, CPoint* points, int count); // 旋转三角形
};
```
3. 在对话框类的源文件中实现成员函数:
```
void CMyDlg::DrawTriangle(CDC& dc, CPoint* points)
{
CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
CBrush brush(RGB(255, 0, 0));
dc.SelectObject(&pen);
dc.SelectObject(&brush);
dc.MoveTo(points[0]);
dc.LineTo(points[1]);
dc.LineTo(points[2]);
dc.LineTo(points[0]);
}
void CMyDlg::RotateTriangle(CDC& dc, CPoint* points, int count)
{
Gdiplus::Graphics graphics(dc.GetSafeHdc());
graphics.TranslateTransform(m_center.x, m_center.y);
graphics.RotateTransform((float)m_angle);
graphics.TranslateTransform(-m_center.x, -m_center.y);
dc.Polygon(points, count);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MY_DIALOG, pParent)
{
m_center.SetPoint(75, 75);
m_angle = 0;
}
CMyDlg::~CMyDlg()
{
}
void CMyDlg::OnPaint()
{
CPaintDC dc(this);
// 绘制三角形
CPoint points[3] = {{50, 50}, {100, 50}, {75, 25}};
DrawTriangle(dc, points);
// 旋转三角形
RotateTriangle(dc, points, 3);
}
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_angle += 10; // 每次点击增加10度
Invalidate(); // 重绘窗口
}
```
4. 运行程序,点击窗口可以看到三角形随着鼠标点击不断旋转。
注意,上述代码需要包含Gdiplus.h头文件,并链接Gdiplus库。另外,如果想要控制旋转中心点和旋转角度,可以在代码中修改成员变量m_center和m_angle的值。