sdk image控件刷新问题

dspeeding 2009-10-31 10:26:19
当我用GetOpenFileName (&ofnopen),打开一个bmp文件,如何把它加载到相应的id为:IDC_IMGBMP 的image控件里啊?

还有就是当别的窗口覆盖本窗口,然后回到本窗口后,image控件的bmp图片不刷新,请教高手如何解决…………
...全文
110 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dspeeding 2009-11-08
  • 打赏
  • 举报
回复
问题解决了 谢谢大家 呵呵
job82824 2009-11-04
  • 打赏
  • 举报
回复
呵呵,那说明你发送的消息只进行了invalidate(失效)而没有重绘,需要把加载图片的代码写入窗口重绘的函数中。我只知道MFC的是OnPaint()函数
wltg2001 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dspeeding 的回复:]
hdc=GetDC(GetDlgItem(hwnd,IDC_IMGBMP));
HDC DCMemory = CreateCompatibleDC(NULL); //建立内存兼容DC
HBITMAP bitmap; //定义bitmap对象
BITMAP bmp; //定义bmp结构
bitmap =(HBITMAP) LoadImageA(NULL,szOpenFile,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);//装入硬盘中的*.bmp文件
int i=GetLastError();
GetObject(bitmap,sizeof(bmp),&bmp); //获得bitmap信息到bmp结构中
SelectObject(DCMemory,bitmap); //将BMP选入到内存DC中
DeleteObject(bitmap); //删除对象
BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,DCMemory,0,0,SRCCOPY);//将内存DC中的内容拷贝到当前窗口DC中,并显示
DeleteDC(DCMemory); //删除DC
ReleaseDC(GetDlgItem(hwnd,IDC_IMGBMP),hdc);

我是这样加载图片的,不过就是不知道怎么刷新image控件。  你说的STM_SETIMAGE消息,由谁发送,发送给谁啊,能说详细点吗?谢谢
[/Quote]
一个很简单的问题你弄得这么复杂,直接用LoadImage获取位图句柄,然后向Image控件发送STM_SETIMAGE消息就行了, 不用BitBlt的。
jeff_5388 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]
不是这样用的,GetOpenFileName仅仅是获取了一个文件名而已,要真正加载BMP文件还要用LoadImage来加载,对于image获件,如果是SDK的话,可以向它发送STM_SETIMAGE消息,当然先要用GetDlgItem获取控件的句柄,然后再发送
[/Quote]
对头!
dspeeding 2009-11-02
  • 打赏
  • 举报
回复
hdc=GetDC(GetDlgItem(hwnd,IDC_IMGBMP));
HDC DCMemory = CreateCompatibleDC(NULL); //建立内存兼容DC
HBITMAP bitmap; //定义bitmap对象
BITMAP bmp; //定义bmp结构
bitmap =(HBITMAP) LoadImageA(NULL,szOpenFile,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);//装入硬盘中的*.bmp文件
int i=GetLastError();
GetObject(bitmap,sizeof(bmp),&bmp); //获得bitmap信息到bmp结构中
SelectObject(DCMemory,bitmap); //将BMP选入到内存DC中
DeleteObject(bitmap); //删除对象
BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,DCMemory,0,0,SRCCOPY);//将内存DC中的内容拷贝到当前窗口DC中,并显示
DeleteDC(DCMemory); //删除DC
ReleaseDC(GetDlgItem(hwnd,IDC_IMGBMP),hdc);

我是这样加载图片的,不过就是不知道怎么刷新image控件。 你说的STM_SETIMAGE消息,由谁发送,发送给谁啊,能说详细点吗?谢谢
dspeeding 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 job82824 的回复:]
STM_SETIMAGE

his message is sent by an application to associate a new image — icon or bitmap — with a static control.这个消息用于应用程序将一个新的图标或位图关联到一个静态控件上面


-------------------------------------------------------------------
STM_SETIMAGE wParam = (WPARAM) fImageType;
    lParam = (LPARAM)(HANDLE) hImage;
------------------------------------------------------------------------
Parameters

fImageType

    Specifies the type of image to associate with the static control. It is one of the following values:

        * IMAGE_BITMAP
        * IMAGE_ICON

hImage

    Handle to the image to associate with the static control.


如果你关联的是一个位图控件,那wParam=IMAGE_BITMAP;然后从IDC_IMGBMP获取控件的Handle并赋值给hImage。
参考资料来源于MSDN

至于发送给谁嘛,一般都是控件的父窗口来作刷新的事务的,所以当然是发给控件的父窗口或是程序的主窗口了。至于谁发送嘛,当然是在你需要加载图片的时候写代码sendmessage了。


[/Quote]
可是我试了试你说的方法还是不行啊!别的窗口一覆盖,image控件内容里的图片就没了,一篇空白…………
job82824 2009-11-02
  • 打赏
  • 举报
回复
STM_SETIMAGE

his message is sent by an application to associate a new image — icon or bitmap — with a static control.这个消息用于应用程序将一个新的图标或位图关联到一个静态控件上面



-------------------------------------------------------------------
STM_SETIMAGE wParam = (WPARAM) fImageType;
lParam = (LPARAM)(HANDLE) hImage;
------------------------------------------------------------------------
Parameters

fImageType

Specifies the type of image to associate with the static control. It is one of the following values:

* IMAGE_BITMAP
* IMAGE_ICON

hImage

Handle to the image to associate with the static control.


如果你关联的是一个位图控件,那wParam=IMAGE_BITMAP;然后从IDC_IMGBMP获取控件的Handle并赋值给hImage。
参考资料来源于MSDN

至于发送给谁嘛,一般都是控件的父窗口来作刷新的事务的,所以当然是发给控件的父窗口或是程序的主窗口了。至于谁发送嘛,当然是在你需要加载图片的时候写代码sendmessage了。

dspeeding 2009-11-02
  • 打赏
  • 举报
回复
不知道怎么刷新image控件。 你说的STM_SETIMAGE消息,由谁发送,发送给谁啊,能说详细点吗?谢谢
liuchui2009 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jeff_5388 的回复:]
引用 3 楼 wltg2001 的回复:
不是这样用的,GetOpenFileName仅仅是获取了一个文件名而已,要真正加载BMP文件还要用LoadImage来加载,对于image获件,如果是SDK的话,可以向它发送STM_SETIMAGE消息,当然先要用GetDlgItem获取控件的句柄,然后再发送

对头!
[/Quote]
很对头!
dspeeding 2009-10-31
  • 打赏
  • 举报
回复
没人来啊 帮帮忙啊……
wltg2001 2009-10-31
  • 打赏
  • 举报
回复
不是这样用的,GetOpenFileName仅仅是获取了一个文件名而已,要真正加载BMP文件还要用LoadImage来加载,对于image获件,如果是SDK的话,可以向它发送STM_SETIMAGE消息,当然先要用GetDlgItem获取控件的句柄,然后再发送
dspeeding 2009-10-31
  • 打赏
  • 举报
回复
再顶顶,看看有人帮忙不?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