当我用GetOpenFileName (&ofnopen),打开一个bmp文件,如何把它加载到相应的id为:IDC_IMGBMP 的image控件里啊?还有就是当别的窗口覆盖本窗口,然后回到本窗口后,image控件的bmp图片不刷新,请教高手如何解决…………

解决方案 »

  1.   

    不是这样用的,GetOpenFileName仅仅是获取了一个文件名而已,要真正加载BMP文件还要用LoadImage来加载,对于image获件,如果是SDK的话,可以向它发送STM_SETIMAGE消息,当然先要用GetDlgItem获取控件的句柄,然后再发送
      

  2.   

    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消息,由谁发送,发送给谁啊,能说详细点吗?谢谢
      

  3.   

    不知道怎么刷新image控件。  你说的STM_SETIMAGE消息,由谁发送,发送给谁啊,能说详细点吗?谢谢
      

  4.   

    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;
    ------------------------------------------------------------------------
     ParametersfImageType    Specifies the type of image to associate with the static control. It is one of the following values:        * IMAGE_BITMAP
            * IMAGE_ICONhImage    Handle to the image to associate with the static control.
    如果你关联的是一个位图控件,那wParam=IMAGE_BITMAP;然后从IDC_IMGBMP获取控件的Handle并赋值给hImage。
    参考资料来源于MSDN至于发送给谁嘛,一般都是控件的父窗口来作刷新的事务的,所以当然是发给控件的父窗口或是程序的主窗口了。至于谁发送嘛,当然是在你需要加载图片的时候写代码sendmessage了。
      

  5.   

    可是我试了试你说的方法还是不行啊!别的窗口一覆盖,image控件内容里的图片就没了,一篇空白…………
      

  6.   

    一个很简单的问题你弄得这么复杂,直接用LoadImage获取位图句柄,然后向Image控件发送STM_SETIMAGE消息就行了, 不用BitBlt的。
      

  7.   

    呵呵,那说明你发送的消息只进行了invalidate(失效)而没有重绘,需要把加载图片的代码写入窗口重绘的函数中。我只知道MFC的是OnPaint()函数