ページ 11

ファイルの取得?

Posted: 2009年11月15日(日) 03:27
by くりあ
Microsoft Visual C++ 2008 Express Editionでプログラミングをしているのですが、
良くファイルを扱うソフトなどで、開くファイルを指定するもの?
ファイル選択ダイアログ?というのですか?あれをやってみようかと思ったのですが、
どうすればいいのでしょうか?
それと、できたら、exeファイルにファイルをドラッグ&ドロップすると、
開けるようにするやり方も知りたいのですが、どうしたらいいのでしょうか?

お願いします。

Re:ファイルの取得?

Posted: 2009年11月15日(日) 14:25
by Justy

> ファイル選択ダイアログ

 OPENFILENAM構造体に情報をセットして、GetOpenFileNameでダイアログを
開くことができます。

ファイル選択
http://wisdom.sakura.ne.jp/system/winap ... mmon6.html



>ドラッグ&ドロップ

 ファイルを exeに Drag&Dropしたのなら、
mainか WinMain関数の引数にファイルへのパスが入ってきますので、
それを調べればいいかと。

Re:ファイルの取得?

Posted: 2009年11月15日(日) 20:24
by くりあ
Justyさんお答えありがとうございます。

>ファイルを exeに Drag&Dropしたのなら、
mainか WinMain関数の引数にファイルへのパスが入ってきますので、
それを調べればいいかと。

すいません。プログラミングを始めたばかりで良く分からないのですが……
どのように調べればいいのでしょうか?

Re:ファイルの取得?

Posted: 2009年11月16日(月) 00:08
by Justy
 コンソールアプリなのか Windowsアプリなのか不明なので、
とりあずコンソールだとします。

 まず、コマンドライン引数というものがあります。

C言語編 第45章 引数のあるmain関数
http://www.geocities.jp/ky_webid/c/045.html

コマンドライン引数
http://www9.plala.or.jp/sgwr-t/c/sec11-4.html


 main関数の場合、int型と char *の配列の2つを引数にとることができる
のですが、ドラッグ&ドロップしたファイル・フォルダ名は
ここに格納されます。


 試しに以下のコードをビルドして出来た実行ファイルに対して、
何かファイルやフォルダをドラッグ&ドロップしてみて下さい。

[color=#d0d0ff" face="monospace]
#include <windows.h>
#include <stdio.h>

int main(int argc , char * argv[/url] )
{
int i;
for(i=1; i<argc; ++i)
{
printf("arg[%d] = %s\n", i, argv);
MessageBoxA(NULL, argv , NULL , MB_OK);
}
return 0;
}
[/color]

 ドラッグ&ドロップしたファイル名が表示されるはずです。


 main関数ではなく、WinMainからプログラムが始まっている場合は
第三引数の PSTRの中にファイルパスが入っています。

 ただ、こちらは複数のファイル・フォルダをドラッグ&ドロップすると
文字列が main関数の時のように別々になっておらず、1つの文字列の中に
複数のファイル・フォルダパスが格納されているので、自分で分解する必要が
あるので、少々面倒です

Re:ファイルの取得?

Posted: 2009年11月16日(月) 07:08
by くりあ
何となくわかりました。ありがとうございます。
もっと勉強して使えるようにしたいです。