I am wanting the character positions of the caret in a rich edit control.
I wrote a function to return the position and it works fine for a regular
edit control, but yields a page fault for the rich edit control. The code
below illustrates my problem.
I hope someone can spot the trouble. Thanks for your time.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
I wrote a function to return the position and it works fine for a regular
edit control, but yields a page fault for the rich edit control. The code
below illustrates my problem.
I hope someone can spot the trouble. Thanks for your time.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Code:
#COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" 'Some include files #INCLUDE "COMMCTRL.INC" #INCLUDE "RICHEDIT.INC" %ID_RichEdit = 500 %ID_ShowPos = 501 GLOBAL hEdit AS LONG DECLARE CALLBACK FUNCTION dlgCallback() DECLARE FUNCTION getEditCursPos AS LONG FUNCTION PBMAIN LOCAL hDlg AS LONG LoadLibrary "RICHED32.DLL" CALL InitCommonControls DIALOG NEW 0, "DDT RichEdit demo",,, 150, 90, %WS_SYSMENU TO hDlg CONTROL ADD TEXTBOX, hDlg, %ID_RichEdit, "", 5, 20, 120, 12 'CONTROL ADD "RichEdit", hDlg, %ID_RichEdit, "", 5, 20, 120, 12, _ ' %WS_CHILD + %WS_VISIBLE, %WS_EX_CLIENTEDGE CONTROL ADD LABEL, hDlg, %ID_ShowPos, "", 5, 40, 40, 10 DIALOG SHOW MODAL hDlg CALL dlgCallback END FUNCTION CALLBACK FUNCTION dlgCallback() LOCAL s AS STRING SELECT CASE CBMSG CASE %WM_INITDIALOG CONTROL HANDLE CBHNDL, %ID_RichEdit TO hEdit CASE %WM_COMMAND CONTROL SET TEXT CBHNDL, %ID_ShowPos, STR$(getEditCursPos) END SELECT END FUNCTION FUNCTION getEditCursPos() AS LONG LOCAL p AS POINTAPI LOCAL lParam AS DWORD GetCaretPos BYVAL VARPTR(p) lParam = p.x FUNCTION = SendMessage(hEdit, %EM_CHARFROMPOS, 0, lParam) END FUNCTION
Comment