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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラー Run-Time Check Failur...
-
オーバーレイみたいな処理がしたい
-
【Windowsアプリ】ファイルのド...
-
ツリーコントロールの開閉アイ...
-
C言語win32api、エディットボッ...
-
WM_CREATE について
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
「Aに対するBの割合」と「Aに対...
-
C言語 プログラム
-
プログラムの実行時に'<'でリダ...
-
DWORDの実際の型は何でしょうか
-
C++にてtemplateで受け取った任...
-
プログラムでの数字につく”f”の...
-
数学 確率変数Xは、X=2またはX...
-
「指定されたキャストは有効で...
-
構文エラー";"が型の前にあり...
-
2÷3などの余りについて
-
fgetsなどのときのstdinのバッ...
-
変数とパラメータとは違うもの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
音量調節
-
return文がない場合の戻り値は...
-
C#のswitch文を簡略化したいの...
-
ゲームとかの解像度変更&全画...
-
エラー Run-Time Check Failur...
-
コンソールアプリケーションの...
-
キャレットの現在位置の表示 (W...
-
エディットボックスの背景の色...
-
COMPORTマルチスレッドで例外発生
-
ツリーコントロールの開閉アイ...
-
C言語win32api、エディットボッ...
-
Win32APIにて、ウィンドウ全体...
-
Win32APIでウィンドウを中央に...
-
エディットコントロール入力時...
-
ダイアログプログラムでEnterキ...
-
不思議な現象が起こるプログラ...
-
Win32のファイルダイアログのサ...
-
C言語のswitch case文で、scanf...
-
WM_CREATE について
-
ボタンのアイコン表示
おすすめ情報