|
|
/*++
* * WOW v1.0 * * Copyright (c) 1991, Microsoft Corporation * * EDMLONCE.C * Win16 edit control code * * History: * * Created 28-May-1991 by Jeff Parsons (jeffpar) * Copied from WIN31 and edited (as little as possible) for WOW16. --*/
/****************************************************************************/ /* edmlonce.c - Edit controls Routines Called just once or twice are to be */ /* put in a seperate segment _EDMLONCE. This file contains */ /* these routines. */ /* */ /* */ /* Created: 02-08-89 sankar */ /****************************************************************************/
#define NO_LOCALOBJ_TAGS
#include "user.h"
#include "edit.h"
/****************************************************************************/ /* Multi-Line Support Routines called just once */ /****************************************************************************/
void FAR PASCAL MLSizeHandler(ped) register PED ped;
/* effects: Handles sizing of the edit control window and properly updating
* the fields that are dependent on the size of the control. ie. text * characters visible etc. */ { RECT rc;
GetClientRect(ped->hwnd, (LPRECT)&rc);
MLSetRectHandler(ped, (LPRECT)&rc);
GetWindowRect(ped->hwnd, (LPRECT)&rc); ScreenToClient(ped->hwnd, (LPPOINT)&rc.left); ScreenToClient(ped->hwnd, (LPPOINT)&rc.right); InvalidateRect(ped->hwnd, (LPRECT) &rc, TRUE); /*UpdateWindow(ped->hwnd);*/ }
BOOL FAR PASCAL MLSetTextHandler(ped, lpstr) register PED ped; LPSTR lpstr; /* effects: Copies the null terminated text in lpstr to the ped. Notifies the
* parent if there isn't enough memory. Returns TRUE if successful else FALSE * if memory error. */ { BOOL fInsertSuccessful;
/* Set the text and update the window if text was added */ fInsertSuccessful = ECSetText(ped, lpstr);
if (fInsertSuccessful) { MLStripCrCrLf(ped); /* Always build lines even if no text was inserted. */ MLBuildchLines(ped, 0, 0, FALSE);
/* Reset caret and selections since the text could have changed */ ped->screenStart = ped->ichMinSel = ped->ichMaxSel = 0; ped->ichCaret = 0; ped->xOffset = 0; ped->iCaretLine = 0; ped->fDirty = FALSE; } ECEmptyUndo(ped);
SetScrollPos(ped->hwnd, SB_VERT, 0, TRUE); SetScrollPos(ped->hwnd, SB_HORZ, 0, TRUE);
/* We will always redraw the text whether or not the insert was successful
* since we may set to null text. Since PaintHandler checks the redraw flag, * we won't bother to check it here. */ InvalidateRect(ped->hwnd, (LPRECT)NULL, TRUE); /* Need to do the updatewindow to keep raid happy.*/ UpdateWindow(ped->hwnd);
return(fInsertSuccessful); }
LONG FAR PASCAL MLCreateHandler(hwnd, ped, lpCreateStruct) HWND hwnd; register PED ped; LPCREATESTRUCT lpCreateStruct;
/* effects: Creates the edit control for the window hwnd by allocating memory
* as required from the application's heap. Notifies parent if no memory * error (after cleaning up if needed). Returns TRUE if no error else returns * -1. */ { LONG windowStyle; LPSTR lpWindowText=lpCreateStruct->lpszName; RECT rc; /* Save the text across the local allocs in ECNcCreate */ SwapHandle(&lpWindowText);
/* Do the standard creation stuff */ if (!ECCreate(hwnd, ped, lpCreateStruct)) return(-1);
/* Allocate line start array as a fixed block in local heap */ if (!(ped->chLines = (int *)LocalAlloc(LPTR,2*sizeof(int)))) return(-1);
/* Call it one line of text... */ ped->cLines = 1;
/* Get values from the window instance data structure and put them in the
* ped so that we can access them easier */ windowStyle = GetWindowLong(hwnd, GWL_STYLE);
/* If app wants WS_VSCROLL or WS_HSCROLL, it automatically gets AutoVScroll
* or AutoHScroll. */ if ((windowStyle & ES_AUTOVSCROLL) || (windowStyle & WS_VSCROLL)) ped->fAutoVScroll = 1;
ped->format = (LOWORD(windowStyle) & LOWORD(ES_FMTMASK)); if (ped->format != ES_LEFT) { /* If user wants right or center justified text, then we turn off
* AUTOHSCROLL and WS_HSCROLL since non-left styles don't make sense * otherwise. */ windowStyle = windowStyle & ~WS_HSCROLL; SetWindowLong(hwnd, GWL_STYLE, windowStyle); ped->fAutoHScroll = FALSE; }
if (windowStyle & WS_HSCROLL) ped->fAutoHScroll = 1;
ped->fWrap = (!ped->fAutoHScroll && !(windowStyle & WS_HSCROLL));
ped->fSingle = FALSE; /* Set multi line edit control */ _asm int 3 ped->cchTextMax = MAXTEXT; /* Max # chars we will allow user to enter */
/* Set the default font to be the system font.
*/ ECSetFont(ped, NULL, FALSE);
SetRect((LPRECT)&rc, 0, 0, ped->aveCharWidth*10, ped->lineHeight); MLSetRectHandler(ped, (LPRECT)&rc); /* Set the window text if needed and notify parent if not enough memory to
* set the initial text. */ /* Restore the text from the save we did at the beginning */ SwapHandle(&lpWindowText);
if (lpWindowText && !MLSetTextHandler(ped, lpWindowText)) return(-1);
return(TRUE); }
|