温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

VS2019如何实现C++的MFC程序

发布时间:2021-06-07 14:37:38 来源:亿速云 阅读:594 作者:小新 栏目:开发技术

这篇文章主要介绍了VS2019如何实现C++的MFC程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、创建项目

VS2019如何实现C++的MFC程序

然后点下一步,配置项目,这里我命名的是myfisrtmfc

VS2019如何实现C++的MFC程序

点击创建按钮,然后弹出下面的对话框。

VS2019如何实现C++的MFC程序

对上面的MFC应用程序进行配置,如下:

VS2019如何实现C++的MFC程序

点击完成,生成如下界面。

VS2019如何实现C++的MFC程序

第一次编译生成的默认项目,之后得到下面的界面

VS2019如何实现C++的MFC程序

点击VS2019的界面,“解决方案资源管理器”

VS2019如何实现C++的MFC程序

到这里,项目建成,并且编译通过。

二、添加自定义的功能(以比较通用的画图为例)

点击资源视图,这里的控件将是后面需要操作的。

VS2019如何实现C++的MFC程序

双击IDR_MAINFRAME,可以在这里面添加画图功能。

VS2019如何实现C++的MFC程序

也可以在Ribbon里面添加画图功能

VS2019如何实现C++的MFC程序

然后点击工具箱->RIbbon编辑器:

VS2019如何实现C++的MFC程序

双击Ribbon下的面板控件

VS2019如何实现C++的MFC程序

修改名称为形状,并添加一个按钮控件,修改名字为矩形

VS2019如何实现C++的MFC程序

修改矩形的杂项,ID改为ID_RECTANGLE

VS2019如何实现C++的MFC程序

右键矩形按键,选择添加事件处理程序

VS2019如何实现C++的MFC程序

得到如下弹窗

VS2019如何实现C++的MFC程序

配置这个弹窗如下:

VS2019如何实现C++的MFC程序

点击确定后,我们得到下面的代码

以下内容参考https://www.yisu.com/article/214347.htm

第一次使用c++,mfc很多函数都不熟悉,就直接套用了。

这里我们新建一个graph.cpp源文件

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

#include "framework.h"
#include "pch.h"
 
IMPLEMENT_SERIAL(graph, CObject, 1)
graph::graph(int l, int u, int r, int d)
{
    left = l;
    up = u;
    right = r;
    down = d;
    state = 0;
    fcolor = 0xffffff;
}
 
void graph::Offset(int cx, int cy)
{
    left += cx;
    right += cx;
    up += cy;
    down += cy;
}
 
void graph::onPress(int x, int y)
{
    sx = x; sy = y;
    state = 0;
    //选中图形
    if (left < x && x < right &&
        up < y && y < down) {
        state = 1;
        return;
    }
    if (left - f_width / 2 < x && x < left + f_width / 2)    state |= 2;    //    选中左边
    if (up - f_width / 2 < y && y < up + f_width / 2)    state |= 4;//选中上边
    if (right - f_width / 2 < x && x < right + f_width / 2)    state |= 8;//选中右边
    if (down - f_width / 2 < y && y < down + f_width / 2)    state |= 16;    //    选中下边
 
}
 
void graph::onRelease(int x, int y)
{
    state = 0;
}
 
 
void graph::SetBorderColor(int color)
{
    fcolor = color;
}
 
