Visual c++ 如何在vc中使用菜单创建两次点击之间的直线++

Visual c++ 如何在vc中使用菜单创建两次点击之间的直线++,visual-c++,mfc,Visual C++,Mfc,我正在尝试创建一个绘画应用程序,在这个应用程序中,我使用一个菜单来显示我可以绘制的形状,并且我添加了一些形状,例如直线、矩形、,圆圈,但我无法在line函数中使用OnButtonDown函数,因此我想知道如何通过不使用LButtonDown函数和任何其他方式在两次单击之间创建一条直线,当用户单击菜单时,我可以通过这些方式创建一条直线。我的示例代码粘贴在下面: #include<afxwin.h> #include"resource.h" class myframe:public CF

我正在尝试创建一个绘画应用程序,在这个应用程序中,我使用一个菜单来显示我可以绘制的形状,并且我添加了一些形状,例如直线、矩形、,圆圈,但我无法在line函数中使用OnButtonDown函数,因此我想知道如何通过不使用LButtonDown函数和任何其他方式在两次单击之间创建一条直线,当用户单击菜单时,我可以通过这些方式创建一条直线。我的示例代码粘贴在下面:

#include<afxwin.h>
#include"resource.h"
class myframe:public CFrameWnd
{
        public:
    myframe()
    {
        Create(0,"simple",WS_OVERLAPPEDWINDOW,rectDefault,0,MAKEINTRESOURCE(IDR_MENU1));
    }
    void shape(int id)
    {
        CClientDC d(this);
        CPen p;
        p.CreatePen(PS_SOLID,1,RGB(255,0,0));
        d.SelectObject(&p);
        switch(id)
        {
        case 101:


            d.MoveTo(100,100);
            d.LineTo(200,200);
            break;
        case 102:
            d.Rectangle(10,10,100,200);
            break;
        case 103:
            d.Ellipse(20,20,100,100);
            break;
    }
    }
    DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND_RANGE(101,103,shape)
END_MESSAGE_MAP()
class myapp:public CWinApp
{
public:
    int InitInstance()

    {
        myframe *f;
        f=new myframe();
        f->ShowWindow(3);
        m_pMainWnd=f;
        return 1;
    }
};
myapp a;

几年前,微软发布了一个用MFC编写的示例应用程序,正是这样做的

它被称为Scribble,您可以下载它,并随附书面教程


完成此操作后,您可以学习如何升级现有MFC应用程序以使用新的Ribbon用户界面。该教程可在此处找到:

使用OnButtonDown时您面临什么问题?另外,请使用命名常量,而不是数字,如101、102、103。我想创建一条随机线,用户可以在两次单击之间绘制,但我无法做到这一点。您可以帮助我使用常量而不是数字吗?有没有其他解决方案可以帮助我更改程序me@jhonny当前位置我真的不知道你在问什么。从代码中可以明显看出,您并没有真正理解Windows编程中使用的消息驱动模型。您需要对编写MFC应用程序进行扎实的介绍,而不是对一两行代码进行更改。一个示例应用程序是我知道的最好的方法。你应该使用OnLButtonDown。如果你不知道该怎么做,那就是出了问题。