by Taro » 2007年11月15日(木) 16:38
EditBox1を消しButton1を貼り付けてドラッグ&ドロップ許可し下記のコードで動きました。
(D&Dを表現する手段が無かったので、Static1に表示してみました。)
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim DefEditProc As Long
Function DropEditProc(hWnd As HWND, message As DWORD, wParam As DWORD, lParam As DWORD) As DWORD
Select Case message
Case WM_DROPFILES
Dim hDrop As HDROP
Dim FileName[MAX_PATH] As Byte
hDrop=wParam As HDROP
'ドロップされたファイル名を取得
DragQueryFile(hDrop, 0, FileName, MAX_PATH)
SetWindowText(GetDlgItem(hMainWnd,Static1), FileName)
DragFinish(hDrop)
DropEditProc=0
Exit Function
End Select
DropEditProc=CallWindowProc(DefEditProc As VoidPtr, hWnd, message, wParam, lParam)
End Function
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
SetWindowLong(GetDlgItem(hMainWnd, CommandButton1), GWL_WNDPROC, DefEditProc)
TextboxDrop_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
DefEditProc=SetWindowLong(GetDlgItem(hMainWnd, CommandButton1), GWL_WNDPROC, AddressOf(DropEditProc) As Long)
End Sub
ありがとうございました。
EditBox1を消しButton1を貼り付けてドラッグ&ドロップ許可し下記のコードで動きました。
(D&Dを表現する手段が無かったので、Static1に表示してみました。)
[hide][code]' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim DefEditProc As Long
Function DropEditProc(hWnd As HWND, message As DWORD, wParam As DWORD, lParam As DWORD) As DWORD
Select Case message
Case WM_DROPFILES
Dim hDrop As HDROP
Dim FileName[MAX_PATH] As Byte
hDrop=wParam As HDROP
'ドロップされたファイル名を取得
DragQueryFile(hDrop, 0, FileName, MAX_PATH)
SetWindowText(GetDlgItem(hMainWnd,Static1), FileName)
DragFinish(hDrop)
DropEditProc=0
Exit Function
End Select
DropEditProc=CallWindowProc(DefEditProc As VoidPtr, hWnd, message, wParam, lParam)
End Function
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
SetWindowLong(GetDlgItem(hMainWnd, CommandButton1), GWL_WNDPROC, DefEditProc)
TextboxDrop_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
DefEditProc=SetWindowLong(GetDlgItem(hMainWnd, CommandButton1), GWL_WNDPROC, AddressOf(DropEditProc) As Long)
End Sub
[/code][/hide]
ありがとうございました。