MyException - 我的异常网
当前位置:我的异常网» VB » 从外部拖图片到窗口显示的有关问题

从外部拖图片到窗口显示的有关问题

www.myexceptions.net  网友分享于:2013-04-10  浏览:11次
从外部拖图片到窗口显示的问题
如题,我写的代码在下面。现阶段可以实现显示已制定路径的图片,若制定路径的图片不存在则显示文件未找到。接下来希望可以实现从外部拖拉一图片进来显示。可是在WmDropFiles函数中不知道如何定义该阶段的IMAGE的指针pimg。还是不要定义呢?可是我还是觉得是要的吧~~
class WinIMG:public WinGDI{
Image* pimg;
public:
  WinIMG(const char* fname,int x0, int y0, int dx, int dy):WinGDI(fname,x0,y0,dx,dy),pimg(0){ 
    WCHAR fname_w[1024];
    wsprintfW(fname_w,L"%S",fname);
    pimg = new Image(fname_w);
    if(pimg->GetLastStatus()!=Ok){
       delete pimg;
       pimg=0;
    }
    DragAcceptFiles(hWnd,true);//the window is acceptable for file 
  }

  ~WinIMG(){
    if(pimg!=0)
      delete pimg;
  }

  virtual void PaintGDI(Graphics& graphics) { 
  if(pimg) 
  graphics.DrawImage(pimg, 0, 0);
      else {
  FontFamily  fontFamily(L"Times New Roman");
  Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
  PointF      pointF(30.0f, 10.0f);
  SolidBrush  solidBrush(Color(255, 0, 0, 255));
  graphics.DrawString(L"File no found!", -1, &font, pointF, &solidBrush);
    }
  }
   virtual LRESULT WmDropFiles(HWND hWnd, WPARAM wP, LPARAM lP) {
    HDROP hDropInfo=(HDROP)wP;
TCHAR szFileName[MAX_PATH + 1] = {0};    
int nFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);     
for (int i=0; i<nFiles; i++) {  
DragQueryFile(hDropInfo, i, szFileName, MAX_PATH);  

//pimg = new Image(szFileName); ???不正确!!
}  

DragFinish(hDropInfo);  //release the space

   return -1;
   }

};

void Test9(){
WinIMG winTT("..\\KK.jpg",100,100,400,400);
winTT.SetMain();//设为主窗口
WinCls::Dispatch();
}



int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hprevInst, LPSTR cmd, int nCmdShow){
Test9();//show these pictures

return 0;
}

------解决方案--------------------
窗口刷新问题。为什么不用GDI+呢?

GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的 继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中 GDI进行了优化,并添加了许多新的功能。

     遗憾的是,VC6.0并不能直接使用GDI+,下面介绍一种很方便的在VC6.0中使用GDI+的方法。步骤如下:


GDI+ for VC6.0 SDK下载地址:
http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip

1.将GDI+.rar将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中;

2.在你将要使用GDI+的工程中,完成初始化工作:

将以下代码加入StdAfx.h头文件中:

//加入的头文件
#include <comdef.h>//初始化一下com口
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有