从外部拖图片到窗口显示的问题
如题,我写的代码在下面。现阶段可以实现显示已制定路径的图片,若制定路径的图片不存在则显示文件未找到。接下来希望可以实现从外部拖拉一图片进来显示。可是在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*