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; */
48 #define DPRINTF_EDIT_MSG32(str) \
50 "32 bit : " str ": hwnd=%p, wParam=%08x, lParam=%08x\n"\
52 hwnd, (UINT)wParam, (UINT)lParam)
55 /***********************************************************************
56 * DllMain [Internal] Initializes the internal 'RICHED32.DLL'.
59 * hinstDLL [I] handle to the DLL's instance
61 * lpvReserved [I] reserved, must be NULL
68 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
73 case DLL_PROCESS_ATTACH
:
74 /* create private heap */
75 RICHED32_hHeap
= HeapCreate (0, 0x10000, 0);
76 /* register the Rich Edit class */
80 case DLL_PROCESS_DETACH
:
81 /* unregister all common control classes */
82 RICHED32_Unregister ();
83 HeapDestroy (RICHED32_hHeap
);
84 RICHED32_hHeap
= NULL
;
90 /* Support routines for window procedure */
91 INT
RICHEDIT_GetTextRange(HWND hwnd
,TEXTRANGEA
*tr
);
92 INT
RICHEDIT_GetSelText(HWND hwnd
,LPSTR lpstrBuffer
);
98 * Window procedure of the RichEdit control.
101 static LRESULT WINAPI
RICHED32_WindowProc(HWND hwnd
, UINT uMsg
, WPARAM wParam
,
104 int RTFToBuffer(char* pBuffer
, int nBufferSize
);
108 static HWND hwndEdit
;
109 static HWND hwndParent
;
110 static char* rtfBuffer
;
114 TRACE("previous hwndEdit: %p hwndParent %p\n",hwndEdit
,hwndParent
);
115 hwndEdit
= GetWindow(hwnd
,GW_CHILD
);
116 TRACE("uMsg: 0x%x hwnd: %p hwndEdit: %p\n",uMsg
,hwnd
,hwndEdit
);
122 DPRINTF_EDIT_MSG32("WM_CREATE");
124 /* remove SCROLLBARS from the current window style */
125 hwndParent
= ((LPCREATESTRUCTA
) lParam
)->hwndParent
;
127 newstyle
= style
= ((LPCREATESTRUCTA
) lParam
)->style
;
128 newstyle
&= ~WS_HSCROLL
;
129 newstyle
&= ~WS_VSCROLL
;
130 newstyle
&= ~ES_AUTOHSCROLL
;
131 newstyle
&= ~ES_AUTOVSCROLL
;
133 TRACE("previous hwndEdit: %p\n",hwndEdit
);
134 hwndEdit
= CreateWindowA ("edit", ((LPCREATESTRUCTA
) lParam
)->lpszName
,
136 hwnd
, (HMENU
) ID_EDIT
,
137 ((LPCREATESTRUCTA
) lParam
)->hInstance
, NULL
) ;
138 TRACE("hwndEdit: %p hwnd: %p\n",hwndEdit
,hwnd
);
140 SetWindowLongA(hwnd
,GWL_STYLE
, newstyle
);
144 DPRINTF_EDIT_MSG32("WM_SETFOCUS");
145 SetFocus (hwndEdit
) ;
149 DPRINTF_EDIT_MSG32("WM_SIZE");
150 MoveWindow (hwndEdit
, 0, 0, LOWORD (lParam
), HIWORD (lParam
), TRUE
) ;
154 DPRINTF_EDIT_MSG32("WM_COMMAND");
155 switch(HIWORD(wParam
)) {
162 return SendMessageA(hwndParent
, WM_COMMAND
,
163 wParam
, (LPARAM
)(hwnd
));
167 MessageBoxA (hwnd
, "RichEdit control out of space.",
168 "ERROR", MB_OK
| MB_ICONSTOP
) ;
173 DPRINTF_EDIT_MSG32("EM_STREAMIN");
175 /* setup the RTF parser */
176 RTFSetEditStream(( EDITSTREAM
*)lParam
);
177 rtfFormat
= wParam
&(SF_TEXT
|SF_RTF
);
185 rtfBufferSize
= RTFToBuffer(NULL
, 0);
186 rtfBuffer
= HeapAlloc(RICHED32_hHeap
, 0,rtfBufferSize
*sizeof(char));
189 RTFToBuffer(rtfBuffer
, rtfBufferSize
);
190 SetWindowTextA(hwndEdit
,rtfBuffer
);
191 HeapFree(RICHED32_hHeap
, 0,rtfBuffer
);
194 WARN("Not enough memory for a allocating rtfBuffer\n");
198 /* Messages specific to Richedit controls */
200 case EM_AUTOURLDETECT
:
201 DPRINTF_EDIT_MSG32("EM_AUTOURLDETECT Ignored");
205 DPRINTF_EDIT_MSG32("EM_CANPASTE Ignored");
209 DPRINTF_EDIT_MSG32("EM_CANREDO Ignored");
213 DPRINTF_EDIT_MSG32("EM_DISPLAYBAND Ignored");
217 DPRINTF_EDIT_MSG32("EM_EXGETSEL -> EM_GETSEL");
218 cr
= (VOID
*) lParam
;
219 if (hwndEdit
) SendMessageA( hwndEdit
, EM_GETSEL
, (INT
)&cr
->cpMin
, (INT
)&cr
->cpMax
);
220 TRACE("cpMin: 0x%x cpMax: 0x%x\n",(INT
)cr
->cpMin
,(INT
)cr
->cpMax
);
225 DWORD limit
= lParam
;
226 DPRINTF_EDIT_MSG32("EM_EXLIMITTEXT");
231 return SendMessageA(hwndEdit
,EM_SETLIMITTEXT
,limit
,0);
234 case EM_EXLINEFROMCHAR
:
235 DPRINTF_EDIT_MSG32("EM_EXLINEFROMCHAR -> LINEFROMCHAR");
236 if (hwndEdit
) return SendMessageA( hwndEdit
, EM_LINEFROMCHAR
, lParam
, wParam
);
240 DPRINTF_EDIT_MSG32("EM_EXSETSEL -> EM_SETSEL");
241 cr
= (VOID
*) lParam
;
242 if (hwndEdit
) SendMessageA( hwndEdit
, EM_SETSEL
, cr
->cpMin
, cr
->cpMax
);
246 DPRINTF_EDIT_MSG32("EM_FINDTEXT Ignored");
250 DPRINTF_EDIT_MSG32("EM_FINDTEXTEX Ignored");
254 DPRINTF_EDIT_MSG32("EM_FINDTEXTEXW Ignored");
258 DPRINTF_EDIT_MSG32("EM_FINDTEXTW Ignored");
261 case EM_FINDWORDBREAK
:
262 DPRINTF_EDIT_MSG32("EM_FINDWORDBREAK Ignored");
266 DPRINTF_EDIT_MSG32("EM_FORMATRANGE Ignored");
269 case EM_GETAUTOURLDETECT
:
270 DPRINTF_EDIT_MSG32("EM_GETAUTOURLDETECT Ignored");
273 case EM_GETBIDIOPTIONS
:
274 DPRINTF_EDIT_MSG32("EM_GETBIDIOPTIONS Ignored");
277 case EM_GETCHARFORMAT
:
278 DPRINTF_EDIT_MSG32("EM_GETCHARFORMAT Ignored");
281 case EM_GETEDITSTYLE
:
282 DPRINTF_EDIT_MSG32("EM_GETEDITSTYLE Ignored");
285 case EM_GETEVENTMASK
:
286 DPRINTF_EDIT_MSG32("EM_GETEVENTMASK Ignored");
290 DPRINTF_EDIT_MSG32("EM_GETIMECOLOR Ignored");
293 case EM_GETIMECOMPMODE
:
294 DPRINTF_EDIT_MSG32("EM_GETIMECOMPMODE Ignored");
297 case EM_GETIMEOPTIONS
:
298 DPRINTF_EDIT_MSG32("EM_GETIMEOPTIONS Ignored");
301 case EM_GETLANGOPTIONS
:
302 DPRINTF_EDIT_MSG32("STUB: EM_GETLANGOPTIONS");
305 case EM_GETOLEINTERFACE
:
306 DPRINTF_EDIT_MSG32("EM_GETOLEINTERFACE Ignored");
310 DPRINTF_EDIT_MSG32("EM_GETOPTIONS Ignored");
313 case EM_GETPARAFORMAT
:
314 DPRINTF_EDIT_MSG32("EM_GETPARAFORMAT Ignored");
317 case EM_GETPUNCTUATION
:
318 DPRINTF_EDIT_MSG32("EM_GETPUNCTUATION Ignored");
322 DPRINTF_EDIT_MSG32("EM_GETREDONAME Ignored");
325 case EM_GETSCROLLPOS
:
326 DPRINTF_EDIT_MSG32("EM_GETSCROLLPOS Ignored");
330 DPRINTF_EDIT_MSG32("EM_GETSELTEXT");
331 return RICHEDIT_GetSelText(hwndEdit
,(void *)lParam
);
334 DPRINTF_EDIT_MSG32("EM_GETTEXTEX Ignored");
337 case EM_GETTEXTLENGTHEX
:
338 DPRINTF_EDIT_MSG32("EM_GETTEXTLENGTHEX Ignored");
342 DPRINTF_EDIT_MSG32("EM_GETTEXTMODE Ignored");
345 case EM_GETTEXTRANGE
:
346 DPRINTF_EDIT_MSG32("EM_GETTEXTRANGE");
347 return RICHEDIT_GetTextRange(hwndEdit
,(TEXTRANGEA
*)lParam
);
349 case EM_GETTYPOGRAPHYOPTIONS
:
350 DPRINTF_EDIT_MSG32("EM_GETTYPOGRAPHYOPTIONS Ignored");
354 DPRINTF_EDIT_MSG32("EM_GETUNDONAME Ignored");
357 case EM_GETWORDBREAKPROCEX
:
358 DPRINTF_EDIT_MSG32("EM_GETWORDBREAKPROCEX Ignored");
361 case EM_GETWORDWRAPMODE
:
362 DPRINTF_EDIT_MSG32("EM_GETWORDWRAPMODE Ignored");
366 DPRINTF_EDIT_MSG32("EM_GETZOOM Ignored");
369 case EM_HIDESELECTION
:
370 DPRINTF_EDIT_MSG32("EM_HIDESELECTION Ignored");
373 case EM_PASTESPECIAL
:
374 DPRINTF_EDIT_MSG32("EM_PASTESPECIAL Ignored");
377 case EM_RECONVERSION
:
378 DPRINTF_EDIT_MSG32("EM_RECONVERSION Ignored");
382 DPRINTF_EDIT_MSG32("EM_REDO Ignored");
385 case EM_REQUESTRESIZE
:
386 DPRINTF_EDIT_MSG32("EM_REQUESTRESIZE Ignored");
389 case EM_SELECTIONTYPE
:
390 DPRINTF_EDIT_MSG32("EM_SELECTIONTYPE Ignored");
393 case EM_SETBIDIOPTIONS
:
394 DPRINTF_EDIT_MSG32("EM_SETBIDIOPTIONS Ignored");
397 case EM_SETBKGNDCOLOR
:
398 DPRINTF_EDIT_MSG32("EM_SETBKGNDCOLOR Ignored");
401 case EM_SETCHARFORMAT
:
402 DPRINTF_EDIT_MSG32("EM_SETCHARFORMAT Ignored");
405 case EM_SETEDITSTYLE
:
406 DPRINTF_EDIT_MSG32("EM_SETEDITSTYLE Ignored");
409 case EM_SETEVENTMASK
:
410 DPRINTF_EDIT_MSG32("EM_SETEVENTMASK Ignored");
414 DPRINTF_EDIT_MSG32("EM_SETFONTSIZE Ignored");
418 DPRINTF_EDIT_MSG32("EM_SETIMECOLO Ignored");
421 case EM_SETIMEOPTIONS
:
422 DPRINTF_EDIT_MSG32("EM_SETIMEOPTIONS Ignored");
425 case EM_SETLANGOPTIONS
:
426 DPRINTF_EDIT_MSG32("EM_SETLANGOPTIONS Ignored");
429 case EM_SETOLECALLBACK
:
430 DPRINTF_EDIT_MSG32("EM_SETOLECALLBACK Ignored");
434 DPRINTF_EDIT_MSG32("EM_SETOPTIONS Ignored");
438 DPRINTF_EDIT_MSG32("EM_SETPALETTE Ignored");
441 case EM_SETPARAFORMAT
:
442 DPRINTF_EDIT_MSG32("EM_SETPARAFORMAT Ignored");
445 case EM_SETPUNCTUATION
:
446 DPRINTF_EDIT_MSG32("EM_SETPUNCTUATION Ignored");
449 case EM_SETSCROLLPOS
:
450 DPRINTF_EDIT_MSG32("EM_SETSCROLLPOS Ignored");
453 case EM_SETTARGETDEVICE
:
454 DPRINTF_EDIT_MSG32("EM_SETTARGETDEVICE Ignored");
458 DPRINTF_EDIT_MSG32("EM_SETTEXTEX Ignored");
462 DPRINTF_EDIT_MSG32("EM_SETTEXTMODE Ignored");
465 case EM_SETTYPOGRAPHYOPTIONS
:
466 DPRINTF_EDIT_MSG32("EM_SETTYPOGRAPHYOPTIONS Ignored");
469 case EM_SETUNDOLIMIT
:
470 DPRINTF_EDIT_MSG32("EM_SETUNDOLIMIT Ignored");
473 case EM_SETWORDBREAKPROCEX
:
474 DPRINTF_EDIT_MSG32("EM_SETWORDBREAKPROCEX Ignored");
477 case EM_SETWORDWRAPMODE
:
478 DPRINTF_EDIT_MSG32("EM_SETWORDWRAPMODE Ignored");
482 DPRINTF_EDIT_MSG32("EM_SETZOOM Ignored");
485 case EM_SHOWSCROLLBAR
:
486 DPRINTF_EDIT_MSG32("EM_SHOWSCROLLBAR Ignored");
489 case EM_STOPGROUPTYPING
:
490 DPRINTF_EDIT_MSG32("EM_STOPGROUPTYPING Ignored");
494 DPRINTF_EDIT_MSG32("EM_STREAMOUT Ignored");
497 /* Messages dispatched to the edit control */
499 DPRINTF_EDIT_MSG32("EM_CANUNDO Passed to edit control");
500 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
502 DPRINTF_EDIT_MSG32("EM_CHARFROMPOS Passed to edit control");
503 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
504 case EM_EMPTYUNDOBUFFER
:
505 DPRINTF_EDIT_MSG32("EM_EMPTYUNDOBUFFER Passed to edit control");
506 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
508 DPRINTF_EDIT_MSG32("EM_FMTLINES Passed to edit control");
509 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
510 case EM_GETFIRSTVISIBLELINE
:
511 DPRINTF_EDIT_MSG32("EM_GETFIRSTVISIBLELINE Passed to edit control");
512 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
514 DPRINTF_EDIT_MSG32("EM_GETHANDLE Passed to edit control");
515 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
516 /* case EM_GETIMESTATUS:*/
517 case EM_GETLIMITTEXT
:
518 DPRINTF_EDIT_MSG32("EM_GETLIMITTEXT Passed to edit control");
519 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
521 DPRINTF_EDIT_MSG32("EM_GETLINE Passed to edit control");
522 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
523 case EM_GETLINECOUNT
:
524 DPRINTF_EDIT_MSG32("EM_GETLINECOUNT Passed to edit control");
525 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
527 DPRINTF_EDIT_MSG32("EM_GETMARGINS Passed to edit control");
528 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
530 DPRINTF_EDIT_MSG32("EM_GETMODIFY Passed to edit control");
531 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
532 case EM_GETPASSWORDCHAR
:
533 DPRINTF_EDIT_MSG32("EM_GETPASSWORDCHAR Passed to edit control");
534 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
536 DPRINTF_EDIT_MSG32("EM_GETRECT Passed to edit control");
537 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
539 DPRINTF_EDIT_MSG32("EM_GETSEL Passed to edit control");
540 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
542 DPRINTF_EDIT_MSG32("EM_GETTHUMB Passed to edit control");
543 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
544 case EM_GETWORDBREAKPROC
:
545 DPRINTF_EDIT_MSG32("EM_GETWORDBREAKPROC Passed to edit control");
546 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
547 case EM_LINEFROMCHAR
:
548 DPRINTF_EDIT_MSG32("EM_LINEFROMCHAR Passed to edit control");
549 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
551 DPRINTF_EDIT_MSG32("EM_LINEINDEX Passed to edit control");
552 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
554 DPRINTF_EDIT_MSG32("EM_LINELENGTH Passed to edit control");
555 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
557 DPRINTF_EDIT_MSG32("EM_LINESCROLL Passed to edit control");
558 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
560 DPRINTF_EDIT_MSG32("EM_POSFROMCHAR Passed to edit control");
561 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
563 DPRINTF_EDIT_MSG32("case EM_REPLACESEL Passed to edit control");
564 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
566 DPRINTF_EDIT_MSG32("case EM_SCROLL Passed to edit control");
567 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
569 DPRINTF_EDIT_MSG32("EM_SCROLLCARET Passed to edit control");
570 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
572 DPRINTF_EDIT_MSG32("EM_SETHANDLE Passed to edit control");
573 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
574 /* case EM_SETIMESTATUS:*/
575 case EM_SETLIMITTEXT
:
576 DPRINTF_EDIT_MSG32("EM_SETLIMITTEXT Passed to edit control");
577 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
579 DPRINTF_EDIT_MSG32("case EM_SETMARGINS Passed to edit control");
580 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
582 DPRINTF_EDIT_MSG32("EM_SETMODIFY Passed to edit control");
583 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
584 case EM_SETPASSWORDCHAR
:
585 DPRINTF_EDIT_MSG32("EM_SETPASSWORDCHAR Passed to edit control");
586 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
588 DPRINTF_EDIT_MSG32("EM_SETREADONLY Passed to edit control");
589 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
591 DPRINTF_EDIT_MSG32("EM_SETRECT Passed to edit control");
592 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
594 DPRINTF_EDIT_MSG32("EM_SETRECTNP Passed to edit control");
595 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
597 DPRINTF_EDIT_MSG32("EM_SETSEL Passed to edit control");
598 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
600 DPRINTF_EDIT_MSG32("EM_SETTABSTOPS Passed to edit control");
601 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
602 case EM_SETWORDBREAKPROC
:
603 DPRINTF_EDIT_MSG32("EM_SETWORDBREAKPROC Passed to edit control");
604 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
606 DPRINTF_EDIT_MSG32("EM_UNDO Passed to edit control");
607 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
609 case WM_STYLECHANGING
:
610 DPRINTF_EDIT_MSG32("WM_STYLECHANGING Passed to edit control");
611 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
612 case WM_STYLECHANGED
:
613 DPRINTF_EDIT_MSG32("WM_STYLECHANGED Passed to edit control");
614 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
616 DPRINTF_EDIT_MSG32("WM_NCCALCSIZE Passed to edit control");
617 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
619 DPRINTF_EDIT_MSG32("WM_GETTEXT Passed to edit control");
620 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
621 case WM_GETTEXTLENGTH
:
622 DPRINTF_EDIT_MSG32("WM_GETTEXTLENGTH Passed to edit control");
623 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
625 DPRINTF_EDIT_MSG32("WM_SETTEXT Passed to edit control");
626 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
628 DPRINTF_EDIT_MSG32("WM_CUT Passed to edit control");
629 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
631 DPRINTF_EDIT_MSG32("WM_COPY Passed to edit control");
632 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
634 DPRINTF_EDIT_MSG32("WM_PASTE Passed to edit control");
635 return SendMessageA( hwndEdit
, uMsg
, wParam
, lParam
);
637 /* Messages passed to default handler. */
639 DPRINTF_EDIT_MSG32("WM_NCPAINT Passed to default");
640 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
642 DPRINTF_EDIT_MSG32("WM_PAINT Passed to default");
643 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
645 DPRINTF_EDIT_MSG32("WM_ERASEBKGND Passed to default");
646 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
648 DPRINTF_EDIT_MSG32("WM_KILLFOCUS Passed to default");
649 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
651 DPRINTF_EDIT_MSG32("WM_DESTROY Passed to default");
652 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
653 case WM_CHILDACTIVATE
:
654 DPRINTF_EDIT_MSG32("WM_CHILDACTIVATE Passed to default");
655 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
657 case WM_WINDOWPOSCHANGING
:
658 DPRINTF_EDIT_MSG32("WM_WINDOWPOSCHANGING Passed to default");
659 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
660 case WM_WINDOWPOSCHANGED
:
661 DPRINTF_EDIT_MSG32("WM_WINDOWPOSCHANGED Passed to default");
662 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
663 /* case WM_INITIALUPDATE:
664 DPRINTF_EDIT_MSG32("WM_INITIALUPDATE Passed to default");
665 return DefWindowProcA( hwnd,uMsg,wParam,lParam); */
666 case WM_CTLCOLOREDIT
:
667 DPRINTF_EDIT_MSG32("WM_CTLCOLOREDIT Passed to default");
668 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
670 DPRINTF_EDIT_MSG32("WM_SETCURSOR Passed to default");
671 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
673 DPRINTF_EDIT_MSG32("WM_MOVE Passed to default");
674 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
676 DPRINTF_EDIT_MSG32("WM_SHOWWINDOW Passed to default");
677 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
679 DPRINTF_EDIT_MSG32("WM_NCCREATE Passed to default");
680 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
681 case WM_PARENTNOTIFY
:
682 DPRINTF_EDIT_MSG32("WM_PARENTNOTIFY Passed to default");
683 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
685 DPRINTF_EDIT_MSG32("WM_SETREDRAW Passed to default");
686 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
688 DPRINTF_EDIT_MSG32("WM_NCDESTROY Passed to default");
689 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
691 DPRINTF_EDIT_MSG32("WM_NCHITTEST Passed to default");
692 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
693 case WM_CTLCOLORSTATIC
:
694 DPRINTF_EDIT_MSG32("WM_CTLCOLORSTATIC Passed to default");
695 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
697 DPRINTF_EDIT_MSG32("WM_NCMOUSEMOVE Passed to default");
698 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
700 DPRINTF_EDIT_MSG32("WM_CLEAR Passed to default");
701 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
703 * used by IE in the EULA box
705 case WM_ALTTABACTIVE
:
706 DPRINTF_EDIT_MSG32("WM_ALTTABACTIVE");
707 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
709 DPRINTF_EDIT_MSG32("WM_GETDLGCODE");
710 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
712 DPRINTF_EDIT_MSG32("WM_SETFONT");
713 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
717 if ((uMsg
>= WM_USER
) && (uMsg
< WM_APP
)) {
718 FIXME("Unknown message 0x%x Passed to default hwnd=%p, wParam=%08x, lParam=%08x\n",
719 uMsg
, hwnd
, (UINT
)wParam
, (UINT
)lParam
);
722 return DefWindowProcA( hwnd
,uMsg
,wParam
,lParam
);
725 /***********************************************************************
726 * DllGetVersion [RICHED32.2]
728 * Retrieves version information of the 'RICHED32.DLL'
731 * pdvi [O] pointer to version information structure.
735 * Failure: E_INVALIDARG
738 * Returns version of a comctl32.dll from IE4.01 SP1.
742 RICHED32_DllGetVersion (DLLVERSIONINFO
*pdvi
)
746 if (pdvi
->cbSize
!= sizeof(DLLVERSIONINFO
)) {
751 pdvi
->dwMajorVersion
= 4;
752 pdvi
->dwMinorVersion
= 0;
753 pdvi
->dwBuildNumber
= 0;
754 pdvi
->dwPlatformID
= 0;
761 * Registers the window class.
769 VOID
RICHED32_Register(void)
775 ZeroMemory(&wndClass
, sizeof(WNDCLASSA
));
776 wndClass
.style
= CS_HREDRAW
| CS_VREDRAW
| CS_GLOBALCLASS
;
777 wndClass
.lpfnWndProc
= (WNDPROC
)RICHED32_WindowProc
;
778 wndClass
.cbClsExtra
= 0;
779 wndClass
.cbWndExtra
= 0; /*(sizeof(RICHED32_INFO *);*/
780 wndClass
.hCursor
= LoadCursorA(0, IDC_ARROWA
);
781 wndClass
.hbrBackground
= (HBRUSH
)(COLOR_WINDOW
+ 1);
782 wndClass
.lpszClassName
= RICHEDIT_CLASS10A
; /* WC_RICHED32A; */
784 RegisterClassA (&wndClass
);
789 * Unregisters the window class.
797 VOID
RICHED32_Unregister(void)
801 UnregisterClassA(RICHEDIT_CLASS10A
, NULL
);
804 INT
RICHEDIT_GetTextRange(HWND hwnd
,TEXTRANGEA
*tr
)
806 UINT alloc_size
, text_size
, range_size
;
809 TRACE("start: 0x%x stop: 0x%x\n",(INT
)tr
->chrg
.cpMin
,(INT
)tr
->chrg
.cpMax
);
811 if (!(alloc_size
= SendMessageA(hwnd
,WM_GETTEXTLENGTH
,0,0))) return FALSE
;
812 if (!(text
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, (alloc_size
+1))))
814 text_size
= SendMessageA(hwnd
,WM_GETTEXT
,alloc_size
,(INT
)text
);
816 if (text_size
> tr
->chrg
.cpMin
)
818 range_size
= (text_size
> tr
->chrg
.cpMax
) ? (tr
->chrg
.cpMax
- tr
->chrg
.cpMin
) : (text_size
- tr
->chrg
.cpMin
);
819 TRACE("EditText: %.30s ...\n",text
+tr
->chrg
.cpMin
);
820 memcpy(tr
->lpstrText
,text
+tr
->chrg
.cpMin
,range_size
);
823 HeapFree(GetProcessHeap(), 0, text
);
828 INT
RICHEDIT_GetSelText(HWND hwnd
,LPSTR lpstrBuffer
)
830 TEXTRANGEA textrange
;
832 textrange
.lpstrText
= lpstrBuffer
;
833 SendMessageA(hwnd
,EM_GETSEL
,(INT
)&textrange
.chrg
.cpMin
,(INT
)&textrange
.chrg
.cpMax
);
834 return RICHEDIT_GetTextRange(hwnd
,&textrange
);