Dim DefEditProc As VoidPtr
Function LimitedEditProc(hWnd As HWND, message As DWORD, wParam As WPARAM, lParam As LPARAM) As DWORD
Dim LimitChar As String
'OK LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
'NG LimitChar=" !#$%&'()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
If InStr(1, LimitChar, Chr$(wParam As Byte)) Then
LimitedEditProc=0
Exit Function
End If
LimitedEditProc=CallWindowProc(DefEditProc , hWnd, message, wParam, lParam)
End Function
Sub MainWnd_Destroy()
SetWindowLong(GetDlgItem(hMainWnd, EditBox1), GWL_WNDPROC, DefEditProc As Long)
---------省略----------
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
DefEditProc=SetWindowLong(GetDlgItem(hMainWnd, EditBox1), GWL_WNDPROC, AddressOf(LimitedEditProc) As Long) As VoidPtr
End Sub
2について
TAKOさんのPCはWindows 7(32Bit/64Bit)ですか?
私のPCはWindows 7(32Bit)です。
Windows XPだと問題なくDebugモードにて起動できました。
Windows 7だとなぜかDebugモードにすると異常終了することがあります。
Windows 8.1/10についてはわかりませんが。
原因がわからないので私はあきらめています。
Function LimitedEditProc(hWnd As HWND, message As DWORD, wParam As WPARAM, lParam As LPARAM) As DWORD
Dim LimitChar As String
'OK LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
'NG LimitChar=" !#$%&'()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
LimitChar=" !#$&()*+,/<=>?@[\]^_`{|}~"+Chr$(&H22)
if message = WM_CHAR then
If InStr(1, LimitChar, Chr$(wParam As Byte)) Then
LimitedEditProc=0
Exit Function
End If
End If
LimitedEditProc=CallWindowProc(DefEditProc , hWnd, message, wParam, lParam)
End Function