Code:
'------------------------------------------------------------------------------ ' reference... http://msdn2.microsoft.com/en-us/library/bb773183(VS.85).aspx ' Excerpt: ' "Subclassing Controls Using ComCtl32.dll version 6 ' ComCtl32.dll version 6 supplied with Windows XP contains four functions ' that make creating subclasses easier and eliminate the disadvantages previously ' discussed. The new functions encapsulate the management involved with multiple ' sets of reference data, therefore the developer can focus on programming ' features and not on managing subclasses." '------------------------------------------------------------------------------ #COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" #INCLUDE "COMMCTRL.INC" #INCLUDE "PBForms.INC" %IDD_DIALOG1 = 101 %IDC_TEXTBOX1 = 1001 %IDC_BUTTON1 = 1002 DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG '---Note: initialize InitCommonControlsEx() to use these... DECLARE FUNCTION SetWindowSubclass LIB "COMCTL32" ALIAS "SetWindowSubclass" _ ( _ BYVAL hWnd AS DWORD, _ BYVAL pfnSubclass AS DWORD, _ BYVAL uIdSubclass AS LONG, _ BYVAL dwRefData AS LONG _ ) AS DWORD DECLARE FUNCTION GetWindowSubclass LIB "COMCTL32" ALIAS "GetWindowSubclass"_ ( _ BYVAL hWnd AS DWORD, _ BYVAL pfnSubclass AS DWORD, _ BYVAL uIdSubclass AS LONG, _ BYVAL pdwRefData AS DWORD PTR _ ) AS DWORD DECLARE FUNCTION RemoveWindowSubclass LIB "COMCTL32" ALIAS "RemoveWindowSubclass"_ ( _ BYVAL hWnd AS DWORD, _ BYVAL pfnSubclass AS DWORD PTR, _ BYVAL uIdSubclass AS DWORD _ ) AS DWORD DECLARE FUNCTION DefSubclassProc LIB "COMCTL32" ALIAS "DefSubclassProc"_ ( _ BYVAL hWnd AS DWORD, _ BYVAL uMsg AS LONG, _ BYVAL WPARAM AS LONG, _ BYVAL LPARAM AS LONG _ ) AS DWORD '--- '------------------------------------------------------------------------------ ' All this subclass procedure does is remove the DLGC_HASSETSEL flag ' from the return value of the WM_GETDLGCODE message. ' credits: Original posted by oldnewthing, adapted to work with PBWIN804 '------------------------------------------------------------------------------ FUNCTION RemoveHasSetSelSubclassProc _ ( _ BYVAL hWnd AS DWORD, _ BYVAL uiMsg AS LONG, _ BYVAL wParam AS LONG, _ BYVAL lParam AS LONG, _ BYVAL uIdSubclass AS DWORD, _ BYVAL dwRefData AS DWORD PTR _ ) AS LONG SELECT CASE (uiMsg) CASE %WM_NCDESTROY CALL RemoveWindowSubclass(hwnd, CODEPTR(RemoveHasSetSelSubclassProc),uIdSubclass) CASE %WM_GETDLGCODE FUNCTION = DefSubclassProc(hwnd, uiMsg, wParam, lParam) AND(NOT(%DLGC_HASSETSEL)) EXIT FUNCTION END SELECT FUNCTION = DefSubclassProc(hwnd, uiMsg, wParam, lParam) 'reference... http://blogs.msdn.com/oldnewthing/archive/2003/11/11/55653.aspx ' Excerpt: ' "Preventing edit control text from being autoselected in a dialog box ' By default, when the user TABs to an edit control in a dialog box, ' the entire contents of the edit control are autoselected. ' This occurs because the edit control responds with the DLGC_HASSETSEL ' flag in response to the WM_GETDLGCODE message. ' To prevent it from happening, remove that flag." END FUNCTION '------------------------------------------------------------------------------ ' '------------------------------------------------------------------------------ FUNCTION PBMAIN() PBFormsInitComCtls( %ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR %ICC_INTERNET_CLASSES ) ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ ' '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() STATIC hEdit AS DWORD SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG hEdit = GetDlgItem(CBHNDL,%IDC_TEXTBOX1) CALL SetWindowSubclass(hEdit,CODEPTR(RemoveHasSetSelSubclassProc), 0, 0) CASE %WM_COMMAND SELECT CASE AS LONG CBCTL CASE %IDCANCEL DIALOG END CBHNDL FUNCTION = 1 END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ ' '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG LOCAL hDlg AS DWORD DIALOG NEW hParent, "Subclassing", 180, 106, 292, 181, %WS_POPUP OR _ %WS_BORDER OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_CAPTION OR _ %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR _ %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _ %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _ OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, "Subclassed Editbox", 48, 40, 176, 16 CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Quit", 104, 88, 72, 24 DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt FUNCTION = lRslt END FUNCTION