ドロップファイルを行いたい

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
TAKO(AB初心者)

ドロップファイルを行いたい

#1 投稿記事 by TAKO(AB初心者) »

あるウィンドウハンドルにファイルをドロップする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);
----------------------
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ドロップファイルを行いたい

#2 投稿記事 by 7 »

> あるウィンドウハンドルにファイルをドロップするC++サンプルがあるのですが、
> それをActiveBasicで行いたいと考えています。
> どのように書き直せばよいのでしょうか?
> よろしくお願いします。
個人的に思ってることですが、VBから移植するよりC++から移植する方が簡単です。ライブラリとか使われてるコードだとC++環境が無いので訳分かりませんが...。
こんな感じではないでしょうか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

基のC++コードからそうなのですが,ここでGlobalAllocにGMEM_ZEROINITだけを指定しているのは良くないです。MEM_MOVEABLEを併せて指定するのが正しいです(少しくらい間違っていても動いてしまうのがWindowsの凄いところですが)。

そして,このコードでは確保したメモリの全てに書き込みを行うため,GMEM_ZEROINITは不要で,結局MEM_MOVEABLEだけを指定すればよいです。

ちなみに,*p='\0'に当たるのはSetByte(p, 0)で,size++はForの外で構いません。
返信する