您的位置:首页 > 其它

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是根据选择保存的图像格式,保存图像。

效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: