精华内容
下载资源
问答
  • 关于mfc picture控件 显示图片最小化后重新打开窗口图片消失的问题已解决。 最近在学习MFC,使用picture控件时却遇到当图片已经正确显示且最小化后再次打开时图片却消失了的问题。(窗口界面已经使用最小化功能时才...

    关于mfc picture控件 显示图片最小化后重新打开窗口图片消失的问题已解决。

    最近在学习MFC,使用picture控件时却遇到当图片已经正确显示且最小化后再次打开时图片却消失了的问题。(窗口界面已经使用最小化功能时才会出现上述问题)

    一般在生成界面后会有如下代码:

    void CMFCDemoDlg::OnPaint() //函数–OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文

    	SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    	// 使图标在工作区矩形中居中
    	int cxIcon = GetSystemMetrics(SM_CXICON);
    	int cyIcon = GetSystemMetrics(SM_CYICON);
    	CRect rect;
    	GetClientRect(&rect);
    	int x = (rect.Width() - cxIcon + 1) / 2;
    	int y = (rect.Height() - cyIcon + 1) / 2;
    
    	// 绘制图标
    	dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    	CDialogEx::OnPaint();
    }
    

    }
    MFC的机制是窗口被遮挡(最小化)后,恢复视图时,自动产生WM_PAINT消息发送给视图刷新窗口。该消息会触发OnPaint()函数。如果绘图语句是放在一个自定义函数中,并且不是在上述函数中调用的话(比如在按钮的处理函数中调用),就只能在屏幕上出现一次,窗口一旦更新就消失了。但是,如果在OnPaint()、函数中直接或间接绘制这些图形对象,这样每次窗口更新都不会“丢失”之前绘制的图形。

    具体解决的办法就是在代码:

    else
    {
    CDialogEx::OnPaint();
    }
    之后添加自定义的绘图函数代码,如:
    //当界面最小化后再次打开时重绘之前的图片
    if (!Img.empty())
    {
    showImage(Img,IDC_ImgShow);   //showImage()为自定义的函数,显示图片到MFC picture 控件

    }

    完整的代码示例如下:

    void CMFCDemoDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文

    	SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    	// 使图标在工作区矩形中居中
    	int cxIcon = GetSystemMetrics(SM_CXICON);
    	int cyIcon = GetSystemMetrics(SM_CYICON);
    	CRect rect;
    	GetClientRect(&rect);
    	int x = (rect.Width() - cxIcon + 1) / 2;
    	int y = (rect.Height() - cyIcon + 1) / 2;
    
    	// 绘制图标
    	dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    	CDialogEx::OnPaint();
    }
    if (!Img.empty())
    {
    	showImage(Img,IDC_ImgShow); //showImage()为自定义的函数,显示图片到MFC picture 控件
    }
    

    }
    ————————————————
    版权声明:本文为CSDN博主「AICN」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Zhenjun_Fan/article/details/54019819

    展开全文
  • 图床 数据结构——图论
  • MFC picture控件显示图片(新手)

    千次阅读 2014-05-28 12:20:47
    1.基于对话框程序,图片显示picture控件上,

    1.基于对话框程序,图片显示在picture控件上,图片通过特定的库从文件夹中把文件读成DIB数据块,用StretchDIBits进行显示;

    2.图片显示放在OnPaint里面,图片数据在别的函数中加载后,调用InvalidateRect()


    遇到的问题:

    (1)2中函数第二个参数用FLASE,留有上一张图片的残留:改成TRUE;

    (2)改成TRUE后,遇到两个问题:一、第一次什么都不显示,要移动或者最小化一次才正常:

    对话框OnPaint中 先 CDialog::OnPaint();这句 是 保证 对话框里的 控件 都 收到 Invalidate。
    然后 m_Pic。UpdateWundow();// 保证 Pic 客户区 有效。
    然后 你的 原代码。 

    二、图片显示闪烁:网上大都是采用双缓冲显示图片,试了,没成功。后来看了一个帖子,在OnEraseBkgnd中,用ExcludeClipRect排除图片实际的显示区域,能正常显示了。(先这么着,别的方法以后再研究)

    展开全文
  • 1)个picture控件中各显示一幅jpeg图像,然后对这n个控件调用 ShowWindow(SW_HIDE) ,再调用 ShowWindow(SW_SHOW),然后在这n个控件中再用同样的方法显示jpeg图像。但此时却只能在最后一个picture控件显示 jpeg ...
  • MFC picture控件显示图片 PictureBox控件的主要作用是为用户显示图片。实际显示图片由Picture属性决定。Picture属性包括被显示图片的文件名(及可选的路径名)。 注意窗体对象也具有Picture属性,通过...

    MFC picture控件中显示图片  

    PictureBox 控件的主要作用是为用户显示图片。实际显示图片由 Picture 属性决定。Picture属性包括被显示的图片的文件名(及可选的路径名)。
      注意 窗体对象也具有 Picture 属性,通过设置该属性可直接在窗体背景上显示图片。
      要在运行时显示或替换图片,可利用函数 LoadPicture 来设置 Picture 属性。提供图片文件名和可选路径名,由 LoadPicture 函数处理加载和显示图片的细节。
      picMain.Picture = LoadPicture("VANGOGH.BMP")
      PictureBox 控件具有 AutoSize 属性,当该属性设置为 True 时,PictureBox 能自动调整大小与显示的图片匹配。如果要用 AutoSize 属性设置为 True  PictureBox ,设计窗体时就需要特别小心。图片将不考虑窗体上的其它控件而调整大小,这可能导致意想不到的后果,如覆盖其它控件。设计时应通过加载每一幅图片来检查是否有这种现象发生。

     

    vc picture控件的分类进行拉总结,

    (非动态显示图片(即图片先通过资源管理器载入,有一个固定ID)

    (
    动态载入图片(即只需要在程序中指定图片的路径即可载入
    )



    为方便说明,我们已经建好一个基于对话框的工程,名为
    Ttest.

    对话框类为
    CTestDlg

    (
    )     vc picture控件非动态载入图片
    .



    方法1.先从最简单的开始,picture 控件来实现
    .

    步骤
    :

    先在资源里Import一张图片,ID
    IDB_BITMAP2

    然后在对话框上添加一个picture控件,右键点击打开属性
    ,

    type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框
    ,

    拉开就会看到所有已经载入好的图片
    ,

    选择你要的图片.运行程序即可看到
    .



    方法2vc picture控件.通过背景图


    同样如上,先载入一张图片,IDIDB_BITMAP2

    TestDlg.h


    CBrush m_brBk;//
    public中定义 

    TestDlg.cpp


    在初始化函数OnInitDialog()中加入:

    BOOL CTestDlg::OnInitDialog()

    {

                    CDialog::OnInitDialog();

    CBitmap bmp;

    bmp.LoadBitmap(IDB_BITMAP2);

    m_brBk.CreatePatternBrush(&bmp);

    bmp.DeleteObject();

    return TRUE;   // return TRUE   unless you set the focus to a control

    }



    在打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下
    :

    HBRUSH   CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

    {

                    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

                    if (pWnd == this)

    {

         return m_brBk;

    }

            return hbr;

    }

     

    From:http://blog.china.com/u/100306/372913/201003/5956650.html

     

     

    基于MFC控件STATIC显示图片数据

    1.       在 OnInitDialog 中加入

           GetDlgItem(IDC_MY_PIC)->ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW );     

    2.       在butto 按钮中加入以下,可以显示多中类型的图片资源

    void CDlgpicDlg::OnTest()

    {

           // TODO: Add your command handler code here

           CFileDialog fileDlg(TRUE,NULL,NULL,

                  OFN_ALLOWMULTISELECT,

                  _T("Picture Files (*.bmp *.ico *.jpg)|*bmp;*.ico;*jpg|All Files (*.*)|*.*||"),

                  AfxGetMainWnd());

     

           CString pathName;

           if(fileDlg.DoModal ()==IDOK)

           {

                  POSITION mPos=fileDlg.GetStartPosition();

                  while(mPos!=NULL)

                  {

                         pathName=fileDlg.GetNextPathName(mPos);

                         if(m_pict.LoadPicture(pathName.GetBuffer(pathName.GetLength())))

                         {

                                // 防止有透明图片,消除已有的图片信息

                                CPaintDC dc(this); // device context for painting

                                CRect rc;

                                GetDlgItem(IDC_MY_PIC)->GetWindowRect(&rc);

                                dc.FillSolidRect(rc, RGB(0, 0, 0));

                                Invalidate();

                         }

                  }

           }    

    }

    3.给父窗口增加ON_WM_DRAWITEM消息映射函数 在OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)消息映射函数里面绘制控件

    void CDlgpicDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)

    {

           // TODO: Add your message handler code here and/or call default

           if(nIDCtl == IDC_MY_PIC)

           {

                  if ( m_pict.m_pic)

                  {

                 

                         RECT rect;

                         TRACE("--hell-- test---");

                         HWND hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDC_MY_PIC);

                        

                         HDC hDC = ::GetDC(::GetDlgItem(this->GetSafeHwnd(),IDC_MY_PIC));      

                         //Get the DC for the CPicture Box

                         ::GetClientRect(::GetDlgItem(this->GetSafeHwnd(), IDC_MY_PIC), &rect);  

                         //Get dimensions of it

                         m_pict.DrawPicture(hDC, 0, 0, rect.right - rect.left ,rect.bottom - rect.top );

                         ::ReleaseDC(::GetDlgItem(this->GetSafeHwnd(),IDC_MY_PIC), hDC);   

                        

                  }

           }    

           CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);

    }

    总结: 如果在static中需要显示图片,在ONPAINT 中绘画 没有效果,需要这么画:

    1)给static控件增加SS_OWNERDRAW属性      GetDlgItem(IDC_MY_PIC)->ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW );   

    2)给父窗口增加ON_WM_DRAWITEM消息映射函数

    3)在OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)消息映射函数里面绘制控件

    例如:下面给对话框里的IDC_STATIC_DRAW控件画个蓝色的背景

    void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)

    {

    if(nIDCtl == IDC_STATIC_DRAW)

    {

    CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

    pDC->FillSolidRect(10, 10, lpDrawItemStruct->rcItem.right - 20, lpDrawItemStruct->rcItem.bottom - 20, RGB(0, 0, 255));

    return;

    }

    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);

    }

    另外,还可以这么画

    从CStatic继承一个新类,然后增加WM_PAINT消息处理,在OnPaint里面画

    例如:

    class CMyStatic : public CStatic

    {

    ...

    afx_msg void OnPaint();

    };

    void CMyStatic::OnPaint()

    {

    CPaintDC dc(this); // device context for painting

    CRect rc;

    GetClientRect(rc);

    dc.FillSolidRect(rc, RGB(0, 0, 255));

    }    

     

     

    转载于:https://www.cnblogs.com/lemon0823/archive/2013/03/08/2949386.html

    展开全文
  • MFC Picture控件显示图像

    千次阅读 2018-11-23 10:48:55
    CWnd* m_pWnd; m_pWnd = this-&... // IDC_PICTURE此为Picture控件ID   //********* 加载图像 ********************  CString filter;  filter = "支持的图像(*.bmp;*.tif;*.jpg)|*.bm...

    CWnd*      m_pWnd;  

    m_pWnd = this->GetDlgItem(IDC_PICTURE);  //  IDC_PICTURE此为Picture控件ID 

      //********* 加载图像 ********************

       CString filter;
        filter = "支持的图像(*.bmp;*.tif;*.jpg)|*.bmp;*.tif;*.jpg||";
        CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter);

        //**默认加载图像时路径,此处可不做处理  

        CString  strForlder=TEXT("d:// "); 
        dlg.m_ofn.lpstrInitialDir = strForlder;    

       //**

        if (dlg.DoModal() == IDOK)
        {     
            try{

                // 此类方法即便实现体在OnPaint()外,Picture也可以显示图像,已经过验证
                CRect   rect;
                CImage  image;
                image.Load(dlg.GetPathName().GetBuffer());
                wndDraw->GetWindowRect(&rect);  //将客户区选中到控件表示的矩形区域内  
                CWnd *pWnd = NULL;
                pWnd = wndDraw;//获取控件句柄  
                pWnd->GetClientRect(&rect);//获取句柄指向控件区域的大小  
                CDC *pDc = NULL;
                pDc = pWnd->GetDC();//获取picture的DC  
                pDc->SetStretchBltMode(STRETCH_HALFTONE);
                image.Draw(pDc->m_hDC, rect);//将
                ReleaseDC(pDc);

            }
             catch(CException *e)//&e
            {
                 TCHAR   szError[1024];   

                 e->GetErrorMessage(szError,1024);   //  e.GetErrorMessage(szError,1024); 
                 ::AfxMessageBox(szError); 
            } 

        }

     

    展开全文
  • 解决方案:OpenCV学习笔记(9)利用MFCPicture控件显示图像+播放视频和捕获摄像头画面 - CSDN博客 http://blog.csdn.net/chenyusiyuan/article/details/4744097 转载于:...
  • 利用MFCPicture控件显示和处理图像

    热门讨论 2010-09-10 22:41:01
    利用MFCPicture控件显示和处理图像 利用MFCPicture控件显示和处理图像 利用MFCPicture控件显示和处理图像
  • 转自:https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cstatic-class?view=vs-2019 / Code such as this could be placed in the OnInitDialog callback. // It creates two bitmap static controls on the ...
  • MFCPicture控件显示OpenCV图像,开发环境为Visual Studio 2015
  • MFC picture控件显示动态/静态BMP图片

    千次阅读 2014-04-14 15:09:47
    MFC picture控件显示动态/静态BMP图片  所谓的静态有两种,一种是在picture属性中直接加载(type选择bitmap,image选择已加载到资源中的位图),另一种是通过编程加载,这两种的前提都要我们先把位图导入到资源...
  • mfc picture控件显示png图片

    千次阅读 2017-01-19 14:31:49
    onpaint函数里添加程序: CClientDC *pDC = new CClientDC(GetDlgItem(IDC_LIGHT)); CRect rect; GetDlgItem(IDC_LIGHT)->GetWindowRect(&rect); ...Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics ...
  • 利用MFCPicture控件显示和处理图像,后面又添加了播放视频和捕获摄像头画面的功能,其中播放视频的功能只有 'Play' 和 'Stop',不能实现暂停
  • 地址: PictureBox 控件 即时通讯网 推荐使用 MFC picture控件中 
  • 开发平台为Visual Studio 2015,MFCPicture控件显示OpenCV图像,播放视频
  • #使用picture控件显示各种类型的图片 给大家介绍一个通用的方法,使用时记得包含一下atlimage.h头文件 /****************************************** 参数说明: CString path //图片路径 INT control_id //...
  • 利用MFCPicture控件显示图像、视频和摄像头数据
  • 本方法通过OpenCV中已经抛弃的一个类来在MFC显示。 这个类的名称为CvvImage,具体代码实现如下:CvvImage.h文件#pragma once#ifndef CVVIMAGE_CLASS_DEF#define CVVIMAGE_CLASS_DEF#include "opencv.hpp"class ...
  • 转自:... MFC:CImage显示OpenCV:Mat矩阵图像 MFC:CImage显示OpenCV:Mat矩阵图像 由 guoming0000 » 2011-10-19 8:53 自从开始学C++的OpenCV,就想把问题都用一个简单的类来解决...
  • vc MFC picture控件 yuv图像缩放 方法

    千次阅读 2012-02-23 16:46:37
    在vs2008 下,MFC程序的picture控件上ddraw显示yuv图像,目前因为ddraw默认是显示图像原始大小的,即picture控件中只能显示一部分图像,还有一部分显示不出来,为了解决这个问题,对yuv图像进行缩放,当鼠标双击...
  • CStatic * pSat = (CStatic*)GetDlgItem(IDC_PICTURE); HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()-> m_hInstance, MAKEINTRESOURCE(图片ID)); ...
  • 出处:... 在opencv2.2中,去除了CvvImage类,当需要在picture控件显示图片时,可以引入之前版本的CvvImage类。 参考opencv论坛上面的实现: //CvvImage.h #pragma once #ifn
  • MFCpicture控件上画图

    热门讨论 2012-07-27 13:27:48
    展示如何在picture控件上进行MFC绘图
  • MFC picture控件使用

    2011-05-08 13:52:31
    通过按钮选择一张图片,然后再picture控件进行显示
  • MFC点击Picture控件内,响应鼠标点击事件,并将点坐标显示在EDIT控件内。

空空如也

空空如也

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

mfcpicture控件显示图片