• ベストアンサー

SDIアプリ D&Dで複数のファイルを開く

お世話になります。 Windowsプログラム初心者です。 「猫でも分かるプログラミング」のサイトを参考にSDIアプリケーションを作成しました。(単純なビットマップビュアーだと思っていただいてほぼ間違いありません。) 開きたい画像ファイルをアプリのアイコンにD&Dして開く仕組みも、「猫でも分かる」の256章を真似て組み込みました。 D&Dするファイルが一つだけならうまく開けるのようになったのですが、二つ以上D&Dしたときにすべてのファイルを開く仕組みが分かりません。 具体的には、 ・引数が複数与えられたことを知る方法。 ・引数与えられたときにもう、別ウィンドウを開いてそちらで引数を処理する方法。 おそらくこの二点が分かれば先に進めると思うのですが・・・ どなたか迷える子羊に道を示してください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

猫の256章?どこにドラッグアンドドロップが? >・引数が複数与えられたことを知る方法。 複数のファイル名がスペース区切りでずらずらつながって来るだけです。自分で切り分けてください。 もしくはここ http://win32lab.com/tips/tips3.html >・引数与えられたときにもう、別ウィンドウを開いてそちらで引数を処理する方法。 同一プロセス上で開くか、別プロセスで開くかですかね? 同一プロセスだったら、同じウィンドウをいくつも作ればいいだけ。 別プロセスだったら、切り出したファイル名を引数にして、自分自身のexeを起動してあげるとか。

mrumesuke
質問者

お礼

回答ありがとうございます。 >猫の256章?どこにドラッグアンドドロップが? if (strcmp(lpsCmdLine, "") != 0) { ~ } の部分を参考にしました。 D&Dというよりは単に引数の処理ですが。 教えていただいたサイトを参考に、引数の処理は__argc,__argcvを使うことにしました。 別ウィンドウを開く処理にはShellExecuteを使い、自分自身のexeを起動することにしました。(同じウィンドウを作る方法は分かりませんでした。次回の課題とします。) ありがとうございました。

その他の回答 (1)

  • i-wish
  • ベストアンサー率0% (0/1)
回答No.2

taka_tetsuさんの解説でいけると思いますが少し補足。 開発言語はVCでしょうか?VCでMFC無しで作ってるんでしたら、__argc、__argvを使わなず自力でパスを手に入れたいなら、以下のようになります。 WinMain() のlpCmdLine に、ドロップしたファイルのパス(ディレクトリ付きのファイル名)が半角スペースでつながった1つの文字列になって入ってます。ですので、この文字列を空白を区切りとみなして分割していけば、複数のパスがそれぞれ取り出せます。 ただし、"abc def"とか、名前の途中にスペースがあるファイルやフォルダを含むパスは、のパスの両側に「"」が付いてます。 なので、lpCmdLineをスペースだけを頼りに区切っていくとおかしくなります。"がある場合は、"と"の間を1つのパスとして区切るようにプログラムを考えて下さい。

mrumesuke
質問者

お礼

回答ありがとうございます。 すみません、肝心の開発環境を書き忘れていました。 Borland C++ 5.5.1 for Win32です。 BCC5.5.1では幸いにして__argc,__argvが使えましたので、argv,argcに慣れ親しんだ私としては迷わずこれを使うことにしました。 lpCmdLineの解説ありがとうございました。 今回はlpCmdLineを使わない方向に方針を決めましたが、お二方に教えていただいた知識はいずれ必ず役に立つことは間違いありません。 改めてお二方にお礼申します。 ありがとうございました。

関連するQ&A

専門家に質問してみよう