精华内容
下载资源
问答
  • 通过右键点击代码编译完成的界面,可以绘制任意闭合的图形,在编辑栏点击放大倍数或缩小倍数,可实现图形缩小放大
  • 可根据鼠标位置滚动鼠标滚轮时自动调节图形位置且成比例缩放绘制图形; 类似AutoCAD等平面设计软件中滚轮的功能; 提供所有源代码,且每行程序注释得清清楚楚,可作为有类似需求开发的很好模板。
  • MFC平台上上利用OPENGL实现三维立体图形绘制,进行了光照和材料等的渲染,并且利用键盘控制物体的旋转、移动、缩放!程序已经过调试,可直接使用!
  • 1、VS2010开发的MFC对话框程序; 2、可利用中键拖动绘制...3、滚轮根据当前鼠标的位置缩放绘制图形; 4、与AutoCAD及其他平面设计软件的鼠标功能相同。 5、可作为具有类似应用开发的模板、关键代码均提供详细的注释。
  • mfc绘制数学函数图像

    2020-07-18 22:52:49
    基于MFC编写一个单文档程序,在客户区用图形来展现各种数学函数曲线。 具体要求: 1)可绘制常见的数学函数曲线,如三角函数、指数函数、幂函数等。 2)通过菜单选择不同的函数曲线类型,可以通过对话框指定该函数的...
  • 我们经常会看到一些平面设计软件例如AutoCAD等,在软件界面可利用鼠标进行图形缩放功能,关键是它的缩放还根据鼠标位置的不同而实现不同的缩放功能。具体关键细节有如下情况: 1、滚轮滚动有两个方向,一般一个...

    我们经常会看到一些平面设计软件例如AutoCAD等,在软件界面可利用鼠标进行图形的缩放功能,关键是它的缩放还根据鼠标位置的不同而实现不同的缩放功能。具体关键细节有如下情况:
    1、滚轮滚动有两个方向,一般一个方向用于放大、另一个用于缩小,但具体哪个方向是放大哪个缩小,其实都无所谓,不同软件都不太一样。
    2、一般鼠标停留的在哪个位置进行滚动滚轮时,给人的感觉是整个软件界面以鼠标点为中心进行缩放的,也就是图形或图像上鼠标的点不动,其余位置成比例放大缩小。不管鼠标是否落在图像内或在图像外均体现出该功能。
    如果在网上搜索滚动功能的代码,经常出现很多长篇大论,有的用SDK,或底层API来写,这样显得太麻烦。又不好理解。笔者想借助VS2010开发环境,利用VC本身已有的一些功能简单地将其实现出来,这样读者易懂,代码拿去参考修改也方便。
    下面我们就在MFC中开发一个滚轮根据鼠标位置缩放图形的程序:
    (1)首先建立一个MFC的对话框程序,在对话框的头文件(*.h)里加入一些宏定义用于绘制矩形:

    #define WIDTH 100         //矩形的宽(初始状态)
    #define HEIGHT 200        //矩形的长(初始状态)
    #define UP_SCALE 1.1      //放大的比例值
    #define DOWN_SCALE 0.9    //缩小的比例值
    #define POSITION_SCALE 0.1//位置偏移比例  
    

    以上参数可以改变,但是参数 UP_SCALE、DOWN_SCALE、POSITION_SCALE 存在一定关系, 一般情况下需满足:
    UP_SCALE - 1 = 1 - DOWN_SCALE ;
    POSITION_SCALE = UP_SCALE - 1 或者:POSITION_SCALE = 1 - DOWN_SCALE

    (2)然后在定义一些变量,这个放在头文件或cpp文件里都可以,这里将需要绘制的矩形定义成全局变量:

    CPoint startPoint;  //矩形起始点坐标(左上角点)     
    CPoint endPoint;    //矩形终点坐标 (右下角点)
    CRect rc;           //绘制的矩形
    double scale=1.0;   //矩形缩放比例,初始比例1.0

    (3)在对话框源文件(*.cpp)中的OnInitDialog()函数里添加初始化代码:

    tartPoint.x=10;      //初始化矩形的起始点坐标(左上角点)
    startPoint.y=20;
    endPoint.x=startPoint.x+WIDTH;//初始化矩形的终点坐标(右下角点)
    endPoint.y=startPoint.y+HEIGHT;

    (4)然后在绘图函数OnPaint()函数里加入如下代码用于绘制图形:

    CPaintDC dc(this); // 用于绘制的设备上下文
    rc.SetRect(startPoint.x,startPoint.y,endPoint.x,endPoint.y);//设置矩形的两个角点
    dc.FillRect( rc, 0 ); // 画比例改变后的矩形
    dc.FillSolidRect(&rc,RGB(255,0,0));//给矩形填充颜色(红色)

    (5)在类向导中添加鼠标滚轮消息WM_MOUSEWHELL的消息响应函数:OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)。说明:这里的参数zDelta代表滚轮滚动的方向,>0为正方形、<0为负方向;而pt则表示鼠标的方向,不过这里不能用pt ,因为它不是鼠标在窗口中的坐标而是鼠标在整个显示器内的坐标。在该函数内添加如下代码:

        CPoint mousePoint;                      //定义当前鼠标的坐标点
        GetCursorPos(&mousePoint);              //获取当前鼠标在窗框中的坐标值
        ScreenToClient(&mousePoint);
        int dx = mousePoint.x-(rc.TopLeft()).x; //计算鼠标坐标点到矩形起始点X方向的向量
        int dy = mousePoint.y-(rc.TopLeft()).y; //计算鼠标坐标点到矩形起始点Y方向的向量
    
        //根据鼠标滚轮滚动方向判断缩放 与 滚动格数计算缩放比例 
        if(zDelta>0)                              
        {
            startPoint.x = rc.TopLeft().x-(int)(dx*POSITION_SCALE);//计算放大后的矩形起始点坐标
            startPoint.y = rc.TopLeft().y-(int)(dy*POSITION_SCALE);
            scale *= UP_SCALE;                  //计算每次放大的比例值
        }
        else
        {
            startPoint.x = rc.TopLeft().x+(int)(dx*POSITION_SCALE);//计算缩小后的矩形起始点坐标
            startPoint.y = rc.TopLeft().y+(int)(dy*POSITION_SCALE);
            scale *= DOWN_SCALE;                //计算每次缩小的比例值
        }
        endPoint.x = startPoint.x+(int)(WIDTH*scale);  //计算缩放后的矩形终点坐标
        endPoint.y = startPoint.y+(int)(HEIGHT*scale);
        Invalidate();   //重新绘制图形
    
        return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);

    (6)在使用滚轮程序时如果担心窗口失去焦点,一般我们需要在WM_LBUTTONDOWN消息中的响应函数OnLButtonDown添加获取焦点功能,如下:

    SetFocus();

    当在窗口中点一下鼠标左键,焦点即回到窗口中,滚轮程序就有效了。

    展开全文
  • MFC-缩放位图

    千次阅读 2016-04-02 22:00:26
    效果如图: 1.定义几个成员变量 CBitmap m_bitmap;//存放新的位图对象 CDC m_dc; //DC对象 CBitmap* m_pOldbmp;... //缩放位图的比例 void FreeObject(); //释放对象2.在构造函数中初始化 //初始化 m_iPer

    效果如图:

    1.定义几个成员变量

        CBitmap m_bitmap;//存放新的位图对象
        CDC m_dc;        //DC对象
        CBitmap* m_pOldbmp;//旧的位图对象
        int m_iPercent;    //缩放位图的比例
    
        void FreeObject(); //释放对象

    2.在构造函数中初始化

        //初始化
        m_iPercent = 100;
        m_pOldbmp = nullptr;

    3.打开位图

    CFileDialog dlg(TRUE, nullptr, nullptr, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST,
            TEXT("*.bmp|*.bmp||"), this);
        if (dlg.DoModal())
        {
            //加载位图
            HBITMAP hBitmap = (HBITMAP)LoadImage(nullptr,
                dlg.GetPathName(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
            if (!hBitmap)
            {
                AfxMessageBox(TEXT("加载位图失败"));
                return;
            }
            //当加载第二张位图的时候要释放旧的位图对象
            FreeObject();
            //添加位图
            m_bitmap.Attach(hBitmap);
    
            //创建兼容DC
            CDC* pDc = GetDC();
            m_dc.CreateCompatibleDC(pDc);
            ReleaseDC(pDc);
            //把位图对象选入DC中
            m_pOldbmp = m_dc.SelectObject(&m_bitmap);
            //使窗口无效,这样OnPaint函数就会被触发,使之被画出来
            Invalidate(FALSE);
        }

    4.在OnPaint函数中把位图画到客户区

    if (m_dc.GetSafeHdc() == nullptr)
            {   //如果没有新的位图对象选入dc则不必画
                CDialogEx::OnPaint();
            }
            else
            {
                //画图DC
                CPaintDC dc(this);
                //填充客户区为白色,避免缩放的时候客户区残留原来的位图
                CRect rect = { 0 };
                GetClientRect(&rect);
                FillRect(dc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
                //缩放位图
                BITMAP bm;
                m_bitmap.GetBitmap(&bm);
                dc.StretchBlt(0, 0, bm.bmWidth*m_iPercent / 100, bm.bmHeight*m_iPercent / 100,
                    &m_dc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
            }

    5.利用鼠标滚轮控制位图大小
    找到WM_MOUSEWHEEL消息,代码如下:

        //滚轮向后滚,缩小
        if (zDelta < 0)
        {
            m_iPercent -= 10;
            Invalidate(FALSE);
        }
        else //滚轮向前滚,放大
        {
            m_iPercent += 10;
            Invalidate(FALSE);
        }
    展开全文
  • MFC中实现缩放画图的另一种方式

    千次阅读 2015-12-14 09:47:46
    下面介绍另外一种可以实现图形缩放的方法。 在windows的绘图中,绘图的逻辑单位和视图的物理单位之间的对应关系是可以改变的,通过 CDC::SetMapMode可以改变这种关系。而本次实现图形缩放的功能原理就是通过改变这种...
    在前面的一篇文章中,作者详细介绍了利用GDI+的API实现缩放图像的方法。下面介绍另外一种可以实现图形缩放的方法。
    
    在windows的绘图中,绘图的逻辑单位和视图的物理单位之间的对应关系是可以改变的,通过 CDC::SetMapMode可以改变这种关系。而本次实现图形缩放的功能原理就是通过改变这种映射关系来实现。
    CDC::SetMapMode在MSDN中这样解释:
    CDC::SetMapMode 
    virtual int SetMapMode( int nMapMode );
    Return Value
    The previous mapping mode.
    Parameters
    nMapMode
    Specifies the new mapping mode. It can be any one of the following values:
    MM_ANISOTROPIC   Logical units are converted to arbitrary units with arbitrarily scaled axes. Setting the mapping mode to MM_ANISOTROPIC does not change the current window or viewport settings. To change the units, orientation, and scaling, call the SetWindowExt and SetViewportExt member functions.
    MM_HIENGLISH   Each logical unit is converted to 0.001 inch. Positive x is to the right; positive y is up.
    MM_HIMETRIC   Each logical unit is converted to 0.01 millimeter. Positive x is to the right; positive y is up.
    MM_ISOTROPIC   Logical units are converted to arbitrary units with equally scaled axes; that is, 1 unit along the x-axis is equal to 1 unit along the y-axis. Use the SetWindowExt and SetViewportExt member functions to specify the desired units and the orientation of the axes. GDI makes adjustments as necessary to ensure that the x and y units remain the same size.
    MM_LOENGLISH   Each logical unit is converted to 0.01 inch. Positive x is to the right; positive y is up.
    MM_LOMETRIC   Each logical unit is converted to 0.1 millimeter. Positive x is to the right; positive y is up.
    MM_TEXT   Each logical unit is converted to 1 device pixel. Positive x is to the right; positive y is down.
    MM_TWIPS   Each logical unit is converted to 1/20 of a point. (Because a point is 1/72 inch, a twip is 1/1440 inch.) Positive x is to the right; positive y is up.
    Remarks
    Sets the mapping mode. The mapping mode defines the unit of measure used to convert logical units to device units; it also defines the orientation of the device’s x- and y-axes. GDI uses the mapping mode to convert logical coordinates into the appropriate device coordinates. The MM_TEXT mode allows applications to work in device pixels, where 1 unit is equal to 1 pixel. The physical size of a pixel varies from device to device.
    The MM_HIENGLISH, MM_HIMETRIC, MM_LOENGLISH, MM_LOMETRIC, and MM_TWIPS modes are useful for applications that must draw in physically meaningful units (such as inches or millimeters). The MM_ISOTROPIC mode ensures a 1:1 aspect ratio, which is useful when it is important to preserve the exact shape of an image. The MM_ANISOTROPIC mode allows the x- and y-coordinates to be adjusted independently.
    这里主要介绍MM_ANISOTROPIC的映射模式,MSDN的介绍翻译成中文:
    逻辑单位可以在任意坐标系中设置成任意的单位。设置该映射模式不能该表现有的窗口和视口设置。想要改变单位、方向、或者缩放比例,利用SetWindowExt和SetViewportExt功能。
    那现在再看下MSDN中对SetWindowExt和SetViewportExt的解释,这里不再引用MSDN,只介绍下其中文解释:
    对于SetWindowExt,MSDN中描述其功能:
    设置窗口的相对于物理绘图设备x和y轴长度,窗口以及物理绘图设备决定了GDI+绘图中逻辑设备坐标和物理设备坐标的映射关系。
    对于SetViewportExt,MSDN中描述其功能:
    设置物理绘图设备的视口的x和y轴长度,视口以及绘图设备中的窗口决定了GDI+绘图中逻辑设备坐标和物理设备坐标的映射关系。换句话说,就是它们决定了逻辑单位和物理单位之间的映射关系。
    下面,就是利用CDC::SetMapMode以及SetWindowExt、SetViewportExt实现图形的缩放功能。

    首先,建立一个单文档MFC工程,名字就叫GDITest,在GDITestApp中添加GDI+的令牌作为成员变量用于初始化GDI+绘图环境。

    private:
    	ULONG_PTR m_gdiplusToken;
    分别在GDITestApp的InitInstance和ExitInstance中添加GDI+初始化和释放的代码:
    BOOL CGDITestApp::InitInstance()
    {
    	…
    	//初始化GDI+库
    	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    	Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
                   …
    }
    int CGDITestApp::ExitInstance()
    {
    	…
                  //关闭GDI+库
    	Gdiplus::GdiplusShutdown(m_gdiplusToken);
    	…
    }
    

    然后,在CGDITestView的OnDraw函数中,进行图形的绘制,这里面我们先做图形绘制的准备工作,具体绘制图形的任务,交给CGDITestDoc这个文档类完成。所以先在CGDITestDoc中添加两个成员函数,分别用于绘制绘图背景,和绘制图形,如下所示:

    void CGDITestDoc::DrawBK(CDC* pDc, CRect& rect)
    {
    	//定义背景画刷
    	CBrush brushOut(RGB(100,100,100));
    	//绘制背景色
    	pDc->FillRect(rect,&brushOut);
    }
    
    void CGDITestDoc::DrawShapes(CDC* pDc,CRect& rect)
    {
    	Gdiplus::Graphics graphi(pDc->m_hDC);
    	Gdiplus::Pen pen(Gdiplus::Color(255,0,0,255));
    	graphi.DrawLine(&pen,0,0,200,100);
    }
    


    我们先在CGDITestView中添加一个double型的成员变量m_dbZoom作为控制画面缩放的缩放系数,并赋初值1.0,在CGDITestView的OnDraw函数中进行绘图的准备工作同时调用文档类的绘图函数进行绘图:
    void CGDITestView::OnDraw(CDC* pDC)
    {
    	CGDITestDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    	//获取视图窗口大小
    	CRect clent;
    	this->GetClientRect(&clent);
    	//创建内存DC
    	CDC Memdc;
    	Memdc.CreateCompatibleDC(NULL);
    	//创建内存Bitmap
    	CBitmap bitmap;
    	CBitmap* pOldbitmap;
    	bitmap.CreateCompatibleBitmap(pDC,clent.Width(),clent.Height());
    	//将内存DC关联到内存Bitmap
    	pOldbitmap= Memdc.SelectObject(&bitmap);
    	//设置内存DC背景
    	Memdc.SetBkColor(TRANSPARENT);
    	//绘图
    	//1.设置缩放系数
                  CSize szViewPort;
    	pDC->SetMapMode(MM_ANISOTROPIC);
    	szViewPort.cx = m_dbZoom*1000;
    	szViewPort.cy = m_szViewPort.cx;
    	pDC->SetViewportExt(szViewPort);
    	pDC->SetWindowExt(1000,1000);
    	//1.绘制背景色
    	pDoc->DrawBK(&Memdc,clent);
    	//2.绘制图形
    	pDoc->DrawShapes(&Memdc,clent);
    	//从内存DC将内容拷贝的视图DC
    	pDC->BitBlt(0,0,clent.Width(),clent.Height(),&Memdc,0,0,SRCCOPY);
    	//还原内存DC的bitmap
    	Memdc.SelectObject(pOldbitmap);
    }
    

    最后重载BOOL CGDITestView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)函数,这样就能通过鼠标滚轴控制图形的缩放。
    BOOL CGDITestView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    	if (zDelta>0)
    	{
    		m_dbZoom*=1.2;
    	}
    	else
    	{
    		m_dbZoom/=1.2;
    	}
    	Invalidate(TRUE);
    	return CView::OnMouseWheel(nFlags, zDelta, pt);
    }
    

    以上的缩放是以原点为中心进行的缩放,若想要实现以鼠标所在点为中心进行缩放,要怎么实现?
    其实原理和上述博客中所讲绘制的原理差不多,只不过这里需要先介绍下两个函数:
    CDC::SetViewportOrg设置物理绘图设备的起始点;
    CDC::SetWindowOrg设置窗口绘图设备的起始点;
    我们就是利用SetViewportOrg以及缩放后的偏移距离,来设置开始绘图的坐标,以达到以鼠标为中心缩放的目的。
    首先,计算偏移距离,在CGDITestView增加CSize型的成员变量m_csZoom.。修改 BOOL CGDITestView::OnMouseWheel函数如下:
    BOOL CGDITestView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    	double PreZoom=m_dbZoom;
    	if (zDelta>0)
    		m_dbZoom*=1.2;
    	else
    		m_dbZoom/=1.2;
    	//获取视图所在的范围
    	CRect rect;
    	GetWindowRect(&rect);
    	//获取当前鼠标相对于视图所在的位置
    	CPoint point;
    	point.x=pt.x-rect.left;
    	point.y=pt.y-rect.top;
    	//计算偏移距离
    	m_csZoom.cx=(point.x * m_dbZoom) - (point.x * PreZoom);
    	m_csZoom.cy=(point.y * m_dbZoom) - (point.y * PreZoom);
    	Invalidate(TRUE);
    	return CView::OnMouseWheel(nFlags, zDelta, pt);
    }
    

    根据偏移距离,在OnDraw函数中重置绘图坐标原点,如下所示:

    void CGDITestView::OnDraw(CDC* pDC)
    {
    	CGDITestDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    	//获取视图范围
    	CRect clent;
    	this->GetClientRect(&clent);
    	//创建内存DC
    	CDC Memdc;
    	Memdc.CreateCompatibleDC(NULL);
    	//创建内存bitmap
    	CBitmap bitmap;
    	CBitmap* pOldbitmap;
    	bitmap.CreateCompatibleBitmap(pDC,clent.Width(),clent.Height());
    	//将内存DC关联到bitmap
    	pOldbitmap= Memdc.SelectObject(&bitmap);
    	//设置内存DC背景
    	Memdc.SetBkColor(TRANSPARENT);
    	//绘图
    	//获取缩放距离
    	pDC->SetMapMode(MM_ANISOTROPIC);
    	m_szViewPort.cx = m_dbZoom*1000;
    	m_szViewPort.cy = m_szViewPort.cx;
    	pDC->SetViewportExt(m_szViewPort);
    	pDC->SetWindowExt(1000,1000);
    	//重新设置绘图原点
    	m_ViewOrgPoint.x-=m_csZoom.cx;
    	m_ViewOrgPoint.y-=m_csZoom.cy;
    	pDC->SetViewportOrg(m_ViewOrgPoint.x,m_ViewOrgPoint.y);
    	pDC->SetWindowOrg(0,0);
    	//1.绘制背景
    	pDoc->DrawBK(&Memdc,clent);
    	//2.绘制形状
    	pDoc->DrawShapes(&Memdc,m_csZoom);
    	//将内存DC拷贝到视图DC
    	pDC->BitBlt(0,0,clent.Width(),clent.Height(),&Memdc,0,0,SRCCOPY);
    	//还原内存bitmap
    	Memdc.SelectObject(pOldbitmap);
    }
    



    展开全文
  • MFC缩放位图

    2020-09-25 22:32:37
    缩放位图是指在显示图片的过程中个,图片的大小可根据我们的要求进行放大和缩小。 缩放位图的主要技术是,定一个变量,使其图片在使用StretchBlt函数的时候控制输出图片的宽度和高度就可以实现缩放图标的功能。 例程...

    缩放位图是指在显示图片的过程中个,图片的大小可根据我们的要求进行放大和缩小。
    缩放位图的主要技术是,定一个变量,使其图片在使用StretchBlt函数的时候控制输出图片的宽度和高度就可以实现缩放图标的功能

    例程如下:

    1、首先定义一个变量

    int m_ZOOmPercent;//定义一个变量,记录位图的缩放系数
    CBitmap* m_bmp;//定义一个位图指针变量,用于保存加载的位图
    CBitmap* m_OldBmp;//定义一个位图指针对象,用于记录使用SelectObject返回的上一个指针
    CDC m_dc;//定义一个CDC对象,用于常见创建上下文对象
    

    2、加载位图

    void C位图缩放Dlg::OnTimerIdVisibilityTimer()
    {
    	// TODO:  在此添加命令处理程序代码
    	CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,_T("*.bmp|*.bmp||"),this);//打开一个文件选择对话框
    	if (dlg.DoModal() == IDOK )
    	{
    		HBITMAP hbitmap = (HBITMAP)LoadImage(NULL,dlg.GetPathName(),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    		//通过LoadImage函数加载指定路径的位图文件
    		if (hbitmap == NULL)
    		{
    			AfxMessageBox(_T("没有获取到图片句柄"));
    			return;
    		}
    		FreeObject();
    		
    		//m_bmp.Attach(hbitmap);//将句柄和Cbitmap关联
    		m_bmp = CBitmap::FromHandle(hbitmap);//通过句柄联系CBitmap指针对象
    		CDC *pDC = GetDC();//创建一个临时画图对象
    		m_dc.CreateCompatibleDC(pDC);//使用零时话图对象产生与pDC指定设备兼容的设备上下文内存
    		ReleaseDC(pDC);
    		m_OldBmp = m_dc.SelectObject(m_bmp);//将加载的位图对象对象选入设备上下文中
    		Invalidate(FALSE);
    	}
    }
    

    3、显示位图

    if (m_dc.GetSafeHdc() == NULL)//判断上下文对象是不是为空
    		{
    			CDialogEx::OnPaint();
    		}
    		else
    		{
    			CPaintDC dc(this);//创建绘制的设备上下文
    			CRect rect;
    			GetClientRect(&rect);
    			::FillRect(dc.GetSafeHdc(),rect,(HBRUSH)GetStockObject(WHITE_BRUSH));//设置背景色
    			BITMAP bm;
    			m_bmp->GetBitmap(&bm);
    			dc.StretchBlt( //将m_dc中包含的图片信息,绘制到窗口上
    				0,0,
    				bm.bmWidth*m_ZOOmPercent/100,//这里调节显示图片的大小
    				bm.bmHeight*m_ZOOmPercent / 100,//这里调节显示图片的大小
    				&m_dc,
    				0,0,
    				bm.bmWidth,
    				bm.bmHeight,
    				SRCCOPY
    				);
    		}
    			
    
    展开全文
  • 创建一个单文档结构的MFC程序, 绘制XYZ轴,并能通过鼠标键盘进行控制,缩放,旋转,移动...窗口大小改变,图形也保持不变形
  • 计算机图形MFC 基于C++实现图形的平移、旋转和缩放,含工程文件可直接运行,可以手动输入平移距离、旋转角度、缩放比例等。
  • MFC实现图形放大缩小

    2015-05-20 16:58:31
    通过对MFC库函数StretchBlt的使用来实现了对图像位图的局部细节的放大功能
  • 利用MFC画sin和cos图形,可以用滚轮缩放,平移
  • 画圆,画弧,矩形,多边形,简单画图(拖动,缩放,移动图形
  • 在VS2010的MFC下结合OpenGL开发的对于三维图形的旋转,缩放,移动,主要在做多线激光雷达扫描构图时,学习的这部分内容
  • DDA画线,Bresenhen算法,画圆,画多边形,Cohen-Sutherland裁剪算法,Liang-Barsky裁剪算法,扫描线填充算法,三次样条曲线,Bezier曲线,三次B样条曲线,二维图形变换(平移,缩放,旋转),Z-buffer消隐。...
  • MFC OpenCV:鼠标滚轮缩放图片

    千次阅读 2019-05-14 17:03:27
      在利用OpenCV嵌套MFC窗口显示图片后,希望通过鼠标滚轮函数缩放图片。 实现步骤 1、新建MFC应用程序。 2、配置OpenCV运行环境。 3、添加MFC的Pictrue Control控件 4、编写代码。只需修改MFCApplication1Dlg....
  • 本文翻译在CodeProject上的介绍(主要还是谷歌翻译,看不太明白的地方,请对比原文,敬请原谅),方便自己和后面人的学习(花费了两天...推荐一个前辈写的东西:TeeChart替代品,MFC下好用的高速绘图控件-(Hight-...
  • MFC+OPENGL配置+显示三维图形实现 旋转平移缩放+光照效果[对话框篇] 一、开发环境说明 操作系统:windows 开发软件:VS2017 编程语言:基于MFC对话框下的opengl 最终效果图: 二、配置操作 配置opengl...
  • MFC 单文档 实现opengl 三维旋转 缩放 光照
  • 功能描述:在鼠标进入一个用于绘制图形的窗体(如:Show_3D)时,滚动鼠标滚轮,使窗体中的内容能够进行放大缩小.此处以绘制XNA图形为例. 滚动鼠标的滚轮,触发的是窗体或控件上的 MouseWheel 事件。但是在VS2008以及...
  • 绘制矩形并且能够交互实现缩放、旋转、移动。里面还有绘制椭圆、箭头等功能,只是其他交互功能还未完善待续。。。。
  • 这次介绍在MFC下单文档视图结构中绘制三维图形的一些步骤.(1) 创建一个新的工程,新建一个基于单文档(SDI)的工程,名称为SDOpenGL. (2) 添加OpenGL库. Project->Settings...->Link标签下,在"Object/library Module...
  • 基于VS2015的MFC下,结合openGL实现三维图形绘制及其平移、旋转、缩放等功能,亲测有效,可供学习,注释详细
  • 同一组的系列彼此相邻地绘制(或者对于水平条在彼此的顶部):参见两个图形的示例。 设置组ID是通过 SetGroupId 函数完成的。 Bar series with the same group Id Bar series with different group Id 您还...
  • 主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移、图形旋转、图像反转倒置镜像和图像缩放的知识。同时文章比较详细基础,没有采用GDI+...
  • MFC GDI 曲线图绘制

    万次阅读 2010-04-09 10:58:00
    关键词:MFC GDI 曲线图绘制本控件只是一个很简单的控件,比任务管理器里的曲线图略复杂,不具有图例、鼠标移动可以捕捉曲线上的坐标等特性。具体如下: 1)从CStatic派生,容易在对话框中使用。 2)能够随对话框的...
  • 首先计算推导出三维坐标在二维平面显示的坐标变换方程(使用斜二测视图),使用球面的参数方程,然后定义图形缩放比例规模、坐标轴位移,变换坐标系和规模等,最后绘制坐标轴及球面函数。 如果对绘制二维坐标系还不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,442
精华内容 576
关键字:

mfc绘制图形缩放