我的第一个MFC程序,花了一些时间了解了网上的很多内容,最后写出来的程序
1.**我的工程名字是: “MAP” **
2.**使用 MFC AppWizard [exe],基于 “基本对话框” **
3.大多需要解释我都加载了程序代码注释里面来了
1.由于使用了鼠标的点击取点的操作,需要在加上相关的库函数
添加在 文件MAPDlg.h 的 CMAPDlg 类里面
protected:
afx_msg void OnLButtonDown(); //按下鼠标右键
afx_msg void OnLButtonUp(); //鼠标起来
afx_msg void OnMouseMove(); //鼠标移动
2.对应的鼠标操作的需要对应的消息映射
添加在 文件MAPDlg.cpp 里面
BEGIN_MESSAGE_MAP(CMAPDlg, CDialog)
//{
{AFX_MSG_MAP(CMAPDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//需要添加鼠标操作的的消息映射,以上三行
ON_WM_LBUTTONDOWN() //响应鼠标左键按下
ON_WM_LBUTTONUP() //响应鼠标左键放开
ON_WM_MOUSEMOVE() //响应鼠标移动
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
再需要添加成员数据,用于保存鼠标取点的数据
添加在 文件MAPDlg.h 的 CMAPDlg 类里面
public:
CPoint m_point[4]; //点坐标
int fs,kk; //记录鼠标状态
在CMAPDlg类的构造函数内,添加对对加入数据的初始化
添加在 文件MAPDlg.hcpp
CMAPDlg::CMAPDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMAPDlg::IDD, pParent)
{
//{
{AFX_DATA_INIT(CMAPDlg)
// 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);
//绘制多边形的点数组
m_point[0].x=0;
m_point[0].y=0;
m_point[1].x=0;
m_point[1].y=0;
m_point[2].x=0;
m_point[2].y=0;
m_point[3].x=0;
m_point[3].y=0;
int choice =0;
fs=0;
kk=0;
}
**在对话框里面添加一个按钮,用来清除画的线条,然后双击按钮,添加一个函数 **
void CMAPDlg::OnButton1()
{
// TODO: Add your control notification handler code here
Invalidate(); //调用窗口的刷新函数
}
三点画弧就是需要注意怎么确定是顺时针还是逆时针
使用一个非成员函数来判断画出来的圆弧的方向是顺时针还是逆时针
添加在 MAPDlg.cpp 里面
//CPoint a, b, c; 分别为按顺序使用鼠标点下的 三个点
double direction(CPoint a, CPoint b, CPoint c)
{
return (b.x - a.x) * (c.y - b.y) - (b.y - a.y) * (c.x - b.x);
}
//如果返回值大于0为顺时针,小于0为逆时针。
自己定义的一个非成员函数用它来画弧
添加在 MAPDlg.cpp 里面
void DrawMultiArc ( CClientDC& dc,CPoint p0,CPoint p1, CPoint p2 )//用三点画弧
{
CPen PenRed; //定义画笔的颜色
PenRed.CreatePen( PS_SOLID,1,RGB(255,0,0) );//红色实线
CPen * Oldpen=dc.SelectObject(&PenRed); //记录原始画笔的设置
int iDirection = direction(p0, p1, p2) > 0 ? AD_CLOCKWISE : AD_COUNTERCLOCKWISE;
dc.SetArcDirection(iDirection);
int a1=2*(p1.x-p0.x);
int b1=2*(p1.