デスクトップ上のデータファイルアイコンを
実行ファイルにD&Dして起動し、起動したプログラムから
データファイルのフルパスを得たいと思っています。

 VisualC++6.0を使用して、ダイアナログベースで
作成しています。DragAcceptFiles、OnDropFiles
等を使うと思うのですが、使い方が分かりません。

 初心者ですがよろしくお願いします。

A 回答 (3件)

ダイアログベースのアプリケーションならCWinAppのクラスのInitInstance()内に


AfxMessageBox(theApp.m_lpCmdLine);
を加えてビルドしてEXEを作成してください。
で、そのEXEのアイコンにファイルのアイコンをドロップしてみてください。
メッセージボックスにファイル名が表示されるはずです。
    • good
    • 0
この回答へのお礼

 早速作ってみたところ、見事に表示されました。
どうもありがとうございます。

 これから、C++を勉強しまして、レベルを上げてから
質問したいと思います。

お礼日時:2001/06/13 04:27

EXEのアイコンにファイルのアイコンをD&Dするんでいいんでしょうか?


もしそうなら、

「theApp.m_lpCmdLine」からコマンドライン引数でドロップしたファイル名が取れます。
(theAppは、CWinApp)

質問を取り違えていたらすんません。

この回答への補足

 初歩的な質問ですいません。
コマンドライン引数とはint main(int argc,char *argv[])
このようなメイン関数のことでしょうか?

もしそうでしたら、ダイアログベースででのメイン関数への
記述方法を教えて欲しいのですが・・・。

よろしくお願いします。

補足日時:2001/06/08 20:15
    • good
    • 0

 「猫でもわかるプログラミング」という有名なサイトに載っています。



 ただしこれはSDKベース(自分でメッセージ(イベント)を振り分ける)なので、その点は意識してください。

 たとえばOnDropFiles()に相当する処理は、この例でのswitch文の“case WM_DROPFILES:”以下に相当します。

参考URL:http://users-web1.iac.ne.jp/~yasutaka/c_lang/sdk …

この回答への補足

 少ししか、見ていないのですが、自分に最適な
サイトを教えていただきありがとうございます。

 まだ、質問内容自体は、解決してないのですが、
このサイトを、根気よく見ていけば、時が解決して
くれそうな気がします。

補足日時:2001/06/08 20:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCImageクラスをVisualC++6.0で使いたいのですが

CImageクラスを使うには atlimage.h をインクルードする必要がありますが、atlimage.h がオープンできないというエラーが出ます。VisualC++6.0だと使えないのでしょうか。
.NETでは無事コンパイルできました。しかし.NETが入っているのは会社のパソコンなので、できれば自宅の6.0でやりたいです。

6.0でCImageクラスを使う方法はないでしょうか?
もしくは、他にPNG画像の読み込み・表示ができるクラスはないでしょうか?
分かる方、どうか教えてください。

Aベストアンサー

VC.NET2002以降をお持ちで MFCのソースがあるなら

VCのインストールフォルダーの下の
atlmfc\include\atlimage.hやatlmfc\src\atls\atlimage.cpp,atlimage2.cppなどを参考に移植しましょう

CImageクラスは GDI+の単なるラッパーですよ
GDIPlusStartupやReleaseGDIPlusをオブジェクトの構築・破棄で呼び出しながら GDI+のメンバーをMFCクラスのようにしてあるだけです
マルチスレッドでも安全に呼び出せるような仕掛けがしてはありますが・・・

VC6.0付属のMSDNの英語版解説の『Graphics and Mulimedia』の下の『GDI+』を参照してみましょう
なお VC6のインストールCDなどは結構古めのPlatformSDKなので
『Windows Server 2003 SDK』などをインストールしたほうがいいでしょう
GDIPLUS.Hはインクリュードパスに無かったりします

