あるウィンドウハンドルにファイルをドロップするC++サンプルがあるのですが、
それをActiveBasicで行いたいと考えています。
どのように書き直せばよいのでしょうか?
よろしくお願いします。
--------C++のサンプル
const char *FileNameList[]={
"c:\\autoexec.bat",
"c:\\config.sys",
NULL,
};
// ファイル名の記述に必要なメモリ量を計算
int size=0;
for(int i=0;FileNameList;i++)
size+=strlen(FileNameList)+1;
size++;
HANDLE hMem=GlobalAlloc(GMEM_ZEROINIT,sizeof(DROPFILES)+size);
char *p=(char *)GlobalLock(hMem);
DROPFILES *DropFiles=(DROPFILES *)p;
DropFiles->pFiles=sizeof(*DropFiles);
DropFiles->pt.x=10;
DropFiles->pt.y=10;
DropFiles->fNC=1;
DropFiles->fWide=0;
p+=sizeof(*DropFiles);
for(int i=0;FileNameList;i++)
strcpy(p,FileNameList);
p+=strlen(p)+1;
}
*p='\0';
GlobalUnlock(hMem);
::PostMessage(hWnd,WM_DROPFILES,(WPARAM)hMem,0);
----------------------
ドロップファイルを行いたい
Re: ドロップファイルを行いたい
> あるウィンドウハンドルにファイルをドロップするC++サンプルがあるのですが、
> それをActiveBasicで行いたいと考えています。
> どのように書き直せばよいのでしょうか?
> よろしくお願いします。
個人的に思ってることですが、VBから移植するよりC++から移植する方が簡単です。ライブラリとか使われてるコードだとC++環境が無いので訳分かりませんが...。
こんな感じではないでしょうか?
> それをActiveBasicで行いたいと考えています。
> どのように書き直せばよいのでしょうか?
> よろしくお願いします。
個人的に思ってることですが、VBから移植するよりC++から移植する方が簡単です。ライブラリとか使われてるコードだとC++環境が無いので訳分かりませんが...。
[ここをクリックすると内容が表示されます]
コード: 全て選択
' DROPFILES構造体の定義
Type DROPFILES
pFiles As DWord
pt As POINTAPI
fNC As BOOL
fWide As BOOL
End Type
Dim FileNameList[2]=["c:\autoexec.bat","c:\config.sys",NULL] As LPCSTR
' コマンドボタン1が押された時にドロップする
Sub MainWnd_CommandButton1_Click()
Dim size=0 As Long
Dim i As Long
Dim hMem As HANDLE
Dim p As LPSTR
Dim DropFiles As *DROPFILES
' ファイル名の記述に必要なメモリ量を計算
For i=0 To FileNameList
size+=lstrlen(FileNameList)+1
size++
Next
hMem=GlobalAlloc(GMEM_ZEROINIT,SizeOf(DROPFILES)+size)
p=GlobalLock(hMem)
DropFiles=p
DropFiles->pFiles=SizeOf(DROPFILES) ' ここ怪しい
DropFiles->pt.x=10
DropFiles->pt.y=10
DropFiles->fNC=1
DropFiles->fWide=0
p+=SizeOf(DROPFILES)
For i=0 To FileNameList
lstrcpy(p,FileNameList)
p+=lstrlen(p)+1
Next
p=Ex"\0"
GlobalUnlock(hMem)
' テストの為、自分自身にドロップしてみる
PostMessage(hMainWnd,WM_DROPFILES,hMem As WPARAM,0)
End Sub
' ファイルがドロップされた時にファイルの数を取得
Sub MainWnd_DropFiles(hDrop As HDROP)
Dim i As Long
' ファイルが二つドロップされているようなので成功
i=DragQueryFile(hDrop,-1,NULL,NULL)
Debug
End Sub
こんな感じではないでしょうか?