void graph::SetFillColor(int color)
{
    bcolor = color;
}
int graph::onMove(int x, int y)
{
    int cx, cy;
    cx = x - sx; cy = y - sy;
    sx = x; sy = y;
 
    if (state == 1) {
        Offset(cx, cy);        //  位移量cx,cy
    }
 
    if (2 == (state & 2)) {
        left = x;
 
    }
 
    if (4 == (state & 4)) {
        up = y;
 
    }
 
    if (8 == (state & 8)) {
        right = x;
 
    }
 
    if (16 == (state & 16)) {
        down = y;
 
    }
    return state == 0 ? 0 : 1;
}
void graph::Serialize(CArchive& ar)
{
    CObject::Serialize(ar);
    if (ar.IsLoading()) {
        ar >> left >> right >> up >> down >> f_width >> fcolor >> bcolor;
    }
    else
    {
        ar << left << right << up << down << f_width << fcolor << bcolor;
    }
}
graph::~graph()
{
}
void graph::onDraw(CDC* pDC) {
    CBrush b(fcolor);
    pDC->SelectObject(&b);
    CRect r(left, up, right, down);
    pDC->FillRect(&r, &b);
    CPen p(PS_SOLID, 1, bcolor);
    pDC->SelectObject(&p);
    pDC->Rectangle(left, up, right, down);
    pDC->MoveTo(left, up);
    pDC->DrawText(_T("空图形"), -1, new CRect(left, up, right, down), DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}

在项目中添加头文件graphz.h

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

在graph.h中添加下面的代码:

#pragma once
 
class graph :
	public CObject
{
protected:
	//边框
	DECLARE_SERIAL(graph)
	int left, up, right, down;
	//选中状态
	unsigned int state;
	int sx, sy;
	int  f_width = 5;
	int fcolor = 0xffffff, bcolor = 0;
 
public:
	graph() :graph(50, 50, 100, 100) {
 
	}
	graph(int l, int u, int r, int d);
	void Offset(int cx, int cy);
	void  onPress(int x, int y);	//  鼠标按下
	int  onMove(int cx, int cy);	//  鼠标移动
	void  onRelease(int x, int y);	//  鼠标释放
	virtual void onDraw(CDC* pDC);
	virtual int getGraphID() { return 0; }
	virtual void Serialize(CArchive& ar);
	void SetFillColor(int color);
	void SetBorderColor(int color);
	~graph();
 
};

在framework.h中添加graph.h

#include "graph.h"

我们要画矩形,这里添加矩形的相关代码,

跟上面的步骤一样,见一个rectangle.h和rectangle.cpp

rectangle.cpp

#include "framework.h"
#include "pch.h"
rectangle::rectangle(int l, int u, int r, int d) :graph(l, u, r, d)
{
    state = 0;
    fcolor = 0xffffff;
 
}
 
void rectangle::onDraw(CDC* pDC)
{
    CBrush b(fcolor);
    pDC->SelectObject(&b);
    CRect r(left, up, right, down);
    pDC->FillRect(&r, &b);
    CPen p(PS_SOLID, 1, bcolor);
    pDC->SelectObject(&p);
    pDC->Rectangle(left, up, right, down);
    pDC->MoveTo(left, up);
}
 
rectangle::~rectangle()
{
}

rectangle.h

#include "graph.h"
class rectangle :
    public graph
{
public:
    //DECLARE_SERIAL(graph)
    //void Serialize(CArchive& ar);
    rectangle() :graph(50, 50, 100, 100) {}
    rectangle(int l, int u, int r, int d);
    void onDraw(CDC* pDC);
    int getGraphID() { return 2; }
    ~rectangle();
};

然后myfirstmfcDoc.h中添加list

VS2019如何实现C++的MFC程序

std::list<graph*> graphList;

因为调用了list,所以在framework.h中添加

#include <list>

VS2019如何实现C++的MFC程序

这里要调用用OnRectangle()函数,之前生成的函数,我们现在添加下面的代码:

VS2019如何实现C++的MFC程序

    CmyfisrtmfcDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    pDoc->graphList.push_front(new rectangle(50, 50, 100, 100));
 
    Invalidate();

修改myfirstmfcView.cpp中的OnDraw函数为如下:

VS2019如何实现C++的MFC程序

void CmyfisrtmfcView::OnDraw(CDC* pDC)
{
    CmyfisrtmfcDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
 
    // TODO: 在此处为本机数据添加绘制代码
    std::list<graph*>::iterator v;
    for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
        (*v)->onDraw(pDC);
    }
}

接下来通过类向导添加消息

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

添加鼠标左键按下消息,左键松开消息,鼠标移动消息

VS2019如何实现C++的MFC程序

在生成的按键按下函数中

VS2019如何实现C++的MFC程序

void CmyfisrtmfcView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CmyfisrtmfcDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
 
    // TODO: 在此处为本机数据添加绘制代码
    std::list<graph*>::iterator v;
    for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
        (*v)->onPress(point.x, point.y);
    }
    Invalidate();
    //CView::OnLButtonDown(nFlags, point);
}

跟上面一样的方式

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

自从生成的代码在myfirstmfcView中如下:

VS2019如何实现C++的MFC程序

void CmyfisrtmfcView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CmyfisrtmfcDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
 
    // TODO: 在此处为本机数据添加绘制代码
    std::list<graph*>::iterator v;
    for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
        (*v)->onRelease(point.x, point.y);
    }
 
    //CView::OnLButtonUp(nFlags, point);
}
 
 
void CmyfisrtmfcView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CmyfisrtmfcDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
 
    // TODO: 在此处为本机数据添加绘制代码
    std::list<graph*>::iterator v;
    for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
        (*v)->onMove(point.x, point.y);
    }
    Invalidate();
//    CView::OnMouseMove(nFlags, point);
}

到这里就完成了全部工作,可以进行编译了。

VS2019如何实现C++的MFC程序

生成下面的图形,矩形可以移动,可拉伸

VS2019如何实现C++的MFC程序

点击项目中的属性,在配置属性中选择高级,MFC使用 静态库,在编译一次,生成.exe可以其他电脑上不依赖动态库也能打开了。

VS2019如何实现C++的MFC程序

VS2019如何实现C++的MFC程序

感谢你能够认真阅读完这篇文章,希望小编分享的“VS2019如何实现C++的MFC程序”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI