按ctrl+W , 選擇C**View類 ,再選擇ID_FILE_OPEN就可以看到右邊有兩個messages,
具體是什麼我也不記得了,好象一個是command , 一個是updateCommandUI
選擇前一個可以建立消息響應
至於載入圖象,可以用CFileDialog選取路徑,用其他庫比如CxImage之類的東西裝載圖象就行了
可以在資源界面的menu菜單中查看到你的"打開"窗口的ID->用ctrl+W進入CLASSWARD界面->建立消息響應->在生成的函數裏用CFileDialog得到選擇的文件名->CFILE用於打開這個文件
然後用文件指針讀入圖象的頭文件->文件指針讀入圖象的信息頭文件和調色版->文件指針讀入圖象的數據->最後在onpait(ondraw)顯示圖片(將調色版讀如設備上下文SelectPalette->設置顯示模式SetStretchBltMode->顯示::StretchDIBits)
- Start Microsoft Visual C++ and create an MFC Application named ShowPicture1
- Create it as a Single Document
- Base the view class on CScrollView and click Finish
- In the Class View, right-click the name of the view class -> Add -> Add Variable...
- Create a private CString variable named strFilename and click Finish
- In the Resource View, double-click the IDR_MAINFRAME menu
- Right the Open menu item and click Add Event Handler...
- In the Class List, select the view class
- Click Add and Edit
- 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(); } }
- 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); } }
- Execute the application
- Close the application