这是打开文件所用的代码 
 if (GetOpenFileName(&ofn)==TRUE) 
{
  ::SetWindowText(::GetDlgItem(hdlg,IDC_EDIT4),ofn.lpstrFile);
}
//图片加载代码
 hbitmap=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
“打开文件”选择后 ,关闭对话框,然后再打开,控件图片就不能加载了。
如果打开“打开文件对话框”后,不做选择,关闭对话框,再打开图片显示正常,这是什么原因呢?

解决方案 »

  1.   

    断点调试,
    看hbitmap是否为NULL
      

  2.   

    hbitmap=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    Debug下看看LoadImage成功了没?path路径对不?相对路径还是绝对路径?你不是搞的相对路径吧?
      

  3.   

    可能path被覆盖了:
    char szFile[2048];
    BOOL  OpenFileDialog(HWND hWnd)
    {
    OPENFILENAME ofn;
        ZeroMemory(&ofn, sizeof(ofn));
        ofn.lStructSize = sizeof(ofn);
    // must !
        ofn.lpstrFile = szFile;
        ofn.nMaxFile = sizeof(szFile);
    //
        ofn.lpstrFile[0] = '\0';
    //no extention file! ofn.lpstrFilter="Any file(*.*)\0*.*\0ddfs\0ddfs*\0";
        return(GetOpenFileName((LPOPENFILENAME)&ofn));
    }
      

  4.   

    多谢schlafenhamster,我想可能是内存没有释放的原因吧,
     hbitmap=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
      if(hbitmap==NULL)
      {
      MessageBox(NULL,path,"提示:",MB_OK);
      MessageBox(NULL,"找不到位图资源","提示:",MB_OK); 
       return;}
    该是什么原因呢?
      

  5.   

    MessageBox(NULL,path,"提示:",MB_OK);
    path对不对?
      

  6.   

    这是调用“打开对话框”的代码     static OPENFILENAME ofn; // 
         static TCHAR szFilter[]  = TEXT( "3ds Files(*.3ds)\0*.3ds\0 ");// 
         static TCHAR szFileName[MAX_PATH], szTitleName[MAX_PATH];// 
         ofn.lStructSize = sizeof(OPENFILENAME)   ; 
         ofn.hwndOwner   = NULL; // 
         ofn.hInstance   = NULL; 
         ofn.lpstrFilter = szFilter; 
         ofn.lpstrCustomFilter = NULL; 
         ofn.nMaxCustFilter    = 0; 
         ofn.nFilterIndex      = 0; 
         ofn.lpstrFile  = szFileName; 
         ofn.nMaxFile   = MAX_PATH; 
         ofn.lpstrFileTitle = szTitleName; 
         ofn.nMaxFileTitle  =   MAX_PATH; 
         ofn.lpstrInitialDir=   NULL; 
         ofn.lpstrTitle =   NULL; 
         ofn.Flags  = 0; 
         ofn.nFileOffset = 0; 
         ofn.nFileExtension =0; 
         ofn.lpstrDefExt =TEXT( "3ds"); 
         ofn.lCustData  =0; 
         ofn.lpfnHook = NULL   ; 
         ofn.lpTemplateName = NULL   ; 
          if (GetOpenFileName(&ofn)==TRUE) 
     {
        ::SetWindowText(::GetDlgItem(hdlg,IDC_EDIT4),ofn.lpstrFile);

     }