Win32另存为指定文件格式的文件对话框
2016-04-21 16:43
435 查看
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是根据选择保存的图像格式,保存图像。
效果图:
相关文章推荐
- C++:google style 强制类型转换
- Activity生命周期和启动模式
- UITableView 基础篇
- Java Hex 16进制的 byte String 转换类
- java数组
- 数据库
- Win10开机黑屏进不了桌面
- Oracle 10g安装64位图解流程
- HDOJ2955 0/1背包的价值和重量
- 利用R语言如何判别和分类
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- HTTP错误大全
- easyui 动态添加Trees 和 Tabs
- 高通安卓调试LCD几方面总结(二)
- MIPI概述
- alarmManager和prendingIntent的联合使用
- c++ 前置++与后置++的区别
- 保证最后3个数字是最小的
- ASP.NET MVC之文件上传【一】(八)
- Base64编码及其作用