• ベストアンサー

ダイアログ作成での質問

よろしくおねがいします。 テキストファイルの変換ツールを作っています。 exeにテキストファイルをドラッグすると自動で別名の変換ファイルができるというものなんです。 変換ツール自体は実装済みなのですが、追加機能としてダイアログを作りたいのです。 隣あわせでボックスを2つ作り、テキストがドラッグされたら左に変換前のパスが表示され、右に変換後の別名ファイルパスを表示するという風にしたいんです。 こういう場合はリストボックスでできるのでしょうか?それともリストコントロールなど違うもののほうがいいんでしょうか? なにかアドバイスあればよろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

IDE(統合開発環境)のヘルプ > バージョン情報で エディションの確認は出来るとおもいます タイトルの下に『Microsoft Visual Studio 2005』の画像の下側にあると思います VB/C#/C++などが1つのIDEで処理できるならプロ以上です C++などの単独のIDEの場合 C++の新規のプロジェクトでMFC/ATLなどがあるならStandardでしょう ないならば無償版の Express ということになります Win32で処理するなら メインのCPPファイルの冒頭の #include "stdafx.h" の次ぐらいに Drag&Drop用のヘッダーを追加 #include <shellapi.h> WndProc(または WindowProc)という関数が存在するともいます その中に switch( message ) の中の case WM_PAINT: などと同じ階層に case WM_DROPFILES: if ( ::DropQueryFile( (HDROP)wParam, 0, chFileName, 256 ) != 0xFFFFFFFF ) { ::SetWindowText( hEdit1, chFileName ); // 別名を作成するロジックを記述 ::SetWindowText( hEdit2, chCHangedName ); } break; を記述します 同様に case WM_CREATE: のブロックに // Drag and Dropの許可 ::DragAcceptFile( hWnd, TRUE ); break; といった具合でしょう WndProcのローカル変数に //ファイル名を受け取るための変数 TCHAR chFileName[256]; //変更後のファイル名を受け取る変数 TCHAR chChangedName[256]; //用意します テキストボックスのハンドル用の変数をグローバル変数で用意します int APIENTRY _tWinMain(HINSTANCE hInstance, の行の前当たりに HWND hEdit1, hEdit2; WndProcのWM_CREATEのブロック(DragAcceptFileを記述した部分)に hEdit1 = ::CreateWindow( _T("EDIT"), _T(""), WS_CHILD | WS_VISIBLE | WS_BORDER,   0, 0, 256, 32, (HMENU)1024, hWnd, NULL, NULL ); hEdit2 = ::CreateWindow( _T("EDIT"), _T(""), WS_CHILD | WS_VISIBLE | WS_BORDER,   256+8, 0, 256, 32, (HMENU)1024, hWnd, NULL, NULL ); を break; までの間に挿入 といった具合です CreateWindow SetWindowText DragAcceptFile DropQueryFile など APIの詳細については MSDNなどのリファレンスを参照ください

kuni9244
質問者

お礼

細かいアドバイスありがとうございました! ダイアログの設計から何から何まで本当に助かります。 redfox63さんのおかげでメドがつきそうです。 本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ごめんなさい ダイアログでしたね ・・・ ダイアログの設計終わっているのでしょうか ダイアログのプロパティ『Accept File』を『True』にします ダイアログのメイン処理をする DialogBoxやCreateDialogで指定した lpDialogFuncに先の回答の WM_DROPFILEの処理を追加してください WM_INITDIALOG:メッセージで hEdit1 = GetDlgItem( hDlg, IDC_EDIT1 ); hEdit2 = GetDlgItem( hDlg, IDC_EDIT2 ); と処理します WM_CREATE:メッセージの処理はしません

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

開発環境・実行環境・プログラミングスタイルなどの詳細を明示しましょう たとえば VS2005プロフェッショナル WinXP MFCとか VS2005プロフェッショナル WinXP Win32SDKとか VS2005プロフェッショナル WinXP WindowsFormとか Windows系なら WM_DROPFILESメッセージを処理することになるともいますよ

kuni9244
質問者

補足

すいません、正直開発環境などはっきり把握できてないんですが、 Microsoft Visual Studio 2005 でOSはXPです。 あと、アプリケーションのプロジェクトはWin32です。 これ以外の環境などはどう見たらわかるんでしょうか。。。 すいません、まだプログラミングを初めて3ヶ月の新人です。 よろしくおねがいします。

すると、全ての回答が全文表示されます。

関連するQ&A