文件浏览和图片浏览(03_MzFileBrowser)

文件浏览和图片浏览

此示例代码展示如何使用文件浏览,图片浏览,文件保存和文件选择。

03_MzFileBrowser.png
03_MzFileBrowser2.png
03_MzFileBrowser3.png
03_MzFileBrowser4.png
 图片浏览:
    

    IMzSelect *pSelect = NULL;  
    IPhotoViewer *pImage = NULL;
    CoInitializeEx(NULL, COINIT_MULTITHREADED );
    if ( SUCCEEDED( CoCreateInstance( CLSID_PhotoView, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_PhotoViewer,(void **)&pImage ) ) )
    {  
        if( SUCCEEDED( pImage->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
        {
            pImage->SetParentWnd( m_hWnd );
            pImage->SetSelectPhotoMode( SELECT_NORMAL );
            pImage->SetCurrentImageFileName( L"\\Disk\\Temp.jpg " );//因为内部会做截屏操作,所以后缀名为.jpg和.png
            pSelect->Invoke();

            pSelect->Release();
        }  
        pImage->Release();
    }
    CoUninitialize();    
 文件选择:
    

    IMzSelect *pSelect = NULL; 
    IFileBrowser *pFile = NULL;                      
    CoInitializeEx(NULL, COINIT_MULTITHREADED );
    if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
    {     
        if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
        {
            TCHAR file[ MAX_PATH ] = { 0 };
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDirectoryPath( L"\\Disk\\EBook" ); //如果不调用此函数则默认为根目录
            pFile->SetExtFilter( L"*.txt;*.rar;" );                                      
            pFile->SetOpenDocumentType(DOCUMENT_SELECT_SINGLE_FILE); //应用根据需求进行文档打开方式的设置
            if( pSelect->Invoke() ) 
            {//各应用根据自己需求获取文档的返回值            
                _tcscpy( file, pFile->GetSelectedFileName() );
                std::wstring displayText = L"选择的文件为:";
                displayText += file;
                MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                displayText.clear();
            }
            pSelect->Release();
        }     
        pFile->Release();
    }  
    CoUninitialize();
    ::InvalidateRect( m_hWnd, NULL, FALSE );
    ::UpdateWindow( m_hWnd );
 文件保存:
    

    IMzSave *pSave = NULL; 
    IFileBrowser *pFile = NULL;                      
    CoInitializeEx(NULL, COINIT_MULTITHREADED );
    if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
    {     
        if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Save, (void**)&pSave ) ) )
        {
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDocumentType(DOCUMENT_SAVE_FILES); //应用根据需求进行文档打开方式的设置
            pFile->SetOpenDirectoryPath( L"\\Disk\\EBook" ); 
            if( pSave->Invoke() ) 
            {//提供路径给应用进行保存操作
                TCHAR saveDir[ MAX_PATH ] = { 0 };
                _tcscpy( saveDir, pFile->GetSaveFileDirectory() );   
                std::wstring displayText = L"保存的路径为:";
                displayText += saveDir;
                MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                displayText.clear();
            }
            pSave->Release();
        }     
        pFile->Release();
    }
    CoUninitialize();
选择多个文件:
    

    IMzSelect *pSelect = NULL; 
    IFileBrowser *pFile = NULL;                      
    CoInitializeEx(NULL, COINIT_MULTITHREADED );
    if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
    {     
        if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
        {
            TCHAR file[ MAX_PATH ] = { 0 };
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDirectoryPath( L"\\Disk" ); //如果不调用此函数则默认为根目录                                      
            pFile->SetOpenDocumentType(DOCUMENT_SELECT_FILES); //应用根据需求进行文档打开方式的设置
            if( pSelect->Invoke() ) 
            {//各应用根据自己需求获取文档的返回值            
                int selectedDirectoryCount = pFile->GetSelectedDirectoryCount();
                int selectedFileCount = pFile->GetSelectedFileCount();
                TCHAR temp[ MAX_PATH ] = { 0 };
                wsprintf( temp, L"文件%d个, 目录%d个",selectedFileCount, selectedDirectoryCount );
                MzMessageBoxEx( m_hWnd,temp, L"Test" );
                for ( int i = 0; i < selectedDirectoryCount; i++ )
                {
                    _tcscpy( file, pFile->GetSelectedDirectoryPath( i ) );
                    std::wstring displayText = L"选择的目录为:";
                    displayText += file;
                    MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                    displayText.clear();
                }
                for ( int i = 0; i < selectedFileCount; i++ )
                {
                    _tcscpy( file, pFile->GetSelectedFilePath( i ) );
                    std::wstring displayText = L"选择的文件为:";
                    displayText += file;
                    MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                    displayText.clear();
                }
            }
        pSelect->Release();
           }     
    pFile->Release();
    }

完整示例

