4 * Copyright (C) 2004 Thomas Weidenmueller <w3seek@reactos.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #define WIN32_LEAN_AND_MEAN /* Exclude rarely-used stuff from Windows headers */
39 DWORD nVisibleLinesComplete
;
54 } HEXEDIT_DATA
, *PHEXEDIT_DATA
;
57 #define HEHT_LEFTMARGIN (0x1)
58 #define HEHT_ADDRESS (0x2)
59 #define HEHT_ADDRESSSPACING (0x3)
60 #define HEHT_HEXDUMP (0x4)
61 #define HEHT_HEXDUMPSPACING (0x5)
62 #define HEHT_ASCIIDUMP (0x6)
63 #define HEHT_RIGHTMARGIN (0x7)
65 INT_PTR CALLBACK
HexEditWndProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
69 RegisterHexEditorClass(HINSTANCE hInstance
)
73 ZeroMemory(&WndClass
, sizeof(WNDCLASSEX
));
74 WndClass
.cbSize
= sizeof(WNDCLASSEX
);
75 WndClass
.style
= CS_DBLCLKS
;
76 WndClass
.lpfnWndProc
= (WNDPROC
)HexEditWndProc
;
77 WndClass
.cbWndExtra
= sizeof(PHEXEDIT_DATA
);
78 WndClass
.hInstance
= hInstance
;
79 WndClass
.hCursor
= LoadCursor(0, IDC_IBEAM
);
80 WndClass
.hbrBackground
= (HBRUSH
)(COLOR_WINDOW
+ 1);
81 WndClass
.lpszClassName
= HEX_EDIT_CLASS_NAME
;
83 return RegisterClassEx(&WndClass
);
88 UnregisterHexEditorClass(HINSTANCE hInstance
)
90 return UnregisterClass(HEX_EDIT_CLASS_NAME
, hInstance
);
93 /*** Helper functions *********************************************************/
96 HEXEDIT_MoveCaret(PHEXEDIT_DATA hed
, BOOL Scroll
)
100 si
.cbSize
= sizeof(SCROLLINFO
);
102 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
106 if(si
.nPos
> hed
->CaretLine
)
108 si
.nPos
= hed
->CaretLine
;
109 SetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
, TRUE
);
110 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
111 InvalidateRect(hed
->hWndSelf
, NULL
, TRUE
);
113 else if(hed
->CaretLine
>= (hed
->nVisibleLinesComplete
+ si
.nPos
))
115 si
.nPos
= hed
->CaretLine
- hed
->nVisibleLinesComplete
+ 1;
116 SetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
, TRUE
);
117 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
118 InvalidateRect(hed
->hWndSelf
, NULL
, TRUE
);
122 if(hed
->EditingField
)
123 SetCaretPos(hed
->LeftMargin
+ ((4 + hed
->AddressSpacing
+ (3 * hed
->CaretCol
)) * hed
->CharWidth
) - 1, (hed
->CaretLine
- si
.nPos
) * hed
->LineHeight
);
125 SetCaretPos(hed
->LeftMargin
+ ((4 + hed
->AddressSpacing
+ hed
->SplitSpacing
+ (3 * hed
->ColumnsPerLine
) + hed
->CaretCol
) * hed
->CharWidth
) - 2, (hed
->CaretLine
- si
.nPos
) * hed
->LineHeight
);
129 HEXEDIT_Update(PHEXEDIT_DATA hed
)
134 DWORD bufsize
, cvislines
;
136 GetClientRect(hed
->hWndSelf
, &rcClient
);
137 hed
->style
= GetWindowLong(hed
->hWndSelf
, GWL_STYLE
);
139 bufsize
= (hed
->hBuffer
? LocalSize(hed
->hBuffer
) : 0);
140 hed
->nLines
= max(bufsize
/ hed
->ColumnsPerLine
, 1);
141 if(bufsize
> hed
->ColumnsPerLine
&& (bufsize
% hed
->ColumnsPerLine
) > 0)
146 if(hed
->LineHeight
> 0)
148 hed
->nVisibleLinesComplete
= cvislines
= rcClient
.bottom
/ hed
->LineHeight
;
149 hed
->nVisibleLines
= hed
->nVisibleLinesComplete
;
150 if(rcClient
.bottom
% hed
->LineHeight
)
152 hed
->nVisibleLines
++;
157 hed
->nVisibleLines
= cvislines
= 0;
160 SbVisible
= bufsize
> 0 && cvislines
< hed
->nLines
;
161 ShowScrollBar(hed
->hWndSelf
, SB_VERT
, SbVisible
);
163 /* update scrollbar */
164 si
.cbSize
= sizeof(SCROLLINFO
);
165 si
.fMask
= SIF_RANGE
| SIF_PAGE
;
167 si
.nMax
= ((bufsize
> 0) ? hed
->nLines
- 1 : 0);
168 si
.nPage
= ((hed
->LineHeight
> 0) ? rcClient
.bottom
/ hed
->LineHeight
: 0);
169 SetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
, TRUE
);
171 if(IsWindowVisible(hed
->hWndSelf
) && SbVisible
!= hed
->SbVisible
)
173 InvalidateRect(hed
->hWndSelf
, NULL
, TRUE
);
176 hed
->SbVisible
= SbVisible
;
180 HEXEDIT_GetFixedFont(VOID
)
183 GetObject(GetStockObject(ANSI_FIXED_FONT
), sizeof(LOGFONT
), &lf
);
184 return CreateFontIndirect(&lf
);
188 HEXEDIT_PaintLines(PHEXEDIT_DATA hed
, HDC hDC
, DWORD ScrollPos
, DWORD First
, DWORD Last
, RECT
*rc
)
190 DWORD x
, dx
, dy
, linestart
;
191 PBYTE buf
, current
, end
, line
;
193 TCHAR hex
[3], addr
[17];
196 FillRect(hDC
, rc
, (HBRUSH
)(COLOR_WINDOW
+ 1));
200 bufsize
= LocalSize(hed
->hBuffer
);
201 buf
= LocalLock(hed
->hBuffer
);
208 if(ScrollPos
+ First
== 0)
211 _stprintf(addr
, _T("%04X"), 0);
212 TextOut(hDC
, hed
->LeftMargin
, First
* hed
->LineHeight
, addr
, 4);
219 dy
= First
* hed
->LineHeight
;
220 linestart
= (ScrollPos
+ First
) * hed
->ColumnsPerLine
;
221 current
= buf
+ linestart
;
222 Last
= min(hed
->nLines
- ScrollPos
, Last
);
224 while(First
<= Last
&& current
< end
)
228 dx
= hed
->LeftMargin
;
231 _stprintf(addr
, _T("%04lX"), linestart
);
232 TextOut(hDC
, dx
, dy
, addr
, 4);
234 dx
+= ((4 + hed
->AddressSpacing
) * hed
->CharWidth
);
235 dh
= (3 * hed
->CharWidth
);
239 rct
.right
= rct
.left
+ dh
;
240 rct
.bottom
= dy
+ hed
->LineHeight
;
243 dx
+= (hed
->CharWidth
/ 2);
245 for(x
= 0; x
< hed
->ColumnsPerLine
&& current
< end
; x
++)
250 _stprintf(hex
, _T("%02X"), *(current
++));
251 ExtTextOut(hDC
, dx
, dy
, ETO_OPAQUE
, &rct
, hex
, 2, NULL
);
256 dx
= ((4 + hed
->AddressSpacing
+ hed
->SplitSpacing
+ (hed
->ColumnsPerLine
* 3)) * hed
->CharWidth
);
258 for(x
= 0; x
< hed
->ColumnsPerLine
&& current
< end
; x
++)
260 _stprintf(hex
, _T("%C"), *(current
++));
261 hex
[0] = ((hex
[0] & _T('\x007f')) >= _T(' ') ? hex
[0] : _T('.'));
262 TextOut(hDC
, dx
, dy
, hex
, 1);
263 dx
+= hed
->CharWidth
;
266 dy
+= hed
->LineHeight
;
267 linestart
+= hed
->ColumnsPerLine
;
272 LocalUnlock(hed
->hBuffer
);
276 HEXEDIT_HitRegionTest(PHEXEDIT_DATA hed
, POINTS pt
)
280 if(pt
.x
<= hed
->LeftMargin
)
282 return HEHT_LEFTMARGIN
;
285 pt
.x
-= hed
->LeftMargin
;
286 d
= (4 * hed
->CharWidth
);
293 d
= (hed
->AddressSpacing
* hed
->CharWidth
);
296 return HEHT_ADDRESSSPACING
;
300 d
= (3 * hed
->ColumnsPerLine
* hed
->CharWidth
);
307 d
= (hed
->SplitSpacing
* hed
->CharWidth
);
310 return HEHT_HEXDUMPSPACING
;
314 d
= (hed
->ColumnsPerLine
* hed
->CharWidth
);
317 return HEHT_ASCIIDUMP
;
320 return HEHT_RIGHTMARGIN
;
324 HEXEDIT_PositionFromPoint(PHEXEDIT_DATA hed
, POINTS pt
, DWORD Hit
, POINT
*EditPos
, BOOL
*EditField
)
329 si
.cbSize
= sizeof(SCROLLINFO
);
331 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
335 if(hed
->LineHeight
> 0)
337 EditPos
->y
= min(si
.nPos
+ (pt
.y
/ hed
->LineHeight
), hed
->nLines
- 1);
341 EditPos
->y
= si
.nPos
;
346 case HEHT_LEFTMARGIN
:
348 case HEHT_ADDRESSSPACING
:
350 pt
.x
-= hed
->LeftMargin
+ ((4 + hed
->AddressSpacing
) * hed
->CharWidth
);
355 pt
.x
-= hed
->LeftMargin
+ ((4 + hed
->AddressSpacing
+ hed
->SplitSpacing
+ (3 * hed
->ColumnsPerLine
)) * hed
->CharWidth
);
362 INT BlockWidth
= (*EditField
? hed
->CharWidth
* 3 : hed
->CharWidth
);
363 EditPos
->x
= min(hed
->ColumnsPerLine
, pt
.x
/ BlockWidth
);
366 bufsize
= (hed
->hBuffer
? LocalSize(hed
->hBuffer
) : 0);
367 Pos
= (EditPos
->y
* hed
->ColumnsPerLine
) + EditPos
->x
;
370 INT tmp
= bufsize
% hed
->ColumnsPerLine
;
372 EditPos
->x
= (tmp
== 0 ? hed
->ColumnsPerLine
: tmp
);
377 /*** Control specific messages ************************************************/
380 HEXEDIT_HEM_LOADBUFFER(PHEXEDIT_DATA hed
, PVOID Buffer
, DWORD Size
)
382 if(Buffer
!= NULL
&& Size
> 0)
386 if(hed
->MaxBuffer
> 0 && Size
> hed
->MaxBuffer
)
388 Size
= hed
->MaxBuffer
;
395 if(LocalSize(hed
->hBuffer
) != Size
)
397 hed
->hBuffer
= LocalReAlloc(hed
->hBuffer
, Size
, LMEM_MOVEABLE
| LMEM_ZEROINIT
);
402 hed
->hBuffer
= LocalFree(hed
->hBuffer
);
411 hed
->hBuffer
= LocalAlloc(LHND
, Size
);
416 buf
= LocalLock(hed
->hBuffer
);
419 memcpy(buf
, Buffer
, Size
);
423 LocalUnlock(hed
->hBuffer
);
430 else if(hed
->hBuffer
)
433 hed
->hBuffer
= LocalFree(hed
->hBuffer
);
441 HEXEDIT_HEM_COPYBUFFER(PHEXEDIT_DATA hed
, PVOID Buffer
, DWORD Size
)
450 if(Buffer
!= NULL
&& Size
> 0)
452 nCpy
= min(Size
, LocalSize(hed
->hBuffer
));
457 buf
= LocalLock(hed
->hBuffer
);
460 memcpy(Buffer
, buf
, nCpy
);
464 LocalUnlock(hed
->hBuffer
);
469 return (LRESULT
)LocalSize(hed
->hBuffer
);
473 HEXEDIT_HEM_SETMAXBUFFERSIZE(PHEXEDIT_DATA hed
, DWORD nMaxSize
)
475 hed
->MaxBuffer
= nMaxSize
;
476 if(hed
->MaxBuffer
> 0 && hed
->hBuffer
&& LocalSize(hed
->hBuffer
) > hed
->MaxBuffer
)
478 /* truncate the buffer */
479 hed
->hBuffer
= LocalReAlloc(hed
->hBuffer
, hed
->MaxBuffer
, LMEM_MOVEABLE
);
485 /*** Message Proc *************************************************************/
488 HEXEDIT_WM_NCCREATE(HWND hWnd
, CREATESTRUCT
*cs
)
492 if(!(hed
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(HEXEDIT_DATA
))))
497 hed
->hWndSelf
= hWnd
;
498 hed
->hWndParent
= cs
->hwndParent
;
499 hed
->style
= cs
->style
;
501 hed
->ColumnsPerLine
= 8;
503 hed
->AddressSpacing
= 2;
504 hed
->SplitSpacing
= 2;
505 hed
->EditingField
= TRUE
; /* in hexdump field */
507 SetWindowLongPtr(hWnd
, 0, (DWORD_PTR
)hed
);
514 HEXEDIT_WM_NCDESTROY(PHEXEDIT_DATA hed
)
518 while(LocalUnlock(hed
->hBuffer
));
519 LocalFree(hed
->hBuffer
);
524 DeleteObject(hed
->hFont
);
527 SetWindowLongPtr(hed
->hWndSelf
, 0, (DWORD_PTR
)0);
528 HeapFree(GetProcessHeap(), 0, hed
);
534 HEXEDIT_WM_CREATE(PHEXEDIT_DATA hed
)
540 HEXEDIT_WM_SETFOCUS(PHEXEDIT_DATA hed
)
542 CreateCaret(hed
->hWndSelf
, 0, 1, hed
->LineHeight
);
543 HEXEDIT_MoveCaret(hed
, FALSE
);
544 ShowCaret(hed
->hWndSelf
);
549 HEXEDIT_WM_KILLFOCUS(PHEXEDIT_DATA hed
)
556 HEXEDIT_WM_VSCROLL(PHEXEDIT_DATA hed
, WORD ThumbPosition
, WORD SbCmd
)
561 ZeroMemory(&si
, sizeof(SCROLLINFO
));
562 si
.cbSize
= sizeof(SCROLLINFO
);
564 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
594 si
.nPos
= si
.nTrackPos
;
599 SetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
, TRUE
);
600 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
602 if(si
.nPos
!= ScrollY
)
604 ScrollWindow(hed
->hWndSelf
, 0, (ScrollY
- si
.nPos
) * hed
->LineHeight
, NULL
, NULL
);
605 UpdateWindow(hed
->hWndSelf
);
612 HEXEDIT_WM_SETFONT(PHEXEDIT_DATA hed
, HFONT hFont
, BOOL bRedraw
)
620 hFont
= HEXEDIT_GetFixedFont();
624 hDC
= GetDC(hed
->hWndSelf
);
627 hOldFont
= SelectObject(hDC
, hFont
);
629 GetTextMetrics(hDC
, &tm
);
630 hed
->LineHeight
= tm
.tmHeight
;
631 hed
->CharWidth
= tm
.tmAveCharWidth
;
634 SelectObject(hDC
, hOldFont
);
636 ReleaseDC(hed
->hWndSelf
, hDC
);
640 InvalidateRect(hed
->hWndSelf
, NULL
, TRUE
);
647 HEXEDIT_WM_GETFONT(PHEXEDIT_DATA hed
)
649 return (LRESULT
)hed
->hFont
;
653 HEXEDIT_WM_PAINT(PHEXEDIT_DATA hed
)
658 HBITMAP hbmp
, hbmpold
;
659 DWORD nLines
, nFirst
;
664 if(GetUpdateRect(hed
->hWndSelf
, &rc
, FALSE
) && (hed
->LineHeight
> 0))
666 ZeroMemory(&si
, sizeof(SCROLLINFO
));
667 si
.cbSize
= sizeof(SCROLLINFO
);
669 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
671 height
= (rc
.bottom
- rc
.top
);
672 nLines
= height
/ hed
->LineHeight
;
673 if((height
% hed
->LineHeight
) > 0)
677 if(nLines
> hed
->nLines
- si
.nPos
)
679 nLines
= hed
->nLines
- si
.nPos
;
681 nFirst
= rc
.top
/ hed
->LineHeight
;
683 BeginPaint(hed
->hWndSelf
, &ps
);
684 if(!(hTempDC
= CreateCompatibleDC(ps
.hdc
)))
686 FillRect(ps
.hdc
, &rc
, (HBRUSH
)(COLOR_WINDOW
+ 1));
689 if(!(hbmp
= CreateCompatibleBitmap(hTempDC
, ps
.rcPaint
.right
, ps
.rcPaint
.bottom
)))
691 FillRect(ps
.hdc
, &rc
, (HBRUSH
)(COLOR_WINDOW
+ 1));
695 hbmpold
= SelectObject(hTempDC
, hbmp
);
696 hOldFont
= SelectObject(hTempDC
, hed
->hFont
);
697 HEXEDIT_PaintLines(hed
, hTempDC
, si
.nPos
, nFirst
, nFirst
+ nLines
, &ps
.rcPaint
);
698 BitBlt(ps
.hdc
, rc
.left
, rc
.top
, rc
.right
- rc
.left
, rc
.bottom
- rc
.top
, hTempDC
, rc
.left
, rc
.top
, SRCCOPY
);
699 SelectObject(hTempDC
, hOldFont
);
700 SelectObject(hTempDC
, hbmpold
);
706 EndPaint(hed
->hWndSelf
, &ps
);
713 HEXEDIT_WM_MOUSEWHEEL(PHEXEDIT_DATA hed
, int cyMoveLines
, WORD ButtonsDown
, LPPOINTS MousePos
)
718 SetFocus(hed
->hWndSelf
);
720 si
.cbSize
= sizeof(SCROLLINFO
);
722 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
727 si
.nPos
+= cyMoveLines
;
728 SetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
, TRUE
);
730 GetScrollInfo(hed
->hWndSelf
, SB_VERT
, &si
);
731 if(si
.nPos
!= ScrollY
)
733 ScrollWindow(hed
->hWndSelf
, 0, (ScrollY
- si
.nPos
) * hed
->LineHeight
, NULL
, NULL
);
734 UpdateWindow(hed
->hWndSelf
);
741 HEXEDIT_WM_GETDLGCODE(LPMSG Msg
)
743 return DLGC_WANTARROWS
| DLGC_WANTCHARS
;
747 HEXEDIT_WM_LBUTTONDOWN(PHEXEDIT_DATA hed
, INT Buttons
, POINTS Pt
)
751 DWORD Hit
= HEXEDIT_HitRegionTest(hed
, Pt
);
753 SetFocus(hed
->hWndSelf
);
755 hed
->Position
= HEXEDIT_PositionFromPoint(hed
, Pt
, Hit
, &EditPos
, &NewField
);
756 hed
->EditingField
= NewField
;
757 hed
->CaretCol
= EditPos
.x
;
758 hed
->CaretLine
= EditPos
.y
;
760 HEXEDIT_MoveCaret(hed
, TRUE
);
766 HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed
, INT VkCode
)
771 if(GetKeyState(VK_MENU
) & 0x8000)
776 shift
= GetKeyState(VK_SHIFT
) & 0x8000;
777 control
= GetKeyState(VK_CONTROL
) & 0x8000;
779 bufsize
= (hed
->hBuffer
? LocalSize(hed
->hBuffer
) : 0);
784 if(hed
->Position
> 0)
786 if(--hed
->CaretCol
< 0)
789 hed
->CaretCol
= hed
->ColumnsPerLine
;
794 HEXEDIT_MoveCaret(hed
, TRUE
);
798 if(hed
->Position
< bufsize
)
800 if(++hed
->CaretCol
> hed
->ColumnsPerLine
)
808 HEXEDIT_MoveCaret(hed
, TRUE
);
812 if(hed
->Position
> 0)
814 if(hed
->CaretLine
<= 0)
822 hed
->Position
-= hed
->ColumnsPerLine
;
825 HEXEDIT_MoveCaret(hed
, TRUE
);
829 if(hed
->Position
<= bufsize
)
831 if(hed
->CaretLine
< hed
->nLines
- 1)
833 hed
->Position
+= hed
->ColumnsPerLine
;
835 if(hed
->Position
> bufsize
)
837 hed
->Position
= bufsize
;
838 hed
->CaretLine
= (hed
->nLines
> 0 ? hed
->nLines
- 1 : 0);
839 hed
->CaretCol
= bufsize
% hed
->ColumnsPerLine
;
844 INT tmp
= bufsize
% hed
->ColumnsPerLine
;
845 hed
->Position
= bufsize
;
846 hed
->CaretCol
= (tmp
== 0 ? hed
->ColumnsPerLine
: tmp
);
849 HEXEDIT_MoveCaret(hed
, TRUE
);
857 HEXEDIT_WM_SIZE(PHEXEDIT_DATA hed
, DWORD sType
, WORD NewWidth
, WORD NewHeight
)
864 HexEditWndProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
868 hed
= (PHEXEDIT_DATA
)GetWindowLongPtr(hWnd
, (DWORD_PTR
)0);
875 return HEXEDIT_WM_PAINT(hed
);
878 return HEXEDIT_WM_KEYDOWN(hed
, (INT
)wParam
);
881 return HEXEDIT_WM_VSCROLL(hed
, HIWORD(wParam
), LOWORD(wParam
));
884 return HEXEDIT_WM_SIZE(hed
, (DWORD
)wParam
, LOWORD(lParam
), HIWORD(lParam
));
887 return HEXEDIT_WM_LBUTTONDOWN(hed
, (INT
)wParam
, MAKEPOINTS(lParam
));
891 UINT nScrollLines
= 3;
894 SystemParametersInfoW(SPI_GETWHEELSCROLLLINES
, 0, &nScrollLines
, 0);
895 delta
-= (SHORT
)HIWORD(wParam
);
896 if(abs(delta
) >= WHEEL_DELTA
&& nScrollLines
!= 0)
898 return HEXEDIT_WM_MOUSEWHEEL(hed
, nScrollLines
* (delta
/ WHEEL_DELTA
), LOWORD(wParam
), &MAKEPOINTS(lParam
));
904 return HEXEDIT_HEM_LOADBUFFER(hed
, (PVOID
)wParam
, (DWORD
)lParam
);
907 return HEXEDIT_HEM_COPYBUFFER(hed
, (PVOID
)wParam
, (DWORD
)lParam
);
909 case HEM_SETMAXBUFFERSIZE
:
910 return HEXEDIT_HEM_SETMAXBUFFERSIZE(hed
, (DWORD
)lParam
);
913 return HEXEDIT_WM_SETFOCUS(hed
);
916 return HEXEDIT_WM_KILLFOCUS(hed
);
919 return HEXEDIT_WM_GETDLGCODE((LPMSG
)lParam
);
922 return HEXEDIT_WM_SETFONT(hed
, (HFONT
)wParam
, (BOOL
)LOWORD(lParam
));
925 return HEXEDIT_WM_GETFONT(hed
);
928 return HEXEDIT_WM_CREATE(hed
);
933 return HEXEDIT_WM_NCCREATE(hWnd
, (CREATESTRUCT
*)lParam
);
940 return HEXEDIT_WM_NCDESTROY(hed
);
945 return CallWindowProc(DefWindowProc
, hWnd
, uMsg
, wParam
, lParam
);