Implementing a Line-Based Interface for Edit ControlsLast reviewed: November 2, 1995Article ID: Q92626 |
The information in this article applies to:
SUMMARYIn specific situations, it may be desirable to make multiline edit controls behave similar to list boxes, such that entries can be selected and manipulated on a per-line basis. This article describes how to implement the line-based interface.
MORE INFORMATIONA multiline edit control must be subclassed to achieve the desired behavior. The subclass function is outlined below. Most of the work necessary to implement a line-based interface is done by the predefined window function of the edit control class. With the return value from the EM_LINEINDEX message, the offset of the line under the caret can be determined; with the length of that line retrieved via the EM_LINELENGTH message, the EM_SETSEL message can be used to highlight the current line. There are two problems with this approach:
WNDPROC EditSubClassProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam){ int iLineBeg, iLineEnd; long lSelection; switch (wMsg) { case WM_MOUSEMOVE: break; /* Swallow mouse move messages. */ case WM_LBUTTONDOWN: /* First pass on, then process. */ CallWindowProc((FARPROC)lpfnOldEditFn,hWnd,wMsg,wParam,lParam); iLineBeg = SendMessage(hWnd,EM_LINEINDEX,-1,0); iLineEnd=iLineBeg+SendMessage(hWnd,EM_LINELENGTH,iLineBeg,0);#ifndef WIN32 SendMessage(hWnd,EM_SETSEL,0,MAKELPARAM(iLeneBeg,iLineEnd));#else SendMessage(hWnd,EM_SETSEL,iLineBeg,iLine) /* Win 32 rearranges parameters. */#endif break; case WM_LBUTTONDBLCLK: lSelection = SendMessage(hWnd,EM_GETSEL,0,0); /* Now we have the indices to the beginning and end of the line in the LOWORD and HIWORD of lSelection, respectively. Do something with it... */ break; default:return(CallWindowProc((FARPROC)lpfnOldEditFn,hWnd,wMsg,wParam,lParam)); }; return(0); }
|
Additional reference words: 3.10 3.50 3.51 4.00 95
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |