void CClientMain::OnScreenShot() { CxImage ScreenImage = m_ScreenDisplayer.GetDisplayImage(); //if (ScreenImage.CreateFromHBITMAP(m_ScreenDisplayer.GetDisplayImage())) { ScreenImage.SetJpegQuality(m_dlgSetup.GetImageQuality()); TCHAR filter[] = _T("(*.bmp)|*.bmp |(*.gif)|*.gif|(*.jpg)|*.jpg|(*.png)|*.png|(*.tif)|*.tif|(*.tga)|*.tga|(*.pcx)|*.pcx|(*.wbmp)|*.wbmp|(*.wmf)|*.wmf|(*.jp2)|*.jp2|(*.jpc)|*.jpc|(*.pgx)|*.pgx|(*.raw)|*.raw||"); CFileDialog SaveDlg(false,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,filter); if (IDOK == SaveDlg.DoModal()) { CString FilePathName = SaveDlg.GetPathName(); std::map<int,const wchar_t* const> mapFileExt;//保存所要用到的文件后缀名 std::map<int,DWORD> mapSaveType;//保存所要的图片保存类型对应的CxImage宏 mapFileExt.insert(std::make_pair(1,_T(".bmp"))); mapFileExt.insert(std::make_pair(2,_T(".gif"))); mapFileExt.insert(std::make_pair(3,_T(".jpg"))); mapFileExt.insert(std::make_pair(4,_T(".png"))); mapFileExt.insert(std::make_pair(5,_T(".tif"))); mapFileExt.insert(std::make_pair(6,_T(".tga"))); mapFileExt.insert(std::make_pair(7,_T(".pcx"))); mapFileExt.insert(std::make_pair(8,_T(".wbmp"))); mapFileExt.insert(std::make_pair(9,_T(".wmf"))); mapFileExt.insert(std::make_pair(10,_T(".jp2"))); mapFileExt.insert(std::make_pair(11,_T(".jpc"))); mapFileExt.insert(std::make_pair(12,_T(".pgx"))); mapFileExt.insert(std::make_pair(13,_T(".raw"))); mapSaveType.insert(std::make_pair(1,CXIMAGE_FORMAT_BMP)); mapSaveType.insert(std::make_pair(2,CXIMAGE_FORMAT_GIF)); mapSaveType.insert(std::make_pair(3,CXIMAGE_FORMAT_JPG)); mapSaveType.insert(std::make_pair(4,CXIMAGE_FORMAT_PNG)); mapSaveType.insert(std::make_pair(5,CXIMAGE_FORMAT_TIF)); mapSaveType.insert(std::make_pair(6,CXIMAGE_FORMAT_TGA)); mapSaveType.insert(std::make_pair(7,CXIMAGE_FORMAT_PCX)); mapSaveType.insert(std::make_pair(8,CXIMAGE_FORMAT_WBMP)); mapSaveType.insert(std::make_pair(9,CXIMAGE_FORMAT_WMF)); mapSaveType.insert(std::make_pair(10,CXIMAGE_FORMAT_JP2)); mapSaveType.insert(std::make_pair(11,CXIMAGE_FORMAT_JPC)); mapSaveType.insert(std::make_pair(12,CXIMAGE_FORMAT_PGX)); mapSaveType.insert(std::make_pair(13,CXIMAGE_FORMAT_RAW)); int nFileExt = SaveDlg.m_ofn.nFilterIndex; const wchar_t *const tFileExt = mapFileExt[nFileExt]; DWORD dwSaveType = mapSaveType[nFileExt]; if(FilePathName.Right(4) !=tFileExt) { FilePathName += tFileExt; ScreenImage.Save(FilePathName.GetString() ,dwSaveType); } } } }
type8 ms_save_file(type8s *name, type8 *ptr, type16 size) { CMagneticApp* pApp = (CMagneticApp*)AfxGetApp(); CString strLoadName; FILE *fh; if (name == NULL) { CMagneticView* pView = CMagneticView::GetView(); if (pView == NULL) return 0; SimpleFileDialog SaveDlg(FALSE,NULL,pView->GetFileName(),OFN_HIDEREADONLY|OFN_ENABLESIZING, "Saved Game Files (*.sav)|*.sav|All Files (*.*)|*.*||",pView); SaveDlg.m_ofn.lpstrTitle = "Save the Current Game"; if (ms_is_running()) pApp->SetRedrawStatus(CMagneticApp::Redraw::ThisLine); if (SaveDlg.DoModal() == IDOK) { strLoadName = SaveDlg.GetPathName(); pView->GetFileName() = strLoadName; } else return 0; } else strLoadName = (char*)name; if ((fh = fopen(strLoadName,"wb")) == NULL) return 1; if (fwrite(ptr,1,size,fh) != size) return 1; fclose(fh); return 0; }