サブクラス化について
Posted: 2006年3月30日(木) 18:17
対象のウィンドウのメッセージをサブクラス化によって監視しようとしているのですが、どうもうまくいきません。
Dim CallBackhWnd As Long
Dim hTG As Long
'========================================
'----------***新プロシージャ***----------
'========================================
Function WndProc(hWnd As Long,uMsg As Long,wParam As Long,lParam As Long) As Long
'とりあえずメッセージを返す
WndProc=CallWindowProc(CallBackhWnd,hWnd,uMsg,wParam,lParam)
If (uMsg=WM_KEYDOWN) Then
'StaticBoxに"TRUE"と表示
SetWindowText(GetDlgItem(hMainWnd,Static1),"TRUE")
End If
End Function
'============================================
'----------***サブクラス化の開始***----------
'============================================
Sub SubClassSetUp(hWnd As Long)
CallBackhWnd = SetWindowLong(hWnd,GWL_WNDPROC,AddressOf(WndProc))
End Sub
'============================================
'----------***サブクラス化の終了***----------
'============================================
Sub SubClassClose(hWnd As Long)
SetWindowLong(hWnd,GWL_WNDPROC,CallBackhWnd)
End Sub
'=====================================
'-----------***終了ボタン***----------
'=====================================
Sub MainWnd_CB1_Click()
'ボタンを押すとサブクラス化を終了しプログラムを終了
SubClassClose(hTG)
End
End Sub
'========================================
'----------***フォームロード***----------
'========================================
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hTG=FindWindow(NULL,"無題 - ペイント")
if(hTG<>NULL)Then
'ウィンドウハンドルが取得できたらサブクラス化
SubClassSetUp(hTG)
Else
'ウィンドウが見つからなかったら即終了
End
End If
End Sub
上記のソース(イベントプロシージャ部に記述)はサブクラス化のテストで書いたもので、ペイントのウィンドウでキーが押されたときに自分のStaticBoxに文字を表示するという内容です。
しかし、ペイントを起動しキーを押してもメッセージが取れません。
また、サブクラス化するウィンドウのハンドル(hTG)を自分のハンドルに設定すると出来るようなので、サブクラス化自体は成功しているようなのです。
どなたか、私に知識を貸してください。
Dim CallBackhWnd As Long
Dim hTG As Long
'========================================
'----------***新プロシージャ***----------
'========================================
Function WndProc(hWnd As Long,uMsg As Long,wParam As Long,lParam As Long) As Long
'とりあえずメッセージを返す
WndProc=CallWindowProc(CallBackhWnd,hWnd,uMsg,wParam,lParam)
If (uMsg=WM_KEYDOWN) Then
'StaticBoxに"TRUE"と表示
SetWindowText(GetDlgItem(hMainWnd,Static1),"TRUE")
End If
End Function
'============================================
'----------***サブクラス化の開始***----------
'============================================
Sub SubClassSetUp(hWnd As Long)
CallBackhWnd = SetWindowLong(hWnd,GWL_WNDPROC,AddressOf(WndProc))
End Sub
'============================================
'----------***サブクラス化の終了***----------
'============================================
Sub SubClassClose(hWnd As Long)
SetWindowLong(hWnd,GWL_WNDPROC,CallBackhWnd)
End Sub
'=====================================
'-----------***終了ボタン***----------
'=====================================
Sub MainWnd_CB1_Click()
'ボタンを押すとサブクラス化を終了しプログラムを終了
SubClassClose(hTG)
End
End Sub
'========================================
'----------***フォームロード***----------
'========================================
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hTG=FindWindow(NULL,"無題 - ペイント")
if(hTG<>NULL)Then
'ウィンドウハンドルが取得できたらサブクラス化
SubClassSetUp(hTG)
Else
'ウィンドウが見つからなかったら即終了
End
End If
End Sub
上記のソース(イベントプロシージャ部に記述)はサブクラス化のテストで書いたもので、ペイントのウィンドウでキーが押されたときに自分のStaticBoxに文字を表示するという内容です。
しかし、ペイントを起動しキーを押してもメッセージが取れません。
また、サブクラス化するウィンドウのハンドル(hTG)を自分のハンドルに設定すると出来るようなので、サブクラス化自体は成功しているようなのです。
どなたか、私に知識を貸してください。