C言語でのWindowsアプリの勉強をしています。(始めたばかりです)
***.exeにファイルをD&Dした際、
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
上記の"lpCmdLine"にファイルパスが入るのはわかったのですが、別のファイルパスの取得方法として、
1.***.exeを実行
2.ウィンドウ表示
3.ウィンドウ内にファイルをD&D
4.ファイルパスを取得
の方法がわかりません。
DragAcceptFiles()や、DragQueryFile()を使うと思うのですが、WinAPIの使い方がいまいち良くわかっていない状況です。
自分で勉強するべきというのは承知の上でのお願いしたいのですが、どなたか出来ればサンプルソースなど教えて頂けるとうれしいです。
環境はテキストエディタでソースを作成→Borland C++ Compiler 5.5でコンパイルしています。
No.2ベストアンサー
- 回答日時:
こんばんは。
ウィンドウの拡張スタイルにWS_EX_ACCEPTFILESを指定して、WM_DROPFILESで受け取ります。以下参考程度に。
TCHAR szTitle[MAX_PATH] = "drag and drop";
TCHAR szWindowClass[MAX_PATH] = "drag and drop";
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch( message )
{
//ココに飛び込んでくる
case WM_DROPFILES:
{
HDROP hDrop = (HDROP)wParam;
TCHAR tchName[MAX_PATH];
//tchNameにドロップされたファイル名が入っている
::DragQueryFile(hDrop, 0, tchName, sizeof(tchName));
//ココでファイルを開く
//終了
::DragFinish(hDrop);
}
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
ATOM MyRegisterClass( HINSTANCE hInstance )
{
WNDCLASSEX wcex = {sizeof(wcex)};
wcex.style= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc= (WNDPROC)WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance= hInstance;
wcex.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_DDTEAD);
wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName= (LPCSTR)IDC_DDTEAD;
wcex.lpszClassName= szWindowClass;
wcex.hIconSm= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx( &wcex );
}
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
HWND hWnd = ::CreateWindowEx(WS_EX_ACCEPTFILES, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if( !hWnd )
{
return FALSE;
}
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
MSG msg;
MyRegisterClass( hInstance );
if(!InitInstance( hInstance, nCmdShow ) )
{
return FALSE;
}
while(::GetMessage(&msg, NULL, 0, 0) )
{
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
return msg.wParam;
}
ご丁寧にソースコードを書いて頂きありがとうございました!
何とかドロップしたファイル名を取得する事が出来ました!
また質問させていただく機会があると思うので、その時はまたよろしくお願いします。
No.1
- 回答日時:
「猫でもわかるプログラミング」のコードです。
以下のインクルードが必要です
//インクルード
#include <shellapi.h>
#pragma comment(lib, "shell32.lib")//ライブラリ追加
後は参考URLでどうでしょうか?
参考URL:http://www.kumei.ne.jp/c_lang/sdk2/sdk_105.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- フリーソフト イーファンビューでwebpファイルが開けません 1 2022/07/12 07:07
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- ソフトウェア フォルダ内の全サブフォルダ内のファイルパスをサブフォルダ毎に行を分けてリスト化したい 1 2022/11/13 10:27
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エディットコントロール入力時...
-
プログラミングでエラーが出ま...
-
エディットボックスの背景の色...
-
エラー Run-Time Check Failur...
-
音量調節
-
Win32APIでウィンドウを中央に...
-
1~1000,1001~2000の間に素数が...
-
c言語のプログラミングでキーボ...
-
オーバーレイみたいな処理がしたい
-
「指定されたキャストは有効で...
-
DWORDの実際の型は何でしょうか
-
プログラムでの数字につく”f”の...
-
プログラミング初心者です。 Py...
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
20'(角度)の計算がわかりま...
-
エクセルで可視セルにのみ値貼...
-
「Aに対するBの割合」と「Aに対...
-
Enterキーを押されたら次の処理...
-
ある商品のロス率を5%見込み、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
音量調節
-
エラー Run-Time Check Failur...
-
Win32APIでウィンドウを中央に...
-
return文がない場合の戻り値は...
-
1~1000,1001~2000の間に素数が...
-
ダイアログプログラムでEnterキ...
-
ボタンの色(WINAPI)
-
C言語win32api、エディットボッ...
-
MessageBoxについて
-
プログラミングでエラーが出ま...
-
キャレットの現在位置の表示 (W...
-
エディットボックスの背景の色...
-
エディットコントロール入力時...
-
オーバーレイみたいな処理がしたい
-
ウィンドウのサイズ変更について
-
C#のswitch文を簡略化したいの...
-
猫でもわかるWindowsプログラミ...
-
WM_INITDIALOGのフック
-
MoveToExとLineToについて
-
【Windowsアプリ】ファイルのド...
おすすめ情報