ホーム » 2010 » 1月 » 17

日別アーカイブ: 2010/01/17

2010年1月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

アーカイブ

ブログ統計情報

  • 99,336 アクセス


ダイアログにドロップ機能の追加

「ダイアログ プロパティ」-「拡張スタイル」タブ内の「ドラッグアンドドロップを許可」にチェック.
「MFC ClassWizard」の「クラス情報」-「詳細設定オプション」の「メッセージフィルタ」を「ウィンドウ」に.
「メッセージマップ」の「メッセージ」内の WM_DROPFILES を追加.


void C???Dlg::OnDropFiles(HDROP hDropInfo) 
{
    CStringArray dropFiles ;
    ::DropFilesToStringArray(hDropInfo,dropFiles) ;
    ...
    CDialog::OnDropFiles(hDropInfo);
}
//   WinMFC.hxx
//*******************************************************************************
// 関数名 :ドロップされたファイル名の取得
// 作成日 :’07/10/19
//*******************************************************************************
BOOL DropFilesToStringArray (HDROP hDropInfo,CStringArray& strAry)
{
    UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ;
    CStringArray dropFiles ;
    for (UINT index=0 ; index<nFiles ; index++) {
         UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ;
              len += 1 ; // 終端の NULL 文字の分を確保
         CString dropFile ;
         ::DragQueryFile(hDropInfo,index,dropFile.GetBuffer(len),len) ;
         dropFile.ReleaseBuffer() ;
         dropFiles.Add(dropFile) ;
         }
    strAry.Copy(dropFiles) ;
    return TRUE ;
    }

2014/06/02 v_tstring DropFilesTo (HDROP hDropInfo) { v_tstring dropFiles ; UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ; for (UINT index=0 ; index<nFiles ; index++) { UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ; len += 1 ; // reserve last '\0' tstring dropFile ; dropFile.resize(len,0) ; ::DragQueryFile(hDropInfo,index,&dropFile[0],len) ; dropFiles.push_back(dropFile.c_str()) ; } return dropFiles ; }
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.