by 7 » 2006年11月19日(日) 18:32
> 初歩的な質問だと思いますが宜しくお願いします。。
どこをどう判断して初歩的だと判断したんでしょう?初歩的だと思ったのならご自分で実装できるのでは???
※些細な疑問なので無視して下さって構いません
> エディットボックスにファイルをD&Dし、そのファイルサイズを取得して
> エディットボックスにバイト数で表示させたいのですが、どのように書けば宜しいでしょうか?
- 1. エディットボックスがドラッグ&ドロップを受け付けるようにする
- 1. RADツールを使うかDragAcceptFiles()関数を使う
2. エディットボックスでドラッグ&ドロップに対応する- 1. エディットボックスをサブクラス化する
- 1. WM_DROPFILESを受信したときの処理を定義する
- 1. ドロップされたファイルのサイズを取得する
2. エディットボックスにファイルのサイズを出力する
こんな感じでしょうか。
コードに直すとこんな感じ。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim hEdit As HWND
Dim OldEditProc As WNDPROC
Function NewEditProc(ByVal hWnd As HWND,ByVal dwMsg As DWord,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As LRESULT
Select Case dwMsg
Case WM_DROPFILES
Dim lpszName[MAX_PATH] As Byte
Dim hFile As HANDLE
DragQueryFile(wParam As HDROP,0,lpszName,MAX_PATH)
hFile=CreateFile(
lpszName,0,
FILE_SHARE_DELETE Or FILE_SHARE_READ Or FILE_SHARE_WRITE,
ByVal NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
If (hFile<>NULL) And (hFile<>INVALID_HANDLE_VALUE) Then
SetWindowText(hEdit,Str$(GetFileSize(hFile,NULL)))
CloseHandle(hFile)
Else
SetWindowText(hEdit,"ファイルオープンに失敗しました。")
End If
DragFinish(wParam As HDROP)
End Select
Return CallWindowProc(OldEditProc,hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hEdit=GetDlgItem(hMainWnd,EditBox1)
OldEditProc=SetWindowLong(hEdit,GWL_WNDPROC,AddressOf(NewEditProc)) As WNDPROC
End Sub
Sub MainWnd_Destroy()
SetWindowLong(hEdit,GWL_WNDPROC,OldEditProc As LONG_PTR)
End Sub
限定的な機能なので改良の余地があります。
分からないことや疑問があるなら続けてどうぞ。答えられるか分かりませんけど...。
> 初歩的な質問だと思いますが宜しくお願いします。。
どこをどう判断して初歩的だと判断したんでしょう?初歩的だと思ったのならご自分で実装できるのでは???
※些細な疑問なので無視して下さって構いません
> エディットボックスにファイルをD&Dし、そのファイルサイズを取得して
> エディットボックスにバイト数で表示させたいのですが、どのように書けば宜しいでしょうか?
[list]1. エディットボックスがドラッグ&ドロップを受け付けるようにする[list]1. RADツールを使うかDragAcceptFiles()関数を使う[/list]2. エディットボックスでドラッグ&ドロップに対応する[list]1. エディットボックスをサブクラス化する[list]1. [b]WM_DROPFILES[/b]を受信したときの処理を定義する[list]1. ドロップされたファイルのサイズを取得する
2. エディットボックスにファイルのサイズを出力する[/list][/list][/list][/list]こんな感じでしょうか。
[hide=コードに直すとこんな感じ。][code]Dim hEdit As HWND
Dim OldEditProc As WNDPROC
Function NewEditProc(ByVal hWnd As HWND,ByVal dwMsg As DWord,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As LRESULT
Select Case dwMsg
Case WM_DROPFILES
Dim lpszName[MAX_PATH] As Byte
Dim hFile As HANDLE
DragQueryFile(wParam As HDROP,0,lpszName,MAX_PATH)
hFile=CreateFile(
lpszName,0,
FILE_SHARE_DELETE Or FILE_SHARE_READ Or FILE_SHARE_WRITE,
ByVal NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
If (hFile<>NULL) And (hFile<>INVALID_HANDLE_VALUE) Then
SetWindowText(hEdit,Str$(GetFileSize(hFile,NULL)))
CloseHandle(hFile)
Else
SetWindowText(hEdit,"ファイルオープンに失敗しました。")
End If
DragFinish(wParam As HDROP)
End Select
Return CallWindowProc(OldEditProc,hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hEdit=GetDlgItem(hMainWnd,EditBox1)
OldEditProc=SetWindowLong(hEdit,GWL_WNDPROC,AddressOf(NewEditProc)) As WNDPROC
End Sub
Sub MainWnd_Destroy()
SetWindowLong(hEdit,GWL_WNDPROC,OldEditProc As LONG_PTR)
End Sub
[/code][/hide]限定的な機能なので改良の余地があります。
分からないことや疑問があるなら続けてどうぞ。答えられるか分かりませんけど...。