4 * This module is a simple wrapper for the edit controls.
5 * At the point, it is good only for application who use the RICHEDIT
6 * control to display RTF text.
8 * Copyright 2000 by Jean-Claude Batista
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 #define NO_SHLWAPI_STREAM
39 #include "wine/debug.h"
43 WINE_DEFAULT_DEBUG_CHANNEL(richedit
);
45 HANDLE RICHED32_hHeap
= NULL
;
46 /* LPSTR RICHED32_aSubclass = NULL; */
47 static WNDPROC lpfnEditWndProc
= NULL
;
48 static INT RTFInfoOffset
= 0;
50 #define TRACE_EDIT_MSG32(str) \
52 "32 bit : " str ": hwnd=%p, wParam=%08x, lParam=%08x\n"\
54 hwnd, (UINT)wParam, (UINT)lParam)
56 LPVOID
* WINAPI
CreateIRichEditOle();
57 VOID
RICHEDIT_InitEditControlInfo(void);
59 /***********************************************************************
60 * DllMain [Internal] Initializes the internal 'RICHED32.DLL'.
63 * hinstDLL [I] handle to the DLL's instance
65 * lpvReserved [I] reserved, must be NULL
72 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
77 case DLL_PROCESS_ATTACH
:
78 DisableThreadLibraryCalls(hinstDLL
);
79 /* create private heap */
80 RICHED32_hHeap
= HeapCreate (0, 0x10000, 0);
81 /* Retrieve edit control class info */
82 RICHEDIT_InitEditControlInfo();
83 /* register the Rich Edit class */
87 case DLL_PROCESS_DETACH
:
88 /* unregister all common control classes */
89 RICHED32_Unregister ();
90 HeapDestroy (RICHED32_hHeap
);
91 RICHED32_hHeap
= NULL
;
97 /* Support routines for window procedure */
98 INT
RICHEDIT_GetTextRange(HWND hwnd
,TEXTRANGEA
*tr
);
99 INT
RICHEDIT_GetSelText(HWND hwnd
,LPSTR lpstrBuffer
);
101 typedef struct _RTFControl_info
111 * Window procedure of the RichEdit control.
114 static LRESULT WINAPI
RICHED32_WindowProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
,
119 RTFControl_Info
*info
;
122 info
= (RTFControl_Info
*) GetWindowLongW( hwnd
, RTFInfoOffset
);
124 TRACE("uMsg: 0x%x hwnd: %p\n",uMsg
,hwnd
);
130 TRACE_EDIT_MSG32("WM_CREATE Passed to default");
131 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
134 TRACE_EDIT_MSG32("WM_NCCREATE");
136 info
= HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY
,
137 sizeof (RTFControl_Info
));
138 info
->parser
= HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY
,
140 SetWindowLongW( hwnd
, RTFInfoOffset
, (LONG
)info
);
142 /* remove SCROLLBARS from the current window style */
143 info
->hwndParent
= ((LPCREATESTRUCTA
) lParam
)->hwndParent
;
145 newstyle
= style
= ((LPCREATESTRUCTA
) lParam
)->style
;
146 newstyle
&= ~WS_HSCROLL
;
147 newstyle
&= ~WS_VSCROLL
;
148 newstyle
&= ~ES_AUTOHSCROLL
;
149 newstyle
&= ~ES_AUTOVSCROLL
;
150 SetWindowLongA(hwnd
,GWL_STYLE
, newstyle
);
152 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
155 TRACE_EDIT_MSG32("WM_SETFOCUS");
156 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
159 TRACE_EDIT_MSG32("WM_SIZE");
160 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
163 TRACE_EDIT_MSG32("WM_COMMAND");
164 switch(HIWORD(wParam
)) {
171 return SendMessageA(info
->hwndParent
, WM_COMMAND
,
172 wParam
, (LPARAM
)(hwnd
));
176 MessageBoxA (hwnd
, "RichEdit control out of space.",
177 "ERROR", MB_OK
| MB_ICONSTOP
) ;
182 TRACE_EDIT_MSG32("EM_STREAMIN");
184 /* setup the RTF parser */
185 RTFSetEditStream(info
->parser
,( EDITSTREAM
*)lParam
);
186 info
->parser
->rtfFormat
= wParam
&(SF_TEXT
|SF_RTF
);
187 info
->parser
->hwndEdit
= hwnd
;
188 WriterInit(info
->parser
);
189 RTFInit (info
->parser
);
190 BeginFile(info
->parser
);
193 RTFRead (info
->parser
);
194 RTFFlushOutputBuffer( info
->parser
);
196 /* put the cursor at the top */
197 SendMessageA( hwnd
, EM_SETSEL
, 0, 0 );
201 /* Messages specific to Richedit controls */
203 case EM_AUTOURLDETECT
:
204 TRACE_EDIT_MSG32("EM_AUTOURLDETECT Ignored");
208 TRACE_EDIT_MSG32("EM_CANPASTE Ignored");
212 TRACE_EDIT_MSG32("EM_CANREDO Ignored");
216 TRACE_EDIT_MSG32("EM_DISPLAYBAND Ignored");
220 TRACE_EDIT_MSG32("EM_EXGETSEL -> EM_GETSEL");
221 cr
= (VOID
*) lParam
;
222 CallWindowProcA(lpfnEditWndProc
, hwnd
, EM_GETSEL
, (INT
)&cr
->cpMin
, (INT
)&cr
->cpMax
);
223 TRACE("cpMin: 0x%x cpMax: 0x%x\n",(INT
)cr
->cpMin
,(INT
)cr
->cpMax
);
228 DWORD limit
= lParam
;
229 TRACE_EDIT_MSG32("EM_EXLIMITTEXT");
234 return CallWindowProcA(lpfnEditWndProc
, hwnd
, EM_SETLIMITTEXT
, limit
, 0);
237 case EM_EXLINEFROMCHAR
:
238 TRACE_EDIT_MSG32("EM_EXLINEFROMCHAR -> LINEFROMCHAR");
239 return CallWindowProcA(lpfnEditWndProc
, hwnd
, EM_LINEFROMCHAR
, lParam
, wParam
);
242 TRACE_EDIT_MSG32("EM_EXSETSEL -> EM_SETSEL");
243 cr
= (VOID
*) lParam
;
244 return CallWindowProcA(lpfnEditWndProc
, hwnd
, EM_SETSEL
, cr
->cpMin
, cr
->cpMax
);
247 TRACE_EDIT_MSG32("EM_FINDTEXT Ignored");
251 TRACE_EDIT_MSG32("EM_FINDTEXTEX Ignored");
255 TRACE_EDIT_MSG32("EM_FINDTEXTEXW Ignored");
259 TRACE_EDIT_MSG32("EM_FINDTEXTW Ignored");
262 case EM_FINDWORDBREAK
:
263 TRACE_EDIT_MSG32("EM_FINDWORDBREAK Ignored");
267 TRACE_EDIT_MSG32("EM_FORMATRANGE Ignored");
270 case EM_GETAUTOURLDETECT
:
271 TRACE_EDIT_MSG32("EM_GETAUTOURLDETECT Ignored");
274 case EM_GETBIDIOPTIONS
:
275 TRACE_EDIT_MSG32("EM_GETBIDIOPTIONS Ignored");
278 case EM_GETCHARFORMAT
:
279 TRACE_EDIT_MSG32("EM_GETCHARFORMAT Ignored");
282 case EM_GETEDITSTYLE
:
283 TRACE_EDIT_MSG32("EM_GETEDITSTYLE Ignored");
286 case EM_GETEVENTMASK
:
287 TRACE_EDIT_MSG32("EM_GETEVENTMASK Ignored");
291 TRACE_EDIT_MSG32("EM_GETIMECOLOR Ignored");
294 case EM_GETIMECOMPMODE
:
295 TRACE_EDIT_MSG32("EM_GETIMECOMPMODE Ignored");
298 case EM_GETIMEOPTIONS
:
299 TRACE_EDIT_MSG32("EM_GETIMEOPTIONS Ignored");
302 case EM_GETLANGOPTIONS
:
303 TRACE_EDIT_MSG32("STUB: EM_GETLANGOPTIONS");
306 case EM_GETOLEINTERFACE
:
307 TRACE_EDIT_MSG32("EM_GETOLEINTERFACE Ignored");
311 TRACE_EDIT_MSG32("EM_GETOPTIONS Ignored");
314 case EM_GETPARAFORMAT
:
315 TRACE_EDIT_MSG32("EM_GETPARAFORMAT Ignored");
318 case EM_GETPUNCTUATION
:
319 TRACE_EDIT_MSG32("EM_GETPUNCTUATION Ignored");
323 TRACE_EDIT_MSG32("EM_GETREDONAME Ignored");
326 case EM_GETSCROLLPOS
:
327 TRACE_EDIT_MSG32("EM_GETSCROLLPOS Ignored");
331 TRACE_EDIT_MSG32("EM_GETSELTEXT");
332 return RICHEDIT_GetSelText(hwnd
,(void *)lParam
);
335 TRACE_EDIT_MSG32("EM_GETTEXTEX Ignored");
338 case EM_GETTEXTLENGTHEX
:
339 TRACE_EDIT_MSG32("EM_GETTEXTLENGTHEX Ignored");
343 TRACE_EDIT_MSG32("EM_GETTEXTMODE Ignored");
346 case EM_GETTEXTRANGE
:
347 TRACE_EDIT_MSG32("EM_GETTEXTRANGE");
348 return RICHEDIT_GetTextRange(hwnd
,(TEXTRANGEA
*)lParam
);
350 case EM_GETTYPOGRAPHYOPTIONS
:
351 TRACE_EDIT_MSG32("EM_GETTYPOGRAPHYOPTIONS Ignored");
355 TRACE_EDIT_MSG32("EM_GETUNDONAME Ignored");
358 case EM_GETWORDBREAKPROCEX
:
359 TRACE_EDIT_MSG32("EM_GETWORDBREAKPROCEX Ignored");
362 case EM_GETWORDWRAPMODE
:
363 TRACE_EDIT_MSG32("EM_GETWORDWRAPMODE Ignored");
367 TRACE_EDIT_MSG32("EM_GETZOOM Ignored");
370 case EM_HIDESELECTION
:
371 TRACE_EDIT_MSG32("EM_HIDESELECTION Ignored");
374 case EM_PASTESPECIAL
:
375 TRACE_EDIT_MSG32("EM_PASTESPECIAL Ignored");
378 case EM_RECONVERSION
:
379 TRACE_EDIT_MSG32("EM_RECONVERSION Ignored");
383 TRACE_EDIT_MSG32("EM_REDO Ignored");
386 case EM_REQUESTRESIZE
:
387 TRACE_EDIT_MSG32("EM_REQUESTRESIZE Ignored");
390 case EM_SELECTIONTYPE
:
391 TRACE_EDIT_MSG32("EM_SELECTIONTYPE Ignored");
394 case EM_SETBIDIOPTIONS
:
395 TRACE_EDIT_MSG32("EM_SETBIDIOPTIONS Ignored");
398 case EM_SETBKGNDCOLOR
:
399 TRACE_EDIT_MSG32("EM_SETBKGNDCOLOR Ignored");
402 case EM_SETCHARFORMAT
:
403 TRACE_EDIT_MSG32("EM_SETCHARFORMAT Ignored");
406 case EM_SETEDITSTYLE
:
407 TRACE_EDIT_MSG32("EM_SETEDITSTYLE Ignored");
410 case EM_SETEVENTMASK
:
411 TRACE_EDIT_MSG32("EM_SETEVENTMASK Ignored");
415 TRACE_EDIT_MSG32("EM_SETFONTSIZE Ignored");
419 TRACE_EDIT_MSG32("EM_SETIMECOLO Ignored");
422 case EM_SETIMEOPTIONS
:
423 TRACE_EDIT_MSG32("EM_SETIMEOPTIONS Ignored");
426 case EM_SETLANGOPTIONS
:
427 TRACE_EDIT_MSG32("EM_SETLANGOPTIONS Ignored");
430 case EM_SETOLECALLBACK
:
431 TRACE_EDIT_MSG32("EM_SETOLECALLBACK Ignored");
435 TRACE_EDIT_MSG32("EM_SETOPTIONS Ignored");
439 TRACE_EDIT_MSG32("EM_SETPALETTE Ignored");
442 case EM_SETPARAFORMAT
:
443 TRACE_EDIT_MSG32("EM_SETPARAFORMAT Ignored");
446 case EM_SETPUNCTUATION
:
447 TRACE_EDIT_MSG32("EM_SETPUNCTUATION Ignored");
450 case EM_SETSCROLLPOS
:
451 TRACE_EDIT_MSG32("EM_SETSCROLLPOS Ignored");
454 case EM_SETTARGETDEVICE
:
455 TRACE_EDIT_MSG32("EM_SETTARGETDEVICE Ignored");
459 TRACE_EDIT_MSG32("EM_SETTEXTEX Ignored");
463 TRACE_EDIT_MSG32("EM_SETTEXTMODE Ignored");
466 case EM_SETTYPOGRAPHYOPTIONS
:
467 TRACE_EDIT_MSG32("EM_SETTYPOGRAPHYOPTIONS Ignored");
470 case EM_SETUNDOLIMIT
:
471 TRACE_EDIT_MSG32("EM_SETUNDOLIMIT Ignored");
474 case EM_SETWORDBREAKPROCEX
:
475 TRACE_EDIT_MSG32("EM_SETWORDBREAKPROCEX Ignored");
478 case EM_SETWORDWRAPMODE
:
479 TRACE_EDIT_MSG32("EM_SETWORDWRAPMODE Ignored");
483 TRACE_EDIT_MSG32("EM_SETZOOM Ignored");
486 case EM_SHOWSCROLLBAR
:
487 TRACE_EDIT_MSG32("EM_SHOWSCROLLBAR Ignored");
490 case EM_STOPGROUPTYPING
:
491 TRACE_EDIT_MSG32("EM_STOPGROUPTYPING Ignored");
495 TRACE_EDIT_MSG32("EM_STREAMOUT Ignored");
498 /* Messages dispatched to the edit control */
500 TRACE_EDIT_MSG32("EM_CANUNDO Passed to edit control");
501 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
503 TRACE_EDIT_MSG32("EM_CHARFROMPOS Passed to edit control");
504 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
505 case EM_EMPTYUNDOBUFFER
:
506 TRACE_EDIT_MSG32("EM_EMPTYUNDOBUFFER Passed to edit control");
507 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
509 TRACE_EDIT_MSG32("EM_FMTLINES Passed to edit control");
510 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
511 case EM_GETFIRSTVISIBLELINE
:
512 TRACE_EDIT_MSG32("EM_GETFIRSTVISIBLELINE Passed to edit control");
513 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
515 TRACE_EDIT_MSG32("EM_GETHANDLE Passed to edit control");
516 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
517 /* case EM_GETIMESTATUS:*/
518 case EM_GETLIMITTEXT
:
519 TRACE_EDIT_MSG32("EM_GETLIMITTEXT Passed to edit control");
520 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
522 TRACE_EDIT_MSG32("EM_GETLINE Passed to edit control");
523 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
524 case EM_GETLINECOUNT
:
525 TRACE_EDIT_MSG32("EM_GETLINECOUNT Passed to edit control");
526 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
528 TRACE_EDIT_MSG32("EM_GETMARGINS Passed to edit control");
529 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
531 TRACE_EDIT_MSG32("EM_GETMODIFY Passed to edit control");
532 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
533 case EM_GETPASSWORDCHAR
:
534 TRACE_EDIT_MSG32("EM_GETPASSWORDCHAR Passed to edit control");
535 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
537 TRACE_EDIT_MSG32("EM_GETRECT Passed to edit control");
538 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
540 TRACE_EDIT_MSG32("EM_GETSEL Passed to edit control");
541 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
543 TRACE_EDIT_MSG32("EM_GETTHUMB Passed to edit control");
544 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
545 case EM_GETWORDBREAKPROC
:
546 TRACE_EDIT_MSG32("EM_GETWORDBREAKPROC Passed to edit control");
547 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
548 case EM_LINEFROMCHAR
:
549 TRACE_EDIT_MSG32("EM_LINEFROMCHAR Passed to edit control");
550 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
552 TRACE_EDIT_MSG32("EM_LINEINDEX Passed to edit control");
553 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
555 TRACE_EDIT_MSG32("EM_LINELENGTH Passed to edit control");
556 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
558 TRACE_EDIT_MSG32("EM_LINESCROLL Passed to edit control");
559 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
561 TRACE_EDIT_MSG32("EM_POSFROMCHAR Passed to edit control");
562 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
564 TRACE_EDIT_MSG32("case EM_REPLACESEL Passed to edit control");
565 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
567 TRACE_EDIT_MSG32("case EM_SCROLL Passed to edit control");
568 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
570 case WM_USER
+49: /* EM_SCROLLCARET too */
571 TRACE_EDIT_MSG32("EM_SCROLLCARET Passed to edit control");
572 return CallWindowProcA(lpfnEditWndProc
, hwnd
, EM_SCROLLCARET
, wParam
, lParam
);
574 TRACE_EDIT_MSG32("EM_SETHANDLE Passed to edit control");
575 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
576 /* case EM_SETIMESTATUS:*/
577 case EM_SETLIMITTEXT
:
578 TRACE_EDIT_MSG32("EM_SETLIMITTEXT Passed to edit control");
579 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
581 TRACE_EDIT_MSG32("case EM_SETMARGINS Passed to edit control");
582 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
584 TRACE_EDIT_MSG32("EM_SETMODIFY Passed to edit control");
585 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
586 case EM_SETPASSWORDCHAR
:
587 TRACE_EDIT_MSG32("EM_SETPASSWORDCHAR Passed to edit control");
588 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
590 TRACE_EDIT_MSG32("EM_SETREADONLY Passed to edit control");
591 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
593 TRACE_EDIT_MSG32("EM_SETRECT Passed to edit control");
594 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
596 TRACE_EDIT_MSG32("EM_SETRECTNP Passed to edit control");
597 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
599 TRACE_EDIT_MSG32("EM_SETSEL Passed to edit control");
600 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
602 TRACE_EDIT_MSG32("EM_SETTABSTOPS Passed to edit control");
603 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
604 case EM_SETWORDBREAKPROC
:
605 TRACE_EDIT_MSG32("EM_SETWORDBREAKPROC Passed to edit control");
606 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
608 TRACE_EDIT_MSG32("EM_UNDO Passed to edit control");
609 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
611 case WM_STYLECHANGING
:
612 TRACE_EDIT_MSG32("WM_STYLECHANGING Passed to edit control");
613 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
614 case WM_STYLECHANGED
:
615 TRACE_EDIT_MSG32("WM_STYLECHANGED Passed to edit control");
616 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
618 TRACE_EDIT_MSG32("WM_GETTEXT Passed to edit control");
619 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
620 case WM_GETTEXTLENGTH
:
621 TRACE_EDIT_MSG32("WM_GETTEXTLENGTH Passed to edit control");
622 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
624 TRACE_EDIT_MSG32("WM_SETTEXT Passed to edit control");
625 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
627 TRACE_EDIT_MSG32("WM_CUT Passed to edit control");
628 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
630 TRACE_EDIT_MSG32("WM_COPY Passed to edit control");
631 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
633 TRACE_EDIT_MSG32("WM_PASTE Passed to edit control");
634 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
636 /* Messages passed to default handler. */
638 TRACE_EDIT_MSG32("WM_NCCALCSIZE Passed to default");
639 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
641 TRACE_EDIT_MSG32("WM_NCPAINT Passed to default");
642 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
644 TRACE_EDIT_MSG32("WM_PAINT Passed to default");
645 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
647 TRACE_EDIT_MSG32("WM_ERASEBKGND Passed to default");
648 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
650 TRACE_EDIT_MSG32("WM_KILLFOCUS Passed to default");
651 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
653 TRACE_EDIT_MSG32("WM_DESTROY Passed to default");
654 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
655 case WM_CHILDACTIVATE
:
656 TRACE_EDIT_MSG32("WM_CHILDACTIVATE Passed to default");
657 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
659 case WM_WINDOWPOSCHANGING
:
660 TRACE_EDIT_MSG32("WM_WINDOWPOSCHANGING Passed to default");
661 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
662 case WM_WINDOWPOSCHANGED
:
663 TRACE_EDIT_MSG32("WM_WINDOWPOSCHANGED Passed to default");
664 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
665 /* case WM_INITIALUPDATE:
666 TRACE_EDIT_MSG32("WM_INITIALUPDATE Passed to default");
667 return DefWindowProcA( hwnd,uMsg,wParam,lParam); */
668 case WM_CTLCOLOREDIT
:
669 TRACE_EDIT_MSG32("WM_CTLCOLOREDIT Passed to default");
670 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
672 TRACE_EDIT_MSG32("WM_SETCURSOR Passed to default");
673 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
675 TRACE_EDIT_MSG32("WM_MOVE Passed to default");
676 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
678 TRACE_EDIT_MSG32("WM_SHOWWINDOW Passed to default");
679 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
680 case WM_PARENTNOTIFY
:
681 TRACE_EDIT_MSG32("WM_PARENTNOTIFY Passed to default");
682 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
684 TRACE_EDIT_MSG32("WM_SETREDRAW Passed to default");
685 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
688 TRACE_EDIT_MSG32("WM_NCDESTROY Passed to default");
689 HeapFree( GetProcessHeap(), 0, info
->parser
);
690 HeapFree( GetProcessHeap(), 0, info
);
691 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
695 TRACE_EDIT_MSG32("WM_NCHITTEST Passed to default");
696 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
697 case WM_CTLCOLORSTATIC
:
698 TRACE_EDIT_MSG32("WM_CTLCOLORSTATIC Passed to default");
699 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
701 TRACE_EDIT_MSG32("WM_NCMOUSEMOVE Passed to default");
702 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
704 TRACE_EDIT_MSG32("WM_CLEAR Passed to default");
705 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
707 * used by IE in the EULA box
709 case WM_ALTTABACTIVE
:
710 TRACE_EDIT_MSG32("WM_ALTTABACTIVE");
711 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
713 TRACE_EDIT_MSG32("WM_GETDLGCODE");
714 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
716 TRACE_EDIT_MSG32("WM_SETFONT");
717 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
721 if ((uMsg
>= WM_USER
) && (uMsg
< WM_APP
)) {
722 FIXME("Unknown message 0x%x Passed to default hwnd=%p, wParam=%08x, lParam=%08x\n",
723 uMsg
, hwnd
, (UINT
)wParam
, (UINT
)lParam
);
726 return CallWindowProcA(lpfnEditWndProc
, hwnd
, uMsg
, wParam
, lParam
);
729 /***********************************************************************
730 * DllGetVersion [RICHED32.2]
732 * Retrieves version information of the 'RICHED32.DLL'
735 * pdvi [O] pointer to version information structure.
739 * Failure: E_INVALIDARG
742 * Returns version of a comctl32.dll from IE4.01 SP1.
746 RICHED32_DllGetVersion (DLLVERSIONINFO
*pdvi
)
750 if (pdvi
->cbSize
!= sizeof(DLLVERSIONINFO
)) {
755 pdvi
->dwMajorVersion
= 4;
756 pdvi
->dwMinorVersion
= 0;
757 pdvi
->dwBuildNumber
= 0;
758 pdvi
->dwPlatformID
= 0;
765 * Registers the window class.
773 VOID
RICHED32_Register(void)
779 ZeroMemory(&wndClass
, sizeof(WNDCLASSA
));
780 wndClass
.style
= CS_HREDRAW
| CS_VREDRAW
| CS_GLOBALCLASS
;
781 wndClass
.lpfnWndProc
= (WNDPROC
)RICHED32_WindowProc
;
782 wndClass
.cbClsExtra
= 0;
783 wndClass
.cbWndExtra
= RTFInfoOffset
+ sizeof(RTFControl_Info
*);
784 wndClass
.hCursor
= LoadCursorA(0, (LPSTR
)IDC_ARROW
);
785 wndClass
.hbrBackground
= (HBRUSH
)(COLOR_WINDOW
+ 1);
786 wndClass
.lpszClassName
= RICHEDIT_CLASS10A
; /* WC_RICHED32A; */
788 RegisterClassA (&wndClass
);
793 * Unregisters the window class.
801 VOID
RICHED32_Unregister(void)
805 UnregisterClassA(RICHEDIT_CLASS10A
, NULL
);
811 * Initialize edit control class info
813 VOID
RICHEDIT_InitEditControlInfo(void)
817 if (GetClassInfoA(0, "edit", &wcEdit
))
819 lpfnEditWndProc
= wcEdit
.lpfnWndProc
;
820 RTFInfoOffset
= wcEdit
.cbWndExtra
;
823 ERR("Failed to retrieve edit control class info\n");
827 INT
RICHEDIT_GetTextRange(HWND hwnd
,TEXTRANGEA
*tr
)
829 UINT alloc_size
, text_size
, range_size
;
832 TRACE("start: 0x%x stop: 0x%x\n",(INT
)tr
->chrg
.cpMin
,(INT
)tr
->chrg
.cpMax
);
834 if (!(alloc_size
= SendMessageA(hwnd
,WM_GETTEXTLENGTH
,0,0))) return FALSE
;
835 if (!(text
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, (alloc_size
+1))))
837 text_size
= SendMessageA(hwnd
,WM_GETTEXT
,alloc_size
,(INT
)text
);
839 if (text_size
> tr
->chrg
.cpMin
)
841 range_size
= (text_size
> tr
->chrg
.cpMax
) ? (tr
->chrg
.cpMax
- tr
->chrg
.cpMin
) : (text_size
- tr
->chrg
.cpMin
);
842 TRACE("EditText: %.30s ...\n",text
+tr
->chrg
.cpMin
);
843 memcpy(tr
->lpstrText
,text
+tr
->chrg
.cpMin
,range_size
);
846 HeapFree(GetProcessHeap(), 0, text
);
851 INT
RICHEDIT_GetSelText(HWND hwnd
,LPSTR lpstrBuffer
)
853 TEXTRANGEA textrange
;
855 textrange
.lpstrText
= lpstrBuffer
;
856 SendMessageA(hwnd
,EM_GETSEL
,(INT
)&textrange
.chrg
.cpMin
,(INT
)&textrange
.chrg
.cpMax
);
857 return RICHEDIT_GetTextRange(hwnd
,&textrange
);