Win32另存为指定文件格式的文件对话框

来源:互联网 发布:海南软件职业技术学院 编辑:程序博客网 时间:2024/06/03 22:57

Win32另存为指定文件格式的文件对话框


OPENFILENAME ofn = { 0 }; ofn.lStructSize = sizeof(OPENFILENAME); CString strFilter = _T("PNG 文件(*.png)\0*.png\0JPG 文件(*.jpg)\0*.jpg\0BMP 文件(*.bmp)\0*.bmp\0\0");// 防止在弹出文件对话框时,去操作主窗口,所以先disable掉,等文件对话框关闭后再恢复::EnableWindow( this->m_hWnd, FALSE );ofn.lpstrFile = (LPTSTR)(LPCTSTR)strDefaultName;   ofn.lpstrFilter = strFilter;ofn.nMaxFile = MAX_PATH;   ofn.hwndOwner = m_pCatchToobarDlg->m_hWnd;ofn.lpfnHook = OFNHookProc; // 设置回调函数,修改文件对话框的位置ofn.Flags = OFN_EXPLORER | OFN_ENABLEHOOK | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;   BOOL bRet = ::GetSaveFileName( &ofn );   if( bRet ){::EnableWindow( this->m_hWnd, TRUE );CString csFilePath = ofn.lpstrFile;// 此处判断用户输入的文件名,如果文件名后没有文件后缀名,则加上对应的后缀名CString csFileExt = _T("");int nPos = csFilePath.ReverseFind( _T('.') ); // 从后面找到“.”if ( nPos != -1 ){csFileExt = csFilePath.Right( csFilePath.GetLength() - nPos - 1 );}if ( csFileExt != _T("bmp") && csFileExt != _T("png") && csFileExt != _T("jpg")) // png{DWORD filter_num = ofn.nFilterIndex;if ( filter_num == 1 ){csFilePath += _T(".png");}else if ( filter_num == 2 ){csFilePath += _T(".jpg");}else if ( filter_num == 3 ){csFilePath += _T(".bmp");}else{csFilePath += _T(".png");}}SaveHBitmapToFile( hBitmap, csFilePath );


过滤要保存的文件格式类型,注意过滤字符串书写格式。最后函数SaveHBitmapToFile是根据选择保存的图像格式,保存图像。


效果图:


0 0
原创粉丝点击