PNGを扱えるDLLなら vectorあたりで検索すれば見つかると思いますよ
Webで『PNG DLL C/C++』などをキーワードに検索してもそこそこの情報は取得出来そうですよ
ソースつきのライブラリーなんかもありそうです

VC.NET2002以降をお持ちで MFCのソースがあるなら

VCのインストールフォルダーの下の
atlmfc\include\atlimage.hやatlmfc\src\atls\atlimage.cpp,atlimage2.cppなどを参考に移植しましょう

CImageクラスは GDI+の単なるラッパーですよ
GDIPlusStartupやReleaseGDIPlusをオブジェクトの構築・破棄で呼び出しながら GDI+のメンバーをMFCクラスのようにしてあるだけです
マルチスレッドでも安全に呼び出せるような仕掛けがしてはありますが・・・

VC6.0付属のMSDNの英語版解説の『Graphics and Mulimedia...続きを読む

QVisualC++6.0にて、コールスタックを見てもどこから来たかわからない

VisualC++6.0を使用しています。ほとんどわからないのに、都合で修正を任されています。調べながら、少~しずつなんとか進んでいますが、どうしても進めなくなりました。

繰り返し呼び出されているプロシージャ(?)があるのですが、そこの先頭でブレークして、コールスタックを見ても、呼び出し元のほうが、わけのわからない数字になっていて、プロシージャ名ではありませんでした。そこに飛んでみると、アセンブラのような処理が書いてあるだけで、さっぱりちんぷんかんぷんです。。。

このプロシージャを繰り返させている大元を探し出したいのです。

初心者で、質問の意味もわかりにくく、また、答えも書きにくいかもしれませんが。。。なにかアドバイスがありましたら、ご指導ください。m(__)m
よろしくお願いします。

Aベストアンサー

具体的なプロシージャ名を提示しては?


例えば、ダイアログに「Hello,World!」を表示するプログラムなんか、
main(){MsgBox("Hello,World!\n");}
のような感じだと思いますが、表示されるダイアログの位置、右上の×ボタンの表示処理とかの処理って、特に何も書かなくてもやってくれます。
そういう処理部分が、

> わけのわからない数字になっていて、
> アセンブラのような処理が書いてあるだけで、

です。

--
そういう場合での呼び出しを避けるには、適度に実行開始して適当な所で
[デバッグ]-[ブレーク]
ブレークポイントを設定して、
[デバッグ]-[実行]
とか。

もっともNo.1さんの指摘のようなマウスが動いた際に呼び出されるような箇所の場合、上のデバッグ操作も影響を与えてしまうので、PC2台でリモートデバッグとかが必要になります。

QMicrosoft VisualC++6.0

こんばんは
質問よろしいでしょうか?
Microsoft VisualC++6.0を使ってプログラムを作っているのですがコンパイルすると実行ファイルができます。そのとき一般に公開するためダウンロードできるようにしようと思い圧縮したのですが、たしかVisualC++には実行ファイルを配布用にファイルサイズを軽くできたと友人から聞いたのですがやり方がわかりません。どなたかご教授お願いします。自分なりに探したのですがわからなくて困っております。よろしくお願いします。

Aベストアンサー

多分これのことじゃないかと。
http://homepage1.nifty.com/kazubon/progdoc/tclock/nodeflib.html

知識として知っておいてもいいかもしれませんが、現実の場面でこれを使わなければならないほど切迫することは
考えられませんよね(^^;
C++で作っている場合、newやdeleteが使えないだけで結構大変でしょうし。

参考URL:http://homepage1.nifty.com/kazubon/progdoc/tclock/nodeflib.html

QVisualC++ 6.0 と2005の違い

VisualC++ 6.0を使用してプログラミングをすることになったのですが、 2005との違いはなにかあるのでしょうか?
現在発売されている書籍のわかりやすそうなのが、2005ばかりなので…
VC++2005で説明された書籍で学んでVC++6.0を使用しても大丈夫でしょうか?

Aベストアンサー

VC++6.0でWindowsアプリケーションを作成するのに必要な知識
1) C++
2) Windowsメッセージシステム
 所謂イベントドリブン型のプログラムの知識
 大部分はウィザードで済むので細かく覚える必要な無いですが
 (割と頻繁に)手で修正する必要が出てくるので修正できる程度の知識は必要
