4585|11

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc 对话框中显示jpg图片的问题 [复制链接]

我现在在对话框中添加了按钮 void xxxDlg::OnButton1()
想实现的功能有两个,点击按钮后首先能获取要显示图片的路径,现在已经实现了并把路径保存在CString pathname 中。第二个功能 想接着把对应路径的这个图片显示到对话框中。(这个按钮是程序的一小部分)想点击按钮后实现这两个功能。
现在有点困惑,网上查找发现有的代码是添加在OnPaint()里面的,想都写在OnButton1()里始终没运行成功,请大侠指点一二,帮助一下我这个菜鸟,谢谢!

最新回复

谢谢 AAa_tnT  详情 回复 发表于 2009-10-9 20:03
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
可能要看一下MFC,对这个也不懂,帮顶
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
写在按键处理中,肯定是可以的

可能LZ选择的DC有问题
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
1. 定义一个类A,继承static;
2. 在这个类中实现OnPaint();
3. 在这个类中获取Image工厂接口对象;
4. 定义一个函数LoadImageFromFile("图片路径名")。
5. 在对话框按钮中 A  a.LoadImageFromFile(...).

这样就能实现了。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

5
 
引用 3 楼 liuxmzc 的回复:
1. 定义一个类A,继承static;
2. 在这个类中实现OnPaint();
3. 在这个类中获取Image工厂接口对象;
4. 定义一个函数LoadImageFromFile("图片路径名")。
5. 在对话框按钮中 A? a.LoadImageFromFile(...).

这样就能实现了。
我有点似懂非懂的感觉,不太明白如何具体去弄...求教相关代码~ 感激!\(^o^)/~
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
我的邮箱dream_chen19@qq.com 希望高人指点
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

7
 
1.为什么都写在onbutton里呢? vc或evc都帮你把显示代码部分集中到onpaint里了,多方便,你只管往里写代码就是。
2.至于代码网上vc的很多,参考一下就行了。
我怀疑你显示代码写错地方了~
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
弱弱的问一下,我增加了OnPaint() ,但是调试的时候发现,就不执行OnPaint()....
本人比较菜,请问 为什么?
这是网上找的,我加到程序里,但没执行到。。。
void CIImageDlg::OnPaint()
{
        CPaintDC dc(this); // device context for painting
       
        // TODO: Add your message handler code here
               
             CRect   rcWnd;
         GetWindowRect(&rcWnd);
        // TODO: Add your message handler code here
           IImage * m_pImage;
           IImage * m_pThum;
     IImagingFactory * m_pImagingFactory;
            ImageInfo IimageInfo;
        HBITMAP hBitmap;
           HDC hdcMem;
     HGDIOBJ hOldSel;
     HRESULT hr;

  //COM初始化
    if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
   {  
        goto END;
   }

  //创建COM实例
    if(FAILED(hr = CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void**) &m_pImagingFactory)))
     {
        goto END;
     }
if(PathName==L"")return;
  //从文件中创建图片
    if(FAILED(hr = m_pImagingFactory->CreateImageFromFile(PathName, &m_pImage)))
     {
        goto END;
     }

    //绘制图片

//获取图片属性

     m_pImage->GetImageInfo(&IimageInfo);

    //创建一个内存DC,用来存储图片数据
     hBitmap = CreateCompatibleBitmap(dc,IimageInfo.Width,IimageInfo.Height);
     hdcMem = CreateCompatibleDC(dc);
     hOldSel = SelectObject(hdcMem,hBitmap);

/*    m_pImage->GetThumbnail(100,100,&m_pThum);//这个用来显示缩略图
    if(FAILED(hr = m_pThum->Draw(dc,CRect(0,0,480,272),NULL)))&rcWnd
     {
      goto END;
     }*/
   
           if(FAILED(hr = m_pImage->Draw(dc,&rcWnd,NULL))) //原图
     {
      goto END;
     }
   
END:
  //释放资源
    if(m_pImage != NULL)
     {
         m_pImage->Release();
         m_pImage = NULL;
     }

    if(m_pImagingFactory != NULL)
     {
         m_pImagingFactory->Release();
         m_pImagingFactory = NULL;
     }

     CoUninitialize();
}
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
我还是把我的代码贴出来吧 希望高人看下 指点哪里有错[code]
void CFinalDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        GetDlgItem(IDC_EDIT2)->GetWindowText(m_edit2);  

    CppSQLite3DB db;
    db.open(L"\\Fab\\mySqlite.db");
    CppSQLite3Query q = db.execQuery(L"select * from Address_List where ID  ='"+m_edit2+"'");

    CString strTemp1;
    while (!q.eof())
  {
    strTemp1.Format(L"%s",q.fieldValue(7));

    q.nextRow();
  }
  q.finalize(); //以上为首先从数据库中查询出符合条件的路径strTemp1,根据调试结果,到这是可以的。

        IImagingFactory *pImgFactory = NULL; //往下是查到的显示图片的代码
        IImage *pImage = NULL;
        CoInitializeEx(NULL, COINIT_MULTITHREADED);
        HBITMAP hResult = 0;
        if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
                NULL,
                CLSCTX_INPROC_SERVER,
                IID_IImagingFactory,
                (void **)&pImgFactory)))
        {
                if (SUCCEEDED(pImgFactory->CreateImageFromFile(strTemp1, &pImage)))
                {
                        //CWindowDC dc(0);
                        CPaintDC dc(this);
                        CDC dcBitmap;
                        dcBitmap.CreateCompatibleDC(&dc);
                        hResult = CreateCompatibleBitmap(dc.GetSafeHdc(), 200, 200);
                        if (hResult)
                        {
                                HGDIOBJ hOldBitmap = dcBitmap.SelectObject(hResult);
                                //pImage->GetThumbnail(0,0,&pImage);
                                pImage->Draw(dc.GetSafeHdc(), CRect(0, 0, 200, 200), NULL);
                                dcBitmap.SelectObject(hOldBitmap);
                        }
                        pImage->Release();
                }
                pImgFactory->Release();
        }
        CoUninitialize();

}
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
我也很菜 呵呵
建议你找本VC++6.0的书 看看VC的框架具体是Onpaint这样的显示和button是怎么进行消息关联的。
一般书里开头部分都有详细的介绍的,自己看印象深~
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
CWindowDC dc(0);
把CPaintDC dc(this);注释掉
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢 AAa_tnT
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表