对面的大神看过来~怎么在置顶窗口上动态加载置顶图片(必须支持jpg,png,bmp),求具体。用的是VC++6.0。
我是用读取配置文件的方法:我已经实现弹出置顶窗口,并且弹出的窗口宽度和高度是从配置文件里读取的。未实现:现在还需要在这个置顶窗口上加载一张图片,图片的绝对路径从配置文件里...
我是用读取配置文件的方法:我已经实现弹出置顶窗口,并且弹出的窗口宽度和高度是从配置文件里读取的。未实现:现在还需要在这个置顶窗口上加载一张图片,图片的绝对路径从配置文件里读取。我用的是VC++6.0。求大神给具体代码(最好有代码,因为一些函数不熟悉),或者用的到的函数,再或者具体思路。(我在做的是:打开A工程马上读取配置文件里的宽高弹出置顶对话框(已实现),对话框上嵌着图片(未实现,这图片的绝对路径是从配置文件读取并打开该图片),程序B把对话框宽度高度以及要打开的文件的绝对路径写入配置文件(已实现)。)
回答的好便加分啊!!能加多少我就给加多少!!!急急急!求解决!求大神! 展开
回答的好便加分啊!!能加多少我就给加多少!!!急急急!求解决!求大神! 展开
1个回答
展开全部
IPicture *m_picture;
OLE_XSIZE_HIMETRIC m_width;
OLE_YSIZE_HIMETRIC m_height;
CString m_filename(cFilePath);//读取的文件名
CFile m_file(m_filename,CFile::modeRead );
//获取文件长度
DWORD m_filelen = m_file.GetLength();
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
m_picture->get_Width(&m_width);
m_picture->get_Height(&m_height);
CDC* dc = GetDC();
//在控件范围显示图片
CRect rect;
GetDlgItem(IDC_STATIC_SD_PREVIEW)-> GetWindowRect(&rect);
ScreenToClient(&rect);
m_picture->Render(*dc,rect.left,rect.top,rect.Width(),rect.Height(),0,m_height,m_width,-m_height,NULL);
m_picture->Release();
OLE_XSIZE_HIMETRIC m_width;
OLE_YSIZE_HIMETRIC m_height;
CString m_filename(cFilePath);//读取的文件名
CFile m_file(m_filename,CFile::modeRead );
//获取文件长度
DWORD m_filelen = m_file.GetLength();
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
m_picture->get_Width(&m_width);
m_picture->get_Height(&m_height);
CDC* dc = GetDC();
//在控件范围显示图片
CRect rect;
GetDlgItem(IDC_STATIC_SD_PREVIEW)-> GetWindowRect(&rect);
ScreenToClient(&rect);
m_picture->Render(*dc,rect.left,rect.top,rect.Width(),rect.Height(),0,m_height,m_width,-m_height,NULL);
m_picture->Release();
追问
我吧你的这段代码放在初始化函数里面,把CString m_filename(cFilePath);//读取的文件名的cFilePath换成要打开文件的绝对路径,把GetDlgItem(IDC_STATIC_SD_PREVIEW)-> GetWindowRect(&rect); 的 ID换成我添加的图片空间的ID,然后编译过了,却加载不了,什么格式的都没显示是为什么,求解释求指导
追答
JPG BMP GIF都可以用这个代码显示,PNG的不能用。
什么都看不到大概窗口重绘了
MFC的机制是窗口被遮挡(最小化)后,恢复视图时。自动产生WM_PAINT消息发送给视图刷新窗口。该消息会依次触发OnPaint()、OnDraw()函数。
如果你的绘图语句是放在一个自定义函数中,并且不是在上述2个函数中调用的话(比如在按钮的处理函数中调用),就只能在屏幕上出现一次,窗口一旦更新就消失了。
所以,用MFC绘图首先要构造一些图形对象(可以用数组或链表存储)。当你需要绘图时,通过在对象数组或链表中做插入、删除等操作。在OnPaint()、OnDraw()函数中直接或间接绘制这些图形对象。这样每次窗口更新都不会“丢失”你绘制的图形。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询