/************************************************************************/
/*
* Copyright (C) Meizu Technology Corporation Zhuhai China
* All rights reserved.
* 中国珠海, 魅族科技有限公司, 版权所有.
*
* Author:    
* Create on: 2009-06-26
*/
/************************************************************************/

//请按照以步骤运行此实例代码:
//首先, 打开VS2005/2008创建一个Win 32智能设备项目
//在项目向导中选择M8SDK, 并勾选空项目
//然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中
//最后,按照M8SDK的帮助文档,配置项目属性
//现在,可以运行此程序了

//包含MZFC库的头文件
#include <mzfc_inc.h>
#include <InitGuid.h>
#include <IMzUnknown.h>
#include <IMzUnknown_IID.h>
#include <IPhotoViewer.h>
#include <IPhotoViewer_GUID.h>
#include <IFileBrowser.h>
#include <IFileBrowser_GUID.h>
//此代码演示了:
//  创建和初始化应用程序
//  创建和初始化窗体
//  使用FileBrowser和PhotoViewer

#define ID_TEST_SELECT_PHOTO_FROM_PHOTOVIEWER    101
#define ID_TEST_SELECT               102
#define ID_TEST_SAVE               103
#define ID_TEST_MULTI_FILE                       104

// 从 CMzWndEx 派生的主窗口类
class CSample1MainWnd: public CMzWndEx
{
  MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
  // 窗口中的按钮控件
  UiButton m_testSelectBtn;
  UiButton m_testFileSelectBtn;
  UiButton m_testFileSaveBtn;
  UiButton m_testFileMultiSelectBtn;
protected:
  // 窗口的初始化
  virtual BOOL OnInitDialog()
  {
    // 必须先调用基类的初始化
    if (!CMzWndEx::OnInitDialog())
    {
      return FALSE;
    }

    m_testSelectBtn.SetPos( 100, 100, 200, 100 );
    m_testSelectBtn.SetText( L"选择图片");
    m_testSelectBtn.SetID( ID_TEST_SELECT_PHOTO_FROM_PHOTOVIEWER );
    m_testSelectBtn.SetButtonType( MZC_BUTTON_DEFAULT );
    AddUiWin( &m_testSelectBtn );

    m_testFileSaveBtn.SetPos( 100, 200, 200, 100 );
    m_testFileSaveBtn.SetText( L"文件保存" );
    m_testFileSaveBtn.SetID( ID_TEST_SAVE );
    m_testFileSaveBtn.SetButtonType( MZC_BUTTON_DEFAULT );
    AddUiWin( &m_testFileSaveBtn );

    m_testFileMultiSelectBtn.SetPos( 100, 400, 200, 100 );
    m_testFileMultiSelectBtn.SetText( L"多个文件选择 " );
    m_testFileMultiSelectBtn.SetID( ID_TEST_MULTI_FILE );
    m_testFileMultiSelectBtn.SetButtonType( MZC_BUTTON_DEFAULT );
    AddUiWin( &m_testFileMultiSelectBtn );

    m_testFileSelectBtn.SetPos( 100, 500, 200, 100 );
    m_testFileSelectBtn.SetText( L"文件选择" );
    m_testFileSelectBtn.SetID( ID_TEST_SELECT );
    m_testFileSelectBtn.SetButtonType( MZC_BUTTON_DEFAULT );
    AddUiWin( &m_testFileSelectBtn );

    return TRUE;
  }

