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 = (HANDLE)NULL;
46 /* LPSTR RICHED32_aSubclass = (LPSTR)NULL; */
48 #define DPRINTF_EDIT_MSG32(str) \
50 "32 bit : " str ": hwnd=%08x, wParam=%08x, lParam=%08x\n"\
52 hwnd, (UINT)wParam, (UINT)lParam)
55 /***********************************************************************
56 * RICHED32_LibMain [Internal] Initializes the internal 'RICHED32.DLL'.
59 * hinstDLL [I] handle to the DLL's instance
61 * lpvReserved [I] reserved, must be NULL
69 RICHED32_LibMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
74 case DLL_PROCESS_ATTACH:
75 /* create private heap */
76 RICHED32_hHeap = HeapCreate (0, 0x10000, 0);
77 /* register the Rich Edit class */
81 case DLL_PROCESS_DETACH:
82 /* unregister all common control classes */
83 RICHED32_Unregister ();
84 HeapDestroy (RICHED32_hHeap);
85 RICHED32_hHeap = (HANDLE)NULL;
91 /* Support routines for window procedure */
92 INT RICHEDIT_GetTextRange(HWND hwnd,TEXTRANGEA *tr);
93 INT RICHEDIT_GetSelText(HWND hwnd,LPSTR lpstrBuffer);
99 * Window procedure of the RichEdit control.
102 static LRESULT WINAPI RICHED32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
105 int RTFToBuffer(char* pBuffer, int nBufferSize);
109 static HWND hwndEdit;
110 static HWND hwndParent;
111 static char* rtfBuffer;
115 TRACE("previous hwndEdit: 0x%x hwndParent 0x%x\n",hwndEdit,hwndParent);
116 hwndEdit = GetWindow(hwnd,GW_CHILD);
117 TRACE("uMsg: 0x%x hwnd: 0x%x hwndEdit: 0x%x\n",uMsg,hwnd,hwndEdit);
123 DPRINTF_EDIT_MSG32("WM_CREATE");
125 /* remove SCROLLBARS from the current window style */
126 hwndParent = ((LPCREATESTRUCTA) lParam)->hwndParent;
128 newstyle = style = ((LPCREATESTRUCTA) lParam)->style;
129 newstyle &= ~WS_HSCROLL;
130 newstyle &= ~WS_VSCROLL;
131 newstyle &= ~ES_AUTOHSCROLL;
132 newstyle &= ~ES_AUTOVSCROLL;
134 TRACE("previous hwndEdit: 0x%d\n",hwndEdit);
135 hwndEdit = CreateWindowA ("edit", ((LPCREATESTRUCTA) lParam)->lpszName,
137 hwnd, (HMENU) ID_EDIT,
138 ((LPCREATESTRUCTA) lParam)->hInstance, NULL) ;
139 TRACE("hwndEdit: 0x%x hwnd: 0x%x\n",hwndEdit,hwnd);
141 SetWindowLongA(hwnd,GWL_STYLE, newstyle);
145 DPRINTF_EDIT_MSG32("WM_SETFOCUS");
146 SetFocus (hwndEdit) ;
150 DPRINTF_EDIT_MSG32("WM_SIZE");
151 MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;
155 DPRINTF_EDIT_MSG32("WM_COMMAND");
156 switch(HIWORD(wParam)) {
163 return SendMessageA(hwndParent, WM_COMMAND,
164 wParam, (LPARAM)(hwnd));
168 MessageBoxA (hwnd, "RichEdit control out of space.",
169 "ERROR", MB_OK | MB_ICONSTOP) ;
174 DPRINTF_EDIT_MSG32("EM_STREAMIN");
176 /* setup the RTF parser */
177 RTFSetEditStream(( EDITSTREAM*)lParam);
178 rtfFormat = wParam&(SF_TEXT|SF_RTF);
186 rtfBufferSize = RTFToBuffer(NULL, 0);
187 rtfBuffer = HeapAlloc(RICHED32_hHeap, 0,rtfBufferSize*sizeof(char));
190 RTFToBuffer(rtfBuffer, rtfBufferSize);
191 SetWindowTextA(hwndEdit,rtfBuffer);
192 HeapFree(RICHED32_hHeap, 0,rtfBuffer);
195 WARN("Not enough memory for a allocating rtfBuffer\n");
199 /* Messages specific to Richedit controls */
201 case EM_AUTOURLDETECT:
202 DPRINTF_EDIT_MSG32("EM_AUTOURLDETECT Ignored");
206 DPRINTF_EDIT_MSG32("EM_CANPASTE Ignored");
210 DPRINTF_EDIT_MSG32("EM_CANREDO Ignored");
214 DPRINTF_EDIT_MSG32("EM_DISPLAYBAND Ignored");
218 DPRINTF_EDIT_MSG32("EM_EXGETSEL -> EM_GETSEL");
219 cr = (VOID *) lParam;
220 if (hwndEdit) SendMessageA( hwndEdit, EM_GETSEL, (INT)&cr->cpMin, (INT)&cr->cpMax);
221 TRACE("cpMin: 0x%x cpMax: 0x%x\n",(INT)cr->cpMin,(INT)cr->cpMax);
226 DWORD limit = lParam;
227 DPRINTF_EDIT_MSG32("EM_EXLIMITTEXT");
232 return SendMessageA(hwndEdit,EM_SETLIMITTEXT,limit,0);
235 case EM_EXLINEFROMCHAR:
236 DPRINTF_EDIT_MSG32("EM_EXLINEFROMCHAR -> LINEFROMCHAR");
237 if (hwndEdit) return SendMessageA( hwndEdit, EM_LINEFROMCHAR, lParam, wParam);
241 DPRINTF_EDIT_MSG32("EM_EXSETSEL -> EM_SETSEL");
242 cr = (VOID *) lParam;
243 if (hwndEdit) SendMessageA( hwndEdit, EM_SETSEL, cr->cpMin, cr->cpMax);
247 DPRINTF_EDIT_MSG32("EM_FINDTEXT Ignored");
251 DPRINTF_EDIT_MSG32("EM_FINDTEXTEX Ignored");
255 DPRINTF_EDIT_MSG32("EM_FINDTEXTEXW Ignored");
259 DPRINTF_EDIT_MSG32("EM_FINDTEXTW Ignored");
262 case EM_FINDWORDBREAK:
263 DPRINTF_EDIT_MSG32("EM_FINDWORDBREAK Ignored");
267 DPRINTF_EDIT_MSG32("EM_FORMATRANGE Ignored");
270 case EM_GETAUTOURLDETECT:
271 DPRINTF_EDIT_MSG32("EM_GETAUTOURLDETECT Ignored");
274 case EM_GETBIDIOPTIONS:
275 DPRINTF_EDIT_MSG32("EM_GETBIDIOPTIONS Ignored");
278 case EM_GETCHARFORMAT:
279 DPRINTF_EDIT_MSG32("EM_GETCHARFORMAT Ignored");
282 case EM_GETEDITSTYLE:
283 DPRINTF_EDIT_MSG32("EM_GETEDITSTYLE Ignored");
286 case EM_GETEVENTMASK:
287 DPRINTF_EDIT_MSG32("EM_GETEVENTMASK Ignored");
291 DPRINTF_EDIT_MSG32("EM_GETIMECOLOR Ignored");
294 case EM_GETIMECOMPMODE:
295 DPRINTF_EDIT_MSG32("EM_GETIMECOMPMODE Ignored");
298 case EM_GETIMEOPTIONS:
299 DPRINTF_EDIT_MSG32("EM_GETIMEOPTIONS Ignored");
302 case EM_GETLANGOPTIONS:
303 DPRINTF_EDIT_MSG32("STUB: EM_GETLANGOPTIONS");
306 case EM_GETOLEINTERFACE:
307 DPRINTF_EDIT_MSG32("EM_GETOLEINTERFACE Ignored");
311 DPRINTF_EDIT_MSG32("EM_GETOPTIONS Ignored");
314 case EM_GETPARAFORMAT:
315 DPRINTF_EDIT_MSG32("EM_GETPARAFORMAT Ignored");
318 case EM_GETPUNCTUATION:
319 DPRINTF_EDIT_MSG32("EM_GETPUNCTUATION Ignored");
323 DPRINTF_EDIT_MSG32("EM_GETREDONAME Ignored");
326 case EM_GETSCROLLPOS:
327 DPRINTF_EDIT_MSG32("EM_GETSCROLLPOS Ignored");
331 DPRINTF_EDIT_MSG32("EM_GETSELTEXT");
332 return RICHEDIT_GetSelText(hwndEdit,(void *)lParam);
335 DPRINTF_EDIT_MSG32("EM_GETTEXTEX Ignored");
338 case EM_GETTEXTLENGTHEX:
339 DPRINTF_EDIT_MSG32("EM_GETTEXTLENGTHEX Ignored");
343 DPRINTF_EDIT_MSG32("EM_GETTEXTMODE Ignored");
346 case EM_GETTEXTRANGE:
347 DPRINTF_EDIT_MSG32("EM_GETTEXTRANGE");
348 return RICHEDIT_GetTextRange(hwndEdit,(TEXTRANGEA *)lParam);
350 case EM_GETTYPOGRAPHYOPTIONS:
351 DPRINTF_EDIT_MSG32("EM_GETTYPOGRAPHYOPTIONS Ignored");
355 DPRINTF_EDIT_MSG32("EM_GETUNDONAME Ignored");
358 case EM_GETWORDBREAKPROCEX:
359 DPRINTF_EDIT_MSG32("EM_GETWORDBREAKPROCEX Ignored");
362 case EM_GETWORDWRAPMODE:
363 DPRINTF_EDIT_MSG32("EM_GETWORDWRAPMODE Ignored");
367 DPRINTF_EDIT_MSG32("EM_GETZOOM Ignored");
370 case EM_HIDESELECTION:
371 DPRINTF_EDIT_MSG32("EM_HIDESELECTION Ignored");
374 case EM_PASTESPECIAL:
375 DPRINTF_EDIT_MSG32("EM_PASTESPECIAL Ignored");
378 case EM_RECONVERSION:
379 DPRINTF_EDIT_MSG32("EM_RECONVERSION Ignored");
383 DPRINTF_EDIT_MSG32("EM_REDO Ignored");
386 case EM_REQUESTRESIZE:
387 DPRINTF_EDIT_MSG32("EM_REQUESTRESIZE Ignored");
390 case EM_SELECTIONTYPE:
391 DPRINTF_EDIT_MSG32("EM_SELECTIONTYPE Ignored");
394 case EM_SETBIDIOPTIONS:
395 DPRINTF_EDIT_MSG32("EM_SETBIDIOPTIONS Ignored");
398 case EM_SETBKGNDCOLOR:
399 DPRINTF_EDIT_MSG32("EM_SETBKGNDCOLOR Ignored");
402 case EM_SETCHARFORMAT:
403 DPRINTF_EDIT_MSG32("EM_SETCHARFORMAT Ignored");
406 case EM_SETEDITSTYLE:
407 DPRINTF_EDIT_MSG32("EM_SETEDITSTYLE Ignored");
410 case EM_SETEVENTMASK:
411 DPRINTF_EDIT_MSG32("EM_SETEVENTMASK Ignored");
415 DPRINTF_EDIT_MSG32("EM_SETFONTSIZE Ignored");
419 DPRINTF_EDIT_MSG32("EM_SETIMECOLO Ignored");
422 case EM_SETIMEOPTIONS:
423 DPRINTF_EDIT_MSG32("EM_SETIMEOPTIONS Ignored");
426 case EM_SETLANGOPTIONS:
427 DPRINTF_EDIT_MSG32("EM_SETLANGOPTIONS Ignored");
430 case EM_SETOLECALLBACK:
431 DPRINTF_EDIT_MSG32("EM_SETOLECALLBACK Ignored");
435 DPRINTF_EDIT_MSG32("EM_SETOPTIONS Ignored");
439 DPRINTF_EDIT_MSG32("EM_SETPALETTE Ignored");
442 case EM_SETPARAFORMAT:
443 DPRINTF_EDIT_MSG32("EM_SETPARAFORMAT Ignored");
446 case EM_SETPUNCTUATION:
447 DPRINTF_EDIT_MSG32("EM_SETPUNCTUATION Ignored");
450 case EM_SETSCROLLPOS:
451 DPRINTF_EDIT_MSG32("EM_SETSCROLLPOS Ignored");
454 case EM_SETTARGETDEVICE:
455 DPRINTF_EDIT_MSG32("EM_SETTARGETDEVICE Ignored");
459 DPRINTF_EDIT_MSG32("EM_SETTEXTEX Ignored");
463 DPRINTF_EDIT_MSG32("EM_SETTEXTMODE Ignored");
466 case EM_SETTYPOGRAPHYOPTIONS:
467 DPRINTF_EDIT_MSG32("EM_SETTYPOGRAPHYOPTIONS Ignored");
470 case EM_SETUNDOLIMIT:
471 DPRINTF_EDIT_MSG32("EM_SETUNDOLIMIT Ignored");
474 case EM_SETWORDBREAKPROCEX:
475 DPRINTF_EDIT_MSG32("EM_SETWORDBREAKPROCEX Ignored");
478 case EM_SETWORDWRAPMODE:
479 DPRINTF_EDIT_MSG32("EM_SETWORDWRAPMODE Ignored");
483 DPRINTF_EDIT_MSG32("EM_SETZOOM Ignored");
486 case EM_SHOWSCROLLBAR:
487 DPRINTF_EDIT_MSG32("EM_SHOWSCROLLBAR Ignored");
490 case EM_STOPGROUPTYPING:
491 DPRINTF_EDIT_MSG32("EM_STOPGROUPTYPING Ignored");
495 DPRINTF_EDIT_MSG32("EM_STREAMOUT Ignored");
498 /* Messages dispatched to the edit control */
500 DPRINTF_EDIT_MSG32("EM_CANUNDO Passed to edit control");
501 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
503 DPRINTF_EDIT_MSG32("EM_CHARFROMPOS Passed to edit control");
504 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
505 case EM_EMPTYUNDOBUFFER:
506 DPRINTF_EDIT_MSG32("EM_EMPTYUNDOBUFFER Passed to edit control");
507 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
509 DPRINTF_EDIT_MSG32("EM_FMTLINES Passed to edit control");
510 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
511 case EM_GETFIRSTVISIBLELINE:
512 DPRINTF_EDIT_MSG32("EM_GETFIRSTVISIBLELINE Passed to edit control");
513 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
515 DPRINTF_EDIT_MSG32("EM_GETHANDLE Passed to edit control");
516 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
517 /* case EM_GETIMESTATUS:*/
518 case EM_GETLIMITTEXT:
519 DPRINTF_EDIT_MSG32("EM_GETLIMITTEXT Passed to edit control");
520 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
522 DPRINTF_EDIT_MSG32("EM_GETLINE Passed to edit control");
523 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
524 case EM_GETLINECOUNT:
525 DPRINTF_EDIT_MSG32("EM_GETLINECOUNT Passed to edit control");
526 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
528 DPRINTF_EDIT_MSG32("EM_GETMARGINS Passed to edit control");
529 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
531 DPRINTF_EDIT_MSG32("EM_GETMODIFY Passed to edit control");
532 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
533 case EM_GETPASSWORDCHAR:
534 DPRINTF_EDIT_MSG32("EM_GETPASSWORDCHAR Passed to edit control");
535 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
537 DPRINTF_EDIT_MSG32("EM_GETRECT Passed to edit control");
538 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
540 DPRINTF_EDIT_MSG32("EM_GETSEL Passed to edit control");
541 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
543 DPRINTF_EDIT_MSG32("EM_GETTHUMB Passed to edit control");
544 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
545 case EM_GETWORDBREAKPROC:
546 DPRINTF_EDIT_MSG32("EM_GETWORDBREAKPROC Passed to edit control");
547 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
548 case EM_LINEFROMCHAR:
549 DPRINTF_EDIT_MSG32("EM_LINEFROMCHAR Passed to edit control");
550 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
552 DPRINTF_EDIT_MSG32("EM_LINEINDEX Passed to edit control");
553 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
555 DPRINTF_EDIT_MSG32("EM_LINELENGTH Passed to edit control");
556 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
558 DPRINTF_EDIT_MSG32("EM_LINESCROLL Passed to edit control");
559 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
561 DPRINTF_EDIT_MSG32("EM_POSFROMCHAR Passed to edit control");
562 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
564 DPRINTF_EDIT_MSG32("case EM_REPLACESEL Passed to edit control");
565 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
567 DPRINTF_EDIT_MSG32("case EM_SCROLL Passed to edit control");
568 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
570 DPRINTF_EDIT_MSG32("EM_SCROLLCARET Passed to edit control");
571 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
573 DPRINTF_EDIT_MSG32("EM_SETHANDLE Passed to edit control");
574 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
575 /* case EM_SETIMESTATUS:*/
576 case EM_SETLIMITTEXT:
577 DPRINTF_EDIT_MSG32("EM_SETLIMITTEXT Passed to edit control");
578 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
580 DPRINTF_EDIT_MSG32("case EM_SETMARGINS Passed to edit control");
581 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
583 DPRINTF_EDIT_MSG32("EM_SETMODIFY Passed to edit control");
584 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
585 case EM_SETPASSWORDCHAR:
586 DPRINTF_EDIT_MSG32("EM_SETPASSWORDCHAR Passed to edit control");
587 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
589 DPRINTF_EDIT_MSG32("EM_SETREADONLY Passed to edit control");
590 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
592 DPRINTF_EDIT_MSG32("EM_SETRECT Passed to edit control");
593 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
595 DPRINTF_EDIT_MSG32("EM_SETRECTNP Passed to edit control");
596 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
598 DPRINTF_EDIT_MSG32("EM_SETSEL Passed to edit control");
599 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
601 DPRINTF_EDIT_MSG32("EM_SETTABSTOPS Passed to edit control");
602 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
603 case EM_SETWORDBREAKPROC:
604 DPRINTF_EDIT_MSG32("EM_SETWORDBREAKPROC Passed to edit control");
605 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
607 DPRINTF_EDIT_MSG32("EM_UNDO Passed to edit control");
608 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
610 case WM_STYLECHANGING:
611 DPRINTF_EDIT_MSG32("WM_STYLECHANGING Passed to edit control");
612 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
613 case WM_STYLECHANGED:
614 DPRINTF_EDIT_MSG32("WM_STYLECHANGED Passed to edit control");
615 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
617 DPRINTF_EDIT_MSG32("WM_NCCALCSIZE Passed to edit control");
618 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
620 DPRINTF_EDIT_MSG32("WM_GETTEXT Passed to edit control");
621 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
622 case WM_GETTEXTLENGTH:
623 DPRINTF_EDIT_MSG32("WM_GETTEXTLENGTH Passed to edit control");
624 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
626 DPRINTF_EDIT_MSG32("WM_SETTEXT Passed to edit control");
627 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
629 DPRINTF_EDIT_MSG32("WM_CUT Passed to edit control");
630 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
632 DPRINTF_EDIT_MSG32("WM_COPY Passed to edit control");
633 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
635 DPRINTF_EDIT_MSG32("WM_PASTE Passed to edit control");
636 return SendMessageA( hwndEdit, uMsg, wParam, lParam);
638 /* Messages passed to default handler. */
640 DPRINTF_EDIT_MSG32("WM_NCPAINT Passed to default");
641 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
643 DPRINTF_EDIT_MSG32("WM_PAINT Passed to default");
644 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
646 DPRINTF_EDIT_MSG32("WM_ERASEBKGND Passed to default");
647 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
649 DPRINTF_EDIT_MSG32("WM_KILLFOCUS Passed to default");
650 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
652 DPRINTF_EDIT_MSG32("WM_DESTROY Passed to default");
653 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
654 case WM_CHILDACTIVATE:
655 DPRINTF_EDIT_MSG32("WM_CHILDACTIVATE Passed to default");
656 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
658 case WM_WINDOWPOSCHANGING:
659 DPRINTF_EDIT_MSG32("WM_WINDOWPOSCHANGING Passed to default");
660 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
661 case WM_WINDOWPOSCHANGED:
662 DPRINTF_EDIT_MSG32("WM_WINDOWPOSCHANGED Passed to default");
663 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
664 /* case WM_INITIALUPDATE:
665 DPRINTF_EDIT_MSG32("WM_INITIALUPDATE Passed to default");
666 return DefWindowProcA( hwnd,uMsg,wParam,lParam); */
667 case WM_CTLCOLOREDIT:
668 DPRINTF_EDIT_MSG32("WM_CTLCOLOREDIT Passed to default");
669 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
671 DPRINTF_EDIT_MSG32("WM_SETCURSOR Passed to default");
672 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
674 DPRINTF_EDIT_MSG32("WM_MOVE Passed to default");
675 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
677 DPRINTF_EDIT_MSG32("WM_SHOWWINDOW Passed to default");
678 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
680 DPRINTF_EDIT_MSG32("WM_NCCREATE Passed to default");
681 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
682 case WM_PARENTNOTIFY:
683 DPRINTF_EDIT_MSG32("WM_PARENTNOTIFY Passed to default");
684 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
686 DPRINTF_EDIT_MSG32("WM_SETREDRAW Passed to default");
687 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
689 DPRINTF_EDIT_MSG32("WM_NCDESTROY Passed to default");
690 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
692 DPRINTF_EDIT_MSG32("WM_NCHITTEST Passed to default");
693 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
694 case WM_CTLCOLORSTATIC:
695 DPRINTF_EDIT_MSG32("WM_CTLCOLORSTATIC Passed to default");
696 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
698 DPRINTF_EDIT_MSG32("WM_NCMOUSEMOVE Passed to default");
699 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
701 DPRINTF_EDIT_MSG32("WM_CLEAR Passed to default");
702 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
704 * used by IE in the EULA box
706 case WM_ALTTABACTIVE:
707 DPRINTF_EDIT_MSG32("WM_ALTTABACTIVE");
708 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
710 DPRINTF_EDIT_MSG32("WM_GETDLGCODE");
711 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
713 DPRINTF_EDIT_MSG32("WM_SETFONT");
714 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
718 FIXME("Unknown message 0x%x Passed to default hwnd=%08x, wParam=%08x, lParam=%08x\n",
719 uMsg, hwnd, (UINT)wParam, (UINT)lParam);
721 return DefWindowProcA( hwnd,uMsg,wParam,lParam);
724 /***********************************************************************
725 * DllGetVersion [RICHED32.2]
727 * Retrieves version information of the 'RICHED32.DLL'
730 * pdvi [O] pointer to version information structure.
734 * Failure: E_INVALIDARG
737 * Returns version of a comctl32.dll from IE4.01 SP1.
741 RICHED32_DllGetVersion (DLLVERSIONINFO *pdvi)
745 if (pdvi->cbSize != sizeof(DLLVERSIONINFO)) {
750 pdvi->dwMajorVersion = 4;
751 pdvi->dwMinorVersion = 0;
752 pdvi->dwBuildNumber = 0;
753 pdvi->dwPlatformID = 0;
760 * Registers the window class.
768 VOID RICHED32_Register(void)
774 ZeroMemory(&wndClass, sizeof(WNDCLASSA));
775 wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
776 wndClass.lpfnWndProc = (WNDPROC)RICHED32_WindowProc;
777 wndClass.cbClsExtra = 0;
778 wndClass.cbWndExtra = 0; /*(sizeof(RICHED32_INFO *);*/
779 wndClass.hCursor = LoadCursorA(0, IDC_ARROWA);
780 wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
781 wndClass.lpszClassName = RICHEDIT_CLASS10A; /* WC_RICHED32A; */
783 RegisterClassA (&wndClass);
788 * Unregisters the window class.
796 VOID RICHED32_Unregister(void)
800 UnregisterClassA(RICHEDIT_CLASS10A, (HINSTANCE)NULL);
803 INT RICHEDIT_GetTextRange(HWND hwnd,TEXTRANGEA *tr)
805 UINT alloc_size, text_size, range_size;
808 TRACE("start: 0x%x stop: 0x%x\n",(INT)tr->chrg.cpMin,(INT)tr->chrg.cpMax);
810 if (!(alloc_size = SendMessageA(hwnd,WM_GETTEXTLENGTH,0,0))) return FALSE;
811 if (!(text = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (alloc_size+1))))
813 text_size = SendMessageA(hwnd,WM_GETTEXT,alloc_size,(INT)text);
815 if (text_size > tr->chrg.cpMin)
817 range_size = (text_size> tr->chrg.cpMax) ? (tr->chrg.cpMax - tr->chrg.cpMin) : (text_size - tr->chrg.cpMin);
818 TRACE("EditText: %.30s ...\n",text+tr->chrg.cpMin);
819 memcpy(tr->lpstrText,text+tr->chrg.cpMin,range_size);
822 HeapFree(GetProcessHeap(), 0, text);
827 INT RICHEDIT_GetSelText(HWND hwnd,LPSTR lpstrBuffer)
829 TEXTRANGEA textrange;
831 textrange.lpstrText = lpstrBuffer;
832 SendMessageA(hwnd,EM_GETSEL,(INT)&textrange.chrg.cpMin,(INT)&textrange.chrg.cpMax);
833 return RICHEDIT_GetTextRange(hwnd,&textrange);