void ME_SendRequestResize(ME_TextEditor *editor, BOOL force) { if (editor->nEventMask & ENM_REQUESTRESIZE) { RECT rc; ITextHost_TxGetClientRect(editor->texthost, &rc); if (force || rc.bottom != editor->nTotalLength) { REQRESIZE info; info.nmhdr.hwndFrom = NULL; info.nmhdr.idFrom = 0; info.nmhdr.code = EN_REQUESTRESIZE; info.rc = rc; info.rc.right = editor->nTotalWidth; info.rc.bottom = editor->nTotalLength; editor->nEventMask &= ~ENM_REQUESTRESIZE; ITextHost_TxNotify(editor->texthost, info.nmhdr.code, &info); editor->nEventMask |= ENM_REQUESTRESIZE; } } }
/* Sets the cursor to the position closest to the pixel position * * x & y are pixel positions in client coordinates. * * isExact will be set to TRUE if the run is directly under the pixel * position, FALSE if it not, unless isExact is set to NULL. * * return FALSE if outside client area and the cursor is not set, * otherwise TRUE is returned. */ BOOL ME_CharFromPos(ME_TextEditor *editor, int x, int y, ME_Cursor *cursor, BOOL *isExact) { RECT rc; BOOL bResult; ITextHost_TxGetClientRect(editor->texthost, &rc); if (x < 0 || y < 0 || x >= rc.right || y >= rc.bottom) { if (isExact) *isExact = FALSE; return FALSE; } x += editor->horz_si.nPos; y += editor->vert_si.nPos; bResult = ME_FindPixelPos(editor, x, y, cursor, NULL); if (isExact) *isExact = bResult; return TRUE; }