如何在單文檔中通過打開顯示圖片

按ctrl+W , 選擇C**View類 ,再選擇ID_FILE_OPEN就可以看到右邊有兩個messages,
具體是什麼我也不記得了,好象一個是command , 一個是updateCommandUI
選擇前一個可以建立消息響應
至於載入圖象,可以用CFileDialog選取路徑,用其他庫比如CxImage之類的東西裝載圖象就行了

可以在資源界面的menu菜單中查看到你的"打開"窗口的ID->用ctrl+W進入CLASSWARD界面->建立消息響應->在生成的函數裏用CFileDialog得到選擇的文件名->CFILE用於打開這個文件
然後用文件指針讀入圖象的頭文件->文件指針讀入圖象的信息頭文件和調色版->文件指針讀入圖象的數據->最後在onpait(ondraw)顯示圖片(將調色版讀如設備上下文SelectPalette->設置顯示模式SetStretchBltMode->顯示::StretchDIBits)

  1. Start Microsoft Visual C++ and create an MFC Application named ShowPicture1
  2. Create it as a Single Document
  3. Base the view class on CScrollView and click Finish
  4. In the Class View, right-click the name of the view class -> Add -> Add Variable...
  5. Create a private CString variable named strFilename and click Finish
  6. In the Resource View, double-click the IDR_MAINFRAME menu
  7. Right the Open menu item and click Add Event Handler...
  8. In the Class List, select the view class
  9. Click Add and Edit
  10. Implement the event as follows:
    void CShowPicture1View::OnFileOpen()
    {
     // TODO: Add your command handler code here
     TCHAR strFilter[] = { TEXT("Picture Files (*.bmp)|*.bmp||") };
     CFileDialog dlg(TRUE, TEXT(".bmp"), NULL, 0, strFilter);
    
     if( dlg.DoModal() == IDOK )
     {
      strFilename = dlg.GetFileName();
      Invalidate();
     }
    }
  11. Access the OnDraw event (of the view class) and change its as follows:
    void CShowPicture1View::OnDraw(CDC* pDC)
    {
     CShowPicture1Doc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     if (!pDoc)
      return;
    
     // TODO: add draw code for native data here
     if( strFilename != "" )
     {
      BITMAP bmpProperties;
    
      // Create a bitmap handle using the name of the file
      HBITMAP bmpHandle = (HBITMAP)LoadImage(NULL,
                                      strFilename,
                        IMAGE_BITMAP,
                        0,
                 0,
                 LR_LOADFROMFILE);
    
      CBitmap bmpPicture;
      CDC mdcPicture;
    
     // Convert the Win32 bitmap handle into an MFC bitmap object
      CBitmap *bmpFromHandle = bmpPicture.FromHandle(bmpHandle);
      bmpPicture.Attach(bmpHandle);
    
     // Call the Win32 GetObject() function to get the properties
      // of the bitmap and store them in a BITMAP structure
      ::GetObject(bmpPicture,
           sizeof(bmpProperties),
           &bmpProperties);
    
      // Create a compatible device context
      mdcPicture.CreateCompatibleDC(pDC);
      // Select the bitmap into the device context
      CBitmap * bmpPrevious = 
        mdcPicture.SelectObject(bmpFromHandle);
    
      // Using the dimensions store in the BITMAP object,
      // display the picture
      pDC->BitBlt(0, 0,
           bmpProperties.bmWidth, bmpProperties.bmHeight,
           &mdcPicture, 0, 0, SRCCOPY);
    
      // Get the dimensions of the new picture
      SIZE sizeTotal;
      sizeTotal.cx = bmpProperties.bmWidth;
      sizeTotal.cy = bmpProperties.bmHeight;
      // Change the scrolling area/dimensions of the view
      SetScrollSizes(MM_TEXT, sizeTotal);
    
      // Restore the bitmap
      pDC->SelectObject(bmpPrevious);
      // Delete the Win32 bitmap handle
      DeleteObject(bmpHandle);
     }
    }
  12. Execute the application

  13. Close the application
發佈了7 篇原創文章 · 獲贊 2 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章