  // 重载命令消息的处理函数
  virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
  {
    UINT_PTR id = LOWORD(wParam);
    switch( id )
    {
    case ID_TEST_SELECT_PHOTO_FROM_PHOTOVIEWER:
      {
        IMzSelect *pSelect = NULL;  
        IPhotoViewer *pImage = NULL;
        CoInitializeEx(NULL, COINIT_MULTITHREADED );
        if ( SUCCEEDED( CoCreateInstance( CLSID_PhotoView, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_PhotoViewer,(void **)&pImage ) ) )
        {  
          if( SUCCEEDED( pImage->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
          {
            pImage->SetParentWnd( m_hWnd );
            pImage->SetSelectPhotoMode( SELECT_NORMAL );
            pImage->SetCurrentImageFileName( L"\\Disk\\Temp.jpg " );//因为内部会做截屏操作,所以后缀名为.jpg和.png
      pSelect->Invoke();
      
            pSelect->Release();
          }  
          pImage->Release();
        }
        CoUninitialize();    
      }
      break;
    case ID_TEST_SELECT:
      {
        IMzSelect *pSelect = NULL; 
        IFileBrowser *pFile = NULL;                      
        CoInitializeEx(NULL, COINIT_MULTITHREADED );
        if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
        {     
          if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
          {
            TCHAR file[ MAX_PATH ] = { 0 };
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDirectoryPath( L"\\Disk\\EBook" ); //如果不调用此函数则默认为根目录
            pFile->SetExtFilter( L"*.txt;*.rar;" );                                      
            pFile->SetOpenDocumentType(DOCUMENT_SELECT_SINGLE_FILE); //应用根据需求进行文档打开方式的设置
            if( pSelect->Invoke() ) 
            {//各应用根据自己需求获取文档的返回值            
              _tcscpy( file, pFile->GetSelectedFileName() );
              std::wstring displayText = L"选择的文件为:";
              displayText += file;
              MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
              displayText.clear();
            }
            pSelect->Release();
          }     
          pFile->Release();
        }  
        CoUninitialize();
        ::InvalidateRect( m_hWnd, NULL, FALSE );
        ::UpdateWindow( m_hWnd );

      }
      break;
    case ID_TEST_MULTI_FILE:
      {
        IMzSelect *pSelect = NULL; 
        IFileBrowser *pFile = NULL;                      
        CoInitializeEx(NULL, COINIT_MULTITHREADED );
        if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
        {     
          if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Select, (void**)&pSelect ) ) )
          {
            TCHAR file[ MAX_PATH ] = { 0 };
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDirectoryPath( L"\\Disk" ); //如果不调用此函数则默认为根目录                                      
            pFile->SetOpenDocumentType(DOCUMENT_SELECT_FILES); //应用根据需求进行文档打开方式的设置
            if( pSelect->Invoke() ) 
            {//各应用根据自己需求获取文档的返回值            
              int selectedDirectoryCount = pFile->GetSelectedDirectoryCount();
              int selectedFileCount = pFile->GetSelectedFileCount();
              TCHAR temp[ MAX_PATH ] = { 0 };
              wsprintf( temp, L"文件%d个, 目录%d个",selectedFileCount, selectedDirectoryCount );
              MzMessageBoxEx( m_hWnd,temp, L"Test" );
              for ( int i = 0; i < selectedDirectoryCount; i++ )
              {
                _tcscpy( file, pFile->GetSelectedDirectoryPath( i ) );
                std::wstring displayText = L"选择的目录为:";
                displayText += file;
                MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                displayText.clear();
              }
              for ( int i = 0; i < selectedFileCount; i++ )
              {
                _tcscpy( file, pFile->GetSelectedFilePath( i ) );
                std::wstring displayText = L"选择的文件为:";
                displayText += file;
                MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
                displayText.clear();
              }
            }
            pSelect->Release();
          }     
          pFile->Release();
        }  
        CoUninitialize();
        ::InvalidateRect( m_hWnd, NULL, FALSE );
        ::UpdateWindow( m_hWnd );
      }
      break;
    case ID_TEST_SAVE:
      {
        IMzSave *pSave = NULL; 
        IFileBrowser *pFile = NULL;                      
        CoInitializeEx(NULL, COINIT_MULTITHREADED );
        if ( SUCCEEDED( CoCreateInstance( CLSID_FileBrowser, NULL,CLSCTX_INPROC_SERVER ,IID_MZ_FileBrowser,(void **)&pFile ) ) )
        {     
          if( SUCCEEDED( pFile->QueryInterface( IID_MZ_Save, (void**)&pSave ) ) )
          {
            pFile->SetParentWnd( m_hWnd );
            pFile->SetOpenDocumentType(DOCUMENT_SAVE_FILES); //应用根据需求进行文档打开方式的设置
            pFile->SetOpenDirectoryPath( L"\\Disk\\EBook" ); 
            if( pSave->Invoke() ) 
            {//提供路径给应用进行保存操作
              TCHAR saveDir[ MAX_PATH ] = { 0 };
              _tcscpy( saveDir, pFile->GetSaveFileDirectory() );   
              std::wstring displayText = L"保存的路径为:";
              displayText += saveDir;
              MzMessageBoxEx( m_hWnd, displayText.c_str(), L"Test" );
              displayText.clear();
            }
            pSave->Release();
          }     
          pFile->Release();
        }
        CoUninitialize();
  
      }
      break;
    }
  }
};

MZ_IMPLEMENT_DYNAMIC(CSample1MainWnd)

// 从 CMzApp 派生的应用程序类
class CSample1App: public CMzApp
{
public:
  // 应用程序的主窗口
  CSample1MainWnd m_MainWnd;

  // 应用程序的初始化
  virtual BOOL Init()
  {
    // 初始化 COM 组件
    CoInitializeEx(0, COINIT_MULTITHREADED);

    // 创建主窗口
    RECT rcWork = MzGetWorkArea();
    m_MainWnd.Create(rcWork.left,rcWork.top,RECT_WIDTH(rcWork),RECT_HEIGHT(rcWork), 0, 0, 0);
    m_MainWnd.Show();

    // 成功则返回TRUE
    return TRUE;
  }
};

// 全局的应用程序对象
CSample1App theApp;


Generated at Tue Feb 9 15:09:56 2010 for Meizu M8 SDK Documentation by  doxygen 1.6.1