1 #include "precomp.h"
2 
3 static const TCHAR szEditWndClass[] = TEXT("WordPadEditWndClass");
4 
5 
6 static BOOL
7 InitEditWnd(PEDIT_WND_INFO Info)
8 {
9     HANDLE hDLL;
10     HFONT hfDefault;
11 
12     hDLL = LoadLibrary(_T("RICHED20.DLL"));
13     if (hDLL == NULL)
14     {
15         GetError(0);
16         return FALSE;
17     }
18 
19     Info->hEdit = CreateWindowEx(0, //WS_EX_CLIENTEDGE,
20                                  RICHEDIT_CLASS,
21                                  NULL,
22                                  WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |
23                                    ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
24                                  0,
25                                  0,
26                                  100,
27                                  100,
28                                  Info->hSelf,
29                                  NULL,
30                                  hInstance,
31                                  NULL);
32     if(Info->hEdit == NULL)
33     {
34         GetError(0);
35 
36         return FALSE;
37     }
38 
39     hfDefault = (HFONT) GetStockObject(DEFAULT_GUI_FONT);
40     SendMessage(Info->hEdit,
41                 WM_SETFONT,
42                 (WPARAM)hfDefault,
43                 MAKELPARAM(FALSE, 0));
44 
45     return TRUE;
46 }
47 
48 
49 static LRESULT CALLBACK
50 EditWndProc(HWND hwnd,
51             UINT uMsg,
52             WPARAM wParam,
53             LPARAM lParam)
54 {
55     PEDIT_WND_INFO Info;
56     LRESULT Ret = 0;
57 
58     /* Get the window context */
59     Info = (PEDIT_WND_INFO)GetWindowLongPtr(hwnd,
60                                             GWLP_USERDATA);
61     if (Info == NULL && uMsg != WM_CREATE)
62     {
63         goto HandleDefaultMessage;
64     }
65 
66     switch (uMsg)
67     {
68         case WM_CREATE:
69         {
70             Info = (PEDIT_WND_INFO)(((LPMDICREATESTRUCT)((LPCREATESTRUCT)lParam)->lpCreateParams)->lParam);
71             Info->hSelf = hwnd;
72 
73             SetWindowLongPtr(hwnd,
74                              GWLP_USERDATA,
75                              (LONG_PTR)Info);
76 
77             if (!InitEditWnd(Info))
78             {
79                 Ret = (LRESULT)-1;
80                 break;
81             }
82             break;
83         }
84 
85         case WM_SIZE:
86         {
87             RECT rcClient;
88 
89             if (GetClientRect(Info->hSelf,
90                               &rcClient))
91             {
92                 SetWindowPos(Info->hEdit,
93                              NULL,
94                              0,
95                              0,
96                              rcClient.right,
97                              rcClient.bottom,
98                              SWP_NOZORDER);
99             }
100         }
101 
102         default:
103 HandleDefaultMessage:
104             Ret = DefMDIChildProc(hwnd,
105                                   uMsg,
106                                   wParam,
107                                   lParam);
108             break;
109     }
110 
111     return Ret;
112 
113 }
114 
115 
116 VOID
117 SetEditorEnvironment(PEDIT_WND_INFO Info,
118                           BOOL Setup)
119 {
120     if (Setup)
121     {
122         /* FIXME - setup editor environment (e.g. show toolbars, enable menus etc) */
123     }
124     else
125     {
126         /* FIXME - cleanup editor environment (e.g. hide toolbars, disable menus etc) */
127     }
128 }
129 
130 
131 BOOL
132 CreateEditWindow(struct _MAIN_WND_INFO *MainWnd,
133                  POPEN_EDIT_INFO OpenInfo)
134 {
135     PEDIT_WND_INFO Info;
136     HWND hWndEditor;
137 
138     Info = (EDIT_WND_INFO*) HeapAlloc(ProcessHeap,
139                      0,
140                      sizeof(EDIT_WND_INFO));
141     if (Info != NULL)
142     {
143         ZeroMemory(Info,
144                    sizeof(EDIT_WND_INFO));
145         Info->MainWnd = MainWnd;
146         Info->MdiEditorType = metImageEditor;
147         Info->OpenInfo = OpenInfo;
148 
149         hWndEditor = CreateMDIWindow(szEditWndClass,
150                                      OpenInfo->lpDocumentName,
151                                      WS_MAXIMIZE,
152                                      CW_USEDEFAULT,
153                                      CW_USEDEFAULT,
154                                      CW_USEDEFAULT,
155                                      CW_USEDEFAULT,
156                                      MainWnd->hMdiClient,
157                                      hInstance,
158                                      (LPARAM)Info);
159 
160         if (hWndEditor != NULL)
161             return TRUE;
162 
163 
164         HeapFree(ProcessHeap,
165                  0,
166                  Info);
167     }
168 
169     return FALSE;
170 }
171 
172 BOOL
173 InitEditWindowImpl(VOID)
174 {
175     WNDCLASSEX wc = {0};
176 
177     wc.cbSize = sizeof(WNDCLASSEX);
178     wc.lpfnWndProc = EditWndProc;
179     wc.hInstance = hInstance;
180     wc.hIcon = LoadIcon(hInstance,
181                         MAKEINTRESOURCE(IDI_ICON));
182     wc.hCursor = LoadCursor(NULL,
183                             IDC_ARROW);
184     wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
185     wc.lpszMenuName = NULL;
186     wc.lpszClassName = szEditWndClass;
187     wc.hIconSm = (HICON)LoadImage(hInstance,
188                                   MAKEINTRESOURCE(IDI_ICON),
189                                   IMAGE_ICON,
190                                   16,
191                                   16,
192                                   LR_SHARED);
193 
194     return RegisterClassEx(&wc) != (ATOM)0;
195 }
196 
197 VOID
198 UninitEditWindowImpl(VOID)
199 {
200     UnregisterClass(szEditWndClass,
201                     hInstance);
202 }
203