3) リソースエディタの使い方
4) MFC
 スタンダードなコントロールについてはMSDNをフルセットでインストールしておけば必要なときに確認でも何とかなる。
5) Doc-Viewアーキティクチャ
 アプリケーションフレームの中に複数のWindowが開くようなタイプ(Excelみたいな)のプログラムを作る場合には必須
 ダイアログ型やWindowが一個しか開かないアプリケーションであればDoc-Viewは使わない選択も出来ます。

VC++6.0と2005の大きな違いは4)のフレームワークがMFCかCLIかと言うことです。
2005でもMFC使えるのですが入門書の多くはCLIになっているようです。
VC++6.0の参考書を探した方が幸せになれると思います。

純粋なC++プログラマがVC++でWindowsアプリケーションを作れるようになるまでには結構覚えることが多いです。

VC++6.0でWindowsアプリケーションを作成するのに必要な知識
1) C++
2) Windowsメッセージシステム
 所謂イベントドリブン型のプログラムの知識
 大部分はウィザードで済むので細かく覚える必要な無いですが
 (割と頻繁に)手で修正する必要が出てくるので修正できる程度の知識は必要
3) リソースエディタの使い方
4) MFC
 スタンダードなコントロールについてはMSDNをフルセットでインストールしておけば必要なときに確認でも何とかなる。
5) Doc-Viewアーキティクチャ
 アプリケーションフレーム...続きを読む

QVisualC++6.0でウィンドウズをシャットダウンするプログラム

環境VC++6.0
OS:ウィンドウズXP

でウィンドウズをシャットダウンするプログラムを考えています。
現在
ExitWindowsEx(EWX_FORCE, NULL);
と書いて実行しましたところ
ログオフまでできました。
マニュアルなどには上記のコードは有無を言わさずウィンドウズをシャットダウンするものだと書かれてあったのですが、ログオフまでしかできませんでした。

どなたか、ウィンドウズをシャットダウンするプログラムを教えていただけないでしょうか?
よろしくお願いいたします。

Aベストアンサー

#1です。
ソースコードのサンプルです。

void Shutdown(void)
{
  OSVERSIONINFO WinVersion;
  HANDLE hProc,hTkn;
  TOKEN_PRIVILEGES TokenP;
  WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&WinVersion);
  if (WinVersion.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) {
    hProc = GetCurrentProcess();
    if(OpenProcessToken(hProc,TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hTkn) != FALSE) {
      if(LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&TokenP.Privileges[0].Luid) != FALSE) {
        TokenP.PrivilegeCount = 1;
        TokenP.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hTkn,FALSE,&TokenP,0,NULL,0);
      }
    }
  }
  ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0);
}

かなり手抜きです。例えば、
・特権が取れなかった場合もExitWindowsExを呼んでしまうので、シャットダウンせずログオフしてしまう。
・Windows95/98/Meじゃないなら特権を取ろうとするのでwindows3.1でも特権を取ろうとしてしまう
など。

うまく手抜きを修正して使用して下さい。

#1です。
ソースコードのサンプルです。

void Shutdown(void)
{
  OSVERSIONINFO WinVersion;
  HANDLE hProc,hTkn;
  TOKEN_PRIVILEGES TokenP;
  WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&WinVersion);
  if (WinVersion.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) {
    hProc = GetCurrentProcess();
    if(OpenProcessToken(hProc,TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hTkn) != FALSE) {
      if(LookupPrivilegeValue(N...続きを読む


人気Q&Aランキング

おすすめ情報