1 | #include "stdafx.h" |
---|
2 | |
---|
3 | #include "abdev.h" |
---|
4 | |
---|
5 | |
---|
6 | #if defined HeapAlloc |
---|
7 | #define MEM_MAX 65536 |
---|
8 | LPVOID pCheckMem[MEM_MAX]; |
---|
9 | int now; |
---|
10 | #undef HeapAlloc |
---|
11 | #undef HeapReAlloc |
---|
12 | LPVOID CheckHeapAlloc(HANDLE hf,DWORD dwFlags,DWORD dwBytes){ |
---|
13 | LPVOID ret; |
---|
14 | ret=HeapAlloc(hf,dwFlags,dwBytes); |
---|
15 | pCheckMem[now]=ret; |
---|
16 | |
---|
17 | //この部分にnowのチェックを挿入 |
---|
18 | |
---|
19 | |
---|
20 | now++; |
---|
21 | if(now>=MEM_MAX){ |
---|
22 | MessageBox(0,"pCheckMemの最大値を超えました","Check",0); |
---|
23 | } |
---|
24 | return ret; |
---|
25 | } |
---|
26 | LPVOID CheckHeapReAlloc(HANDLE hf,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes){ |
---|
27 | int i; |
---|
28 | LPVOID ret; |
---|
29 | for(i=0;;i++){ |
---|
30 | if(lpMem==pCheckMem[i]) break; |
---|
31 | if(i>=MEM_MAX){ |
---|
32 | MessageBox(0,"エラー","CheckHeapReAlloc",0); |
---|
33 | break; |
---|
34 | } |
---|
35 | } |
---|
36 | ret=HeapReAlloc(hf,dwFlags,lpMem,dwBytes); |
---|
37 | pCheckMem[i]=ret; |
---|
38 | return ret; |
---|
39 | } |
---|
40 | void HeapDefaultFree(LPVOID lpMem){ |
---|
41 | int i; |
---|
42 | for(i=0;;i++){ |
---|
43 | if(lpMem==pCheckMem[i]) break; |
---|
44 | if(i>=MEM_MAX){ |
---|
45 | MessageBox(0,"エラー","HeapDefaultFree",0); |
---|
46 | break; |
---|
47 | } |
---|
48 | } |
---|
49 | pCheckMem[i]=0; |
---|
50 | HeapFree(hHeap,0,lpMem); |
---|
51 | } |
---|
52 | void CheckHeapCheck(){ |
---|
53 | int i,i2; |
---|
54 | char temp[100]; |
---|
55 | temp[0]=0; |
---|
56 | for(i=0,i2=0;i<MEM_MAX;i++){ |
---|
57 | if(pCheckMem[i]){ |
---|
58 | sprintf(temp+lstrlen(temp),"%d\r\n",i); |
---|
59 | i2++; |
---|
60 | if(i2==10){ |
---|
61 | lstrcat(temp,"これ以上の未解放が確認されています"); |
---|
62 | break; |
---|
63 | } |
---|
64 | } |
---|
65 | } |
---|
66 | if(temp[0]) MessageBox(0,temp,"Check - BasicCompiler.exe",0); |
---|
67 | } |
---|
68 | #define HeapAlloc CheckHeapAlloc |
---|
69 | #define HeapReAlloc CheckHeapReAlloc |
---|
70 | #else |
---|
71 | void HeapDefaultFree(LPVOID lpMem){ |
---|
72 | HeapFree(hHeap,0,lpMem); |
---|
73 | } |
---|
74 | #endif |
---|
75 | |
---|
76 | #ifdef DeleteObject |
---|
77 | #undef DeleteObject |
---|
78 | BOOL CheckDeleteObject(HGDIOBJ hObject){ |
---|
79 | BOOL bRet; |
---|
80 | bRet=DeleteObject(hObject); |
---|
81 | |
---|
82 | if(bRet==0){ |
---|
83 | MessageBox(0,"DeleteObject Error","Check",0); |
---|
84 | } |
---|
85 | return bRet; |
---|
86 | } |
---|
87 | #define DeleteObject CheckDeleteObject |
---|
88 | #endif |
---|
89 | |
---|
90 | |
---|
91 | void ToBigChar(char str[]){ |
---|
92 | int i; |
---|
93 | for(i=0;TRUE;i++){ |
---|
94 | str[i]=(char)toupper((int)str[i]); |
---|
95 | if(str[i]=='\0') break; |
---|
96 | } |
---|
97 | } |
---|
98 | int GetWndNum(HWND hChild){ |
---|
99 | int i; |
---|
100 | if(!IsWindow(hChild)) return -1; |
---|
101 | for(i=0;i<MdiInfo.size();i++){ |
---|
102 | if(hChild==MdiInfo[i]->hwnd) break; |
---|
103 | } |
---|
104 | if(i==MdiInfo.size()) i=-1; |
---|
105 | return i; |
---|
106 | } |
---|
107 | int GetNowWndNum(void){ |
---|
108 | return GetWndNum(GetWindow(hClient,GW_CHILD)); |
---|
109 | } |
---|
110 | int GetFileNum(int WndNum){ |
---|
111 | if( !projectInfo.IsOpened() ){ |
---|
112 | return -1; |
---|
113 | } |
---|
114 | |
---|
115 | for(int i=0;i<projectInfo.fileSystem.root.files.size();i++) |
---|
116 | { |
---|
117 | if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),projectInfo.fileSystem.root.files[i].GetFullPath().c_str())==0) return i; |
---|
118 | } |
---|
119 | return -1; |
---|
120 | } |
---|
121 | |
---|
122 | void SendTextEditResizeEvent(HWND hwnd){ |
---|
123 | RECT rect; |
---|
124 | GetClientRect(hwnd,&rect); |
---|
125 | ResizeTextEditWnd(hwnd,rect.right,rect.bottom); |
---|
126 | } |
---|
127 | |
---|
128 | void RedrawAllWindow(void){ |
---|
129 | HWND hChild; |
---|
130 | hChild=GetWindow(hClient,GW_CHILD); |
---|
131 | if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD)); |
---|
132 | while(hChild){ |
---|
133 | int WndNum; |
---|
134 | WndNum=GetWndNum(hChild); |
---|
135 | if(WndNum==-1) break; |
---|
136 | |
---|
137 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
138 | //コントロールタブスペースの幅と行番号の文字数を更新 |
---|
139 | MdiInfo[WndNum]->pMdiTextEdit->iWidth_ControlTabSpace= |
---|
140 | GetControlTabSpace(WndNum,&MdiInfo[WndNum]->pMdiTextEdit->iLineNumberTextCount); |
---|
141 | |
---|
142 | InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->hEdit,NULL,0); |
---|
143 | InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0); |
---|
144 | |
---|
145 | SendTextEditResizeEvent(MdiInfo[WndNum]->hwnd); |
---|
146 | } |
---|
147 | else{ |
---|
148 | HWND hEdit; |
---|
149 | hEdit=GetWindow(hChild,GW_CHILD); |
---|
150 | InvalidateRect(hEdit,NULL,0); |
---|
151 | } |
---|
152 | |
---|
153 | hChild=GetWindow(hChild,GW_HWNDNEXT); |
---|
154 | } |
---|
155 | } |
---|
156 | |
---|
157 | int DocumentModifyCheck(HWND hChild){ //終了保存確認 |
---|
158 | int BoxID,WndNum,sw; |
---|
159 | char str[MAX_PATH],temporary[MAX_PATH]; |
---|
160 | |
---|
161 | WndNum=GetWndNum(hChild); |
---|
162 | sw=0; |
---|
163 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
164 | if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ) sw=1; |
---|
165 | } |
---|
166 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ |
---|
167 | if(MdiInfo[WndNum]->MdiIconEditInfo->bModify) sw=1; |
---|
168 | } |
---|
169 | |
---|
170 | if(sw){ |
---|
171 | GetWindowText(hChild,temporary,MAX_PATH); |
---|
172 | |
---|
173 | //"\"%s\" ファイルは変更されています。保存しますか?" |
---|
174 | sprintf(str,STRING_MODIFYCHECK_FILE,temporary); |
---|
175 | BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION); |
---|
176 | |
---|
177 | if(BoxID==IDYES){ |
---|
178 | if(!SaveDocument(hChild,NULL)) return 0; |
---|
179 | } |
---|
180 | else if(BoxID==IDCANCEL) return 0; |
---|
181 | } |
---|
182 | return 1; |
---|
183 | } |
---|
184 | void SetStatusText(char *MenuText){ |
---|
185 | ////////////////////////// |
---|
186 | // ステータスバーの更新 |
---|
187 | ////////////////////////// |
---|
188 | |
---|
189 | int WndNum; |
---|
190 | double BufSize; |
---|
191 | char temporary[255]; |
---|
192 | HWND hChild; |
---|
193 | |
---|
194 | if(MenuText){ |
---|
195 | SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText); |
---|
196 | if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0; |
---|
197 | } |
---|
198 | |
---|
199 | hChild=GetWindow(hClient,GW_CHILD); |
---|
200 | WndNum=GetWndNum(hChild); |
---|
201 | if(WndNum==-1) return; |
---|
202 | hChild=GetWindow(hChild,GW_CHILD); |
---|
203 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
204 | ////////////////////// |
---|
205 | // テキストエディタ |
---|
206 | ////////////////////// |
---|
207 | |
---|
208 | //サイズ |
---|
209 | BufSize=(double)lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer); |
---|
210 | if(IsWindow(hChild)){ |
---|
211 | if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize); |
---|
212 | else if(BufSize<1024*1024){ |
---|
213 | BufSize/=1024; |
---|
214 | sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize); |
---|
215 | } |
---|
216 | else{ |
---|
217 | BufSize/=1024*1024; |
---|
218 | sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize); |
---|
219 | } |
---|
220 | } |
---|
221 | else temporary[0]=0; |
---|
222 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); |
---|
223 | |
---|
224 | //行と桁 |
---|
225 | if(IsWindow(hChild)){ |
---|
226 | #if defined(JPN) |
---|
227 | //日本語 |
---|
228 | sprintf(temporary,"%d 行、%d 列", |
---|
229 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1, |
---|
230 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1); |
---|
231 | #else |
---|
232 | //英語 |
---|
233 | sprintf(temporary,"%d : %d", |
---|
234 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1, |
---|
235 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1); |
---|
236 | #endif |
---|
237 | } |
---|
238 | else temporary[0]=0; |
---|
239 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); |
---|
240 | |
---|
241 | //文字コード |
---|
242 | nkf.GetCharCodeName(MdiInfo[WndNum]->pMdiTextEdit->iCharCode,temporary); |
---|
243 | SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary); |
---|
244 | |
---|
245 | //文字コード |
---|
246 | nkf.GetLfCodeName(MdiInfo[WndNum]->pMdiTextEdit->iLfCode,temporary); |
---|
247 | SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary); |
---|
248 | } |
---|
249 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ |
---|
250 | //////////////// |
---|
251 | // RADツール |
---|
252 | //////////////// |
---|
253 | |
---|
254 | ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path); |
---|
255 | if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){ |
---|
256 | sprintf(temporary,"pos %d, %d", |
---|
257 | RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x, |
---|
258 | RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y); |
---|
259 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); |
---|
260 | sprintf(temporary,"size %d * %d", |
---|
261 | RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left, |
---|
262 | RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top); |
---|
263 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); |
---|
264 | } |
---|
265 | else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ |
---|
266 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0"); |
---|
267 | sprintf(temporary,"size %d * %d",pWindowInfo->size.cx,pWindowInfo->size.cy); |
---|
268 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); |
---|
269 | } |
---|
270 | else{ |
---|
271 | sprintf(temporary,"pos %d, %d", |
---|
272 | pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x, |
---|
273 | pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y); |
---|
274 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); |
---|
275 | sprintf(temporary,"size %d * %d", |
---|
276 | pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx, |
---|
277 | pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy); |
---|
278 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); |
---|
279 | } |
---|
280 | } |
---|
281 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ |
---|
282 | ////////////////// |
---|
283 | // MENU エディタ |
---|
284 | ////////////////// |
---|
285 | |
---|
286 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)""); |
---|
287 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)""); |
---|
288 | } |
---|
289 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ |
---|
290 | ////////////////// |
---|
291 | // ICON エディタ |
---|
292 | ////////////////// |
---|
293 | |
---|
294 | SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)""); |
---|
295 | SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)""); |
---|
296 | } |
---|
297 | } |
---|
298 | void ResetState_UndoMenu(void){ //「元に戻す、やり直し」のメニュー表示制御 |
---|
299 | int i,i2; |
---|
300 | HWND hChild; |
---|
301 | |
---|
302 | hChild=GetWindow(hClient,GW_CHILD); |
---|
303 | i=GetWndNum(hChild); |
---|
304 | if(i==-1){ |
---|
305 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
306 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
307 | pobj_StandardToolbar->EnableItem(IDM_UNDO,0); |
---|
308 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
309 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
310 | pobj_StandardToolbar->EnableItem(IDM_REDO,0); |
---|
311 | } |
---|
312 | else if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){ |
---|
313 | i2=MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos-1; |
---|
314 | if(i2==-1) i2=MAX_UNDONUM-1; |
---|
315 | if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[i2]){ |
---|
316 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
317 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
318 | pobj_StandardToolbar->EnableItem(IDM_UNDO,0); |
---|
319 | } |
---|
320 | else{ |
---|
321 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
322 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
323 | pobj_StandardToolbar->EnableItem(IDM_UNDO,1); |
---|
324 | } |
---|
325 | if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos]){ |
---|
326 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
327 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
328 | pobj_StandardToolbar->EnableItem(IDM_REDO,0); |
---|
329 | } |
---|
330 | else{ |
---|
331 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
332 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
333 | pobj_StandardToolbar->EnableItem(IDM_REDO,1); |
---|
334 | } |
---|
335 | } |
---|
336 | else if(MdiInfo[i]->DocType==WNDTYPE_RAD){ |
---|
337 | i2=MdiInfo[i]->MdiRadInfo->undo.NowPos-1; |
---|
338 | if(i2==-1) i2=MAX_UNDONUM-1; |
---|
339 | if(!MdiInfo[i]->MdiRadInfo->undo.Command[i2]){ |
---|
340 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
341 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
342 | pobj_StandardToolbar->EnableItem(IDM_UNDO,0); |
---|
343 | } |
---|
344 | else{ |
---|
345 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
346 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
347 | pobj_StandardToolbar->EnableItem(IDM_UNDO,1); |
---|
348 | } |
---|
349 | if(!MdiInfo[i]->MdiRadInfo->undo.Command[MdiInfo[i]->MdiRadInfo->undo.NowPos]){ |
---|
350 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
351 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
352 | pobj_StandardToolbar->EnableItem(IDM_REDO,0); |
---|
353 | } |
---|
354 | else{ |
---|
355 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
356 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
357 | pobj_StandardToolbar->EnableItem(IDM_REDO,1); |
---|
358 | } |
---|
359 | } |
---|
360 | else if(MdiInfo[i]->DocType==WNDTYPE_MENU){ |
---|
361 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
362 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
363 | pobj_StandardToolbar->EnableItem(IDM_UNDO,0); |
---|
364 | |
---|
365 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
366 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
367 | pobj_StandardToolbar->EnableItem(IDM_REDO,0); |
---|
368 | } |
---|
369 | else if(MdiInfo[i]->DocType==WNDTYPE_ICONEDIT){ |
---|
370 | i2=MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos-1; |
---|
371 | if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1; |
---|
372 | if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[i2]){ |
---|
373 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
374 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); |
---|
375 | pobj_StandardToolbar->EnableItem(IDM_UNDO,0); |
---|
376 | } |
---|
377 | else{ |
---|
378 | pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
379 | EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); |
---|
380 | pobj_StandardToolbar->EnableItem(IDM_UNDO,1); |
---|
381 | } |
---|
382 | if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos]){ |
---|
383 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
384 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); |
---|
385 | pobj_StandardToolbar->EnableItem(IDM_REDO,0); |
---|
386 | } |
---|
387 | else{ |
---|
388 | pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
389 | EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); |
---|
390 | pobj_StandardToolbar->EnableItem(IDM_REDO,1); |
---|
391 | } |
---|
392 | } |
---|
393 | } |
---|
394 | void ResetState_ConvMenu(BOOL bEnable){ |
---|
395 | int MenuMsg; |
---|
396 | if(bEnable) |
---|
397 | MenuMsg=MF_BYCOMMAND|MF_ENABLED; |
---|
398 | else MenuMsg=MF_BYCOMMAND|MF_GRAYED; |
---|
399 | |
---|
400 | pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg); |
---|
401 | pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg); |
---|
402 | pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg); |
---|
403 | pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg); |
---|
404 | pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg); |
---|
405 | pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg); |
---|
406 | pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg); |
---|
407 | pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg); |
---|
408 | #ifdef THETEXT |
---|
409 | pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg); |
---|
410 | pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg); |
---|
411 | #else |
---|
412 | pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg); |
---|
413 | #endif |
---|
414 | } |
---|
415 | void ResetState_PrintMenu(void); |
---|
416 | void ResetState_EditMenu(void){ //編集メニューの表示制御 |
---|
417 | HWND hChild; |
---|
418 | int WndNum; |
---|
419 | long MenuMsg,ToolbarMsg; |
---|
420 | |
---|
421 | //印刷メニューの状態を設定 |
---|
422 | ResetState_PrintMenu(); |
---|
423 | |
---|
424 | hChild=GetWindow(hClient,GW_CHILD); |
---|
425 | if(!IsWindow(hChild)){ |
---|
426 | pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); |
---|
427 | pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); |
---|
428 | #ifdef THETEXT |
---|
429 | pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); |
---|
430 | #endif |
---|
431 | pobj_StandardToolbar->EnableItem(IDM_FIND,0); |
---|
432 | |
---|
433 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
434 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
435 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
436 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
437 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
438 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
439 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); |
---|
440 | pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED); |
---|
441 | pobj_StandardToolbar->EnableItem(IDM_CUT,0); |
---|
442 | pobj_StandardToolbar->EnableItem(IDM_COPY,0); |
---|
443 | pobj_StandardToolbar->EnableItem(IDM_PASTE,0); |
---|
444 | |
---|
445 | ResetState_ConvMenu(0); |
---|
446 | |
---|
447 | ResetState_UndoMenu(); |
---|
448 | return; |
---|
449 | } |
---|
450 | WndNum=GetWndNum(hChild); |
---|
451 | if(WndNum==-1) return; |
---|
452 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
453 | pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); |
---|
454 | pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED); |
---|
455 | pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED); |
---|
456 | #ifdef THETEXT |
---|
457 | pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED); |
---|
458 | #endif |
---|
459 | pobj_StandardToolbar->EnableItem(IDM_FIND,1); |
---|
460 | |
---|
461 | BOOL bConvEnable; |
---|
462 | hChild=GetWindow(hChild,GW_CHILD); |
---|
463 | if(!( |
---|
464 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x&& |
---|
465 | MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y |
---|
466 | )){ |
---|
467 | MenuMsg=MF_BYCOMMAND|MF_ENABLED; |
---|
468 | ToolbarMsg=1; |
---|
469 | |
---|
470 | bConvEnable=1; |
---|
471 | } |
---|
472 | else{ |
---|
473 | MenuMsg=MF_BYCOMMAND|MF_GRAYED; |
---|
474 | ToolbarMsg=0; |
---|
475 | |
---|
476 | bConvEnable=0; |
---|
477 | } |
---|
478 | pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg); |
---|
479 | pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg); |
---|
480 | pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg); |
---|
481 | EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg); |
---|
482 | EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg); |
---|
483 | EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg); |
---|
484 | pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg); |
---|
485 | pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg); |
---|
486 | |
---|
487 | if(IsClipboardFormatAvailable(CF_TEXT)){ |
---|
488 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); |
---|
489 | pobj_StandardToolbar->EnableItem(IDM_PASTE,1); |
---|
490 | } |
---|
491 | else{ |
---|
492 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); |
---|
493 | pobj_StandardToolbar->EnableItem(IDM_PASTE,0); |
---|
494 | } |
---|
495 | |
---|
496 | |
---|
497 | //変換コマンド |
---|
498 | ResetState_ConvMenu(bConvEnable); |
---|
499 | } |
---|
500 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ |
---|
501 | //検索、置換、文字カウントを無効化 |
---|
502 | pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); |
---|
503 | pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); |
---|
504 | #ifdef THETEXT |
---|
505 | pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); |
---|
506 | #endif |
---|
507 | pobj_StandardToolbar->EnableItem(IDM_FIND,0); |
---|
508 | |
---|
509 | if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ |
---|
510 | //切り取り、コピー、削除を有効化 |
---|
511 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
512 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
513 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
514 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
515 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
516 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
517 | pobj_StandardToolbar->EnableItem(IDM_CUT,0); |
---|
518 | pobj_StandardToolbar->EnableItem(IDM_COPY,0); |
---|
519 | } |
---|
520 | else{ |
---|
521 | //切り取り、コピー、削除を無効化 |
---|
522 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED); |
---|
523 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED); |
---|
524 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); |
---|
525 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED); |
---|
526 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED); |
---|
527 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); |
---|
528 | pobj_StandardToolbar->EnableItem(IDM_CUT,1); |
---|
529 | pobj_StandardToolbar->EnableItem(IDM_COPY,1); |
---|
530 | } |
---|
531 | |
---|
532 | //すべて選択を有効化 |
---|
533 | pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); |
---|
534 | |
---|
535 | if(IsClipboardFormatAvailable(dwRadClipboardID)){ |
---|
536 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); |
---|
537 | pobj_StandardToolbar->EnableItem(IDM_PASTE,1); |
---|
538 | } |
---|
539 | else{ |
---|
540 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); |
---|
541 | pobj_StandardToolbar->EnableItem(IDM_PASTE,0); |
---|
542 | } |
---|
543 | |
---|
544 | ResetState_ConvMenu(0); |
---|
545 | } |
---|
546 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ |
---|
547 | //検索、置換、文字カウントを無効化 |
---|
548 | pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); |
---|
549 | pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); |
---|
550 | #ifdef THETEXT |
---|
551 | pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); |
---|
552 | #endif |
---|
553 | pobj_StandardToolbar->EnableItem(IDM_FIND,0); |
---|
554 | |
---|
555 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
556 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
557 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
558 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
559 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
560 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
561 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); |
---|
562 | pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED); |
---|
563 | pobj_StandardToolbar->EnableItem(IDM_CUT,0); |
---|
564 | pobj_StandardToolbar->EnableItem(IDM_COPY,0); |
---|
565 | pobj_StandardToolbar->EnableItem(IDM_PASTE,0); |
---|
566 | |
---|
567 | ResetState_ConvMenu(0); |
---|
568 | } |
---|
569 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ |
---|
570 | //検索、置換、文字カウントを無効化 |
---|
571 | pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); |
---|
572 | pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); |
---|
573 | #ifdef THETEXT |
---|
574 | pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); |
---|
575 | #endif |
---|
576 | pobj_StandardToolbar->EnableItem(IDM_FIND,0); |
---|
577 | |
---|
578 | if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==0){ |
---|
579 | //切り取り、コピー、削除を無効化 |
---|
580 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
581 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
582 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
583 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); |
---|
584 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); |
---|
585 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); |
---|
586 | pobj_StandardToolbar->EnableItem(IDM_CUT,0); |
---|
587 | pobj_StandardToolbar->EnableItem(IDM_COPY,0); |
---|
588 | } |
---|
589 | else{ |
---|
590 | //切り取り、コピー、削除を有効化 |
---|
591 | pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED); |
---|
592 | pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED); |
---|
593 | pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); |
---|
594 | EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED); |
---|
595 | EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED); |
---|
596 | EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); |
---|
597 | pobj_StandardToolbar->EnableItem(IDM_CUT,1); |
---|
598 | pobj_StandardToolbar->EnableItem(IDM_COPY,1); |
---|
599 | } |
---|
600 | |
---|
601 | //すべて選択を有効化 |
---|
602 | pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); |
---|
603 | |
---|
604 | if(IsClipboardFormatAvailable(CF_BITMAP)){ |
---|
605 | //貼り付けを有効化 |
---|
606 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); |
---|
607 | pobj_StandardToolbar->EnableItem(IDM_PASTE,1); |
---|
608 | } |
---|
609 | else{ |
---|
610 | //貼り付けを無効化 |
---|
611 | pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); |
---|
612 | pobj_StandardToolbar->EnableItem(IDM_PASTE,0); |
---|
613 | } |
---|
614 | |
---|
615 | ResetState_ConvMenu(0); |
---|
616 | } |
---|
617 | |
---|
618 | ResetState_UndoMenu(); |
---|
619 | } |
---|
620 | void ResetState_ViewMenu(void){ |
---|
621 | // 表示 メニューの状態を設定 |
---|
622 | |
---|
623 | |
---|
624 | #ifdef THETEXT |
---|
625 | pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn); |
---|
626 | #endif |
---|
627 | } |
---|
628 | void ResetState_PrintMenu(void){ //編集メニューの表示制御 |
---|
629 | HWND hChild; |
---|
630 | int WndNum; |
---|
631 | hChild=GetWindow(hClient,GW_CHILD); |
---|
632 | if(!IsWindow(hChild)){ |
---|
633 | pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED); |
---|
634 | |
---|
635 | pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED); |
---|
636 | |
---|
637 | pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED); |
---|
638 | return; |
---|
639 | } |
---|
640 | WndNum=GetWndNum(hChild); |
---|
641 | if( WndNum != -1 ) |
---|
642 | { |
---|
643 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
644 | pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED); |
---|
645 | |
---|
646 | pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED); |
---|
647 | |
---|
648 | pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED); |
---|
649 | } |
---|
650 | else{ |
---|
651 | pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED); |
---|
652 | |
---|
653 | pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED); |
---|
654 | |
---|
655 | pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED); |
---|
656 | } |
---|
657 | } |
---|
658 | } |
---|
659 | void ResetState_DocMenu(void){ |
---|
660 | long MenuMsg,ToolbarMsg; |
---|
661 | HWND hChild; |
---|
662 | |
---|
663 | hChild=GetWindow(hClient,GW_CHILD); |
---|
664 | |
---|
665 | |
---|
666 | ///////////////////////////////////////// |
---|
667 | // 共通ドキュメント メニューの状態を設定 |
---|
668 | ///////////////////////////////////////// |
---|
669 | |
---|
670 | if(!IsWindow(hChild)){ |
---|
671 | MenuMsg=MF_GRAYED; |
---|
672 | ToolbarMsg=0; |
---|
673 | } |
---|
674 | else{ |
---|
675 | MenuMsg=MF_ENABLED; |
---|
676 | ToolbarMsg=1; |
---|
677 | } |
---|
678 | pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg); |
---|
679 | pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg); |
---|
680 | pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg); |
---|
681 | pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg); |
---|
682 | pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg); |
---|
683 | |
---|
684 | pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg); |
---|
685 | pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg); |
---|
686 | pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg); |
---|
687 | |
---|
688 | |
---|
689 | #ifndef THETEXT |
---|
690 | ///////////////////////////////////////////////// |
---|
691 | // プロジェクトドキュメント メニューの状態を設定 |
---|
692 | ///////////////////////////////////////////////// |
---|
693 | |
---|
694 | if( projectInfo.IsOpened() ){ |
---|
695 | pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED); |
---|
696 | pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1); |
---|
697 | |
---|
698 | MenuMsg=MF_ENABLED; |
---|
699 | ToolbarMsg=TBSTATE_ENABLED; |
---|
700 | } |
---|
701 | else{ |
---|
702 | MenuMsg=MF_GRAYED; |
---|
703 | ToolbarMsg=TBSTATE_INDETERMINATE; |
---|
704 | } |
---|
705 | pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg); |
---|
706 | pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg); |
---|
707 | pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg); |
---|
708 | pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg); |
---|
709 | |
---|
710 | //デバッガ メニューの状態を設定 |
---|
711 | pobj_Debugger->ResetCommandEnabled(); |
---|
712 | #endif |
---|
713 | |
---|
714 | |
---|
715 | //編集メニューの状態を設定 |
---|
716 | ResetState_EditMenu(); |
---|
717 | |
---|
718 | //表示メニューの状態を設定 |
---|
719 | ResetState_ViewMenu(); |
---|
720 | } |
---|
721 | void DuplicateTitleCheck(char *lpszTitle){ |
---|
722 | int i; |
---|
723 | for(i=0;i<MdiInfo.size();i++){ |
---|
724 | if(MdiInfo[i]->hwnd){ |
---|
725 | if(lstrcmpi(MdiInfo[i]->title.c_str(),lpszTitle)==0){ |
---|
726 | lstrcat(lpszTitle,"_"); |
---|
727 | DuplicateTitleCheck(lpszTitle); |
---|
728 | return; |
---|
729 | } |
---|
730 | } |
---|
731 | } |
---|
732 | } |
---|
733 | HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor) |
---|
734 | { |
---|
735 | int i; |
---|
736 | char str[MAX_PATH],str2[32],*buffer; |
---|
737 | HWND hChild,hEdit; |
---|
738 | RECT rect; |
---|
739 | int iCharCode=NKF_SHIFT_JIS; |
---|
740 | int iLfCode=LFCODE_CRLF; |
---|
741 | |
---|
742 | if(filepath){ |
---|
743 | |
---|
744 | //すでに指定されたファイルが開かれている場合 |
---|
745 | hChild=::GetWindow(hClient,GW_CHILD); |
---|
746 | while(hChild){ |
---|
747 | i=GetWndNum(hChild); |
---|
748 | if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){ |
---|
749 | if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break; |
---|
750 | } |
---|
751 | hChild=::GetNextWindow(hChild,GW_HWNDNEXT); |
---|
752 | } |
---|
753 | if(hChild){ |
---|
754 | //前面に表示して終了 |
---|
755 | ::BringWindowToTop(hChild); |
---|
756 | return hChild; |
---|
757 | } |
---|
758 | |
---|
759 | |
---|
760 | ////////////////////////////////////////////////////// |
---|
761 | //ファイル読み込み(正常に読み込めるかの確認も含む) |
---|
762 | ////////////////////////////////////////////////////// |
---|
763 | |
---|
764 | HANDLE hFile; |
---|
765 | hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); |
---|
766 | if(hFile==INVALID_HANDLE_VALUE){ |
---|
767 | sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath); |
---|
768 | ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION); |
---|
769 | return 0; |
---|
770 | } |
---|
771 | int length; |
---|
772 | length=GetFileSize(hFile,NULL); |
---|
773 | |
---|
774 | char *temp; |
---|
775 | temp=(char *)HeapAlloc(hHeap,0,length+1); |
---|
776 | DWORD dw; |
---|
777 | ReadFile(hFile,temp,length,&dw,NULL); |
---|
778 | CloseHandle(hFile); |
---|
779 | for(i=0;i<length;i++){ |
---|
780 | if(temp[i]=='\0') temp[i]=' '; |
---|
781 | } |
---|
782 | temp[length]=0; |
---|
783 | |
---|
784 | |
---|
785 | /////////////////////// |
---|
786 | // 改行コードを判別 |
---|
787 | /////////////////////// |
---|
788 | |
---|
789 | char *temp2; |
---|
790 | for(i=0;i<length;i++){ |
---|
791 | if(temp[i]=='\r'){ |
---|
792 | if(temp[i+1]=='\n') |
---|
793 | iLfCode=LFCODE_CRLF; |
---|
794 | else |
---|
795 | iLfCode=LFCODE_CR; |
---|
796 | break; |
---|
797 | } |
---|
798 | if(temp[i]=='\n'){ |
---|
799 | iLfCode=LFCODE_LF; |
---|
800 | break; |
---|
801 | } |
---|
802 | } |
---|
803 | |
---|
804 | //改行コードを変換 |
---|
805 | if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){ |
---|
806 | temp2=nkf.ToCRLF(iLfCode,temp); |
---|
807 | HeapDefaultFree(temp); |
---|
808 | temp=temp2; |
---|
809 | |
---|
810 | length=lstrlen(temp); |
---|
811 | } |
---|
812 | |
---|
813 | |
---|
814 | ///////////////////// |
---|
815 | // Shift-JISに変換 |
---|
816 | ///////////////////// |
---|
817 | |
---|
818 | buffer=(char *)HeapAlloc(hHeap,0,length*2+1); |
---|
819 | nkf.pSetNkfOption("-sx"); //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション) |
---|
820 | nkf.pNkfConvert(buffer,temp); |
---|
821 | buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1); |
---|
822 | HeapDefaultFree(temp); |
---|
823 | |
---|
824 | //変換前の文字コードを判別 |
---|
825 | iCharCode=nkf.pNkfGetKanjiCode(); |
---|
826 | if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){ |
---|
827 | //判別不能な場合は、Shift-JISにする |
---|
828 | iCharCode=NKF_SHIFT_JIS; |
---|
829 | } |
---|
830 | else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){ |
---|
831 | //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先 |
---|
832 | for(i=0;;i++){ |
---|
833 | if(buffer[i]=='\0'){ |
---|
834 | //半角コードのみ |
---|
835 | iCharCode=NKF_SHIFT_JIS; |
---|
836 | break; |
---|
837 | } |
---|
838 | if(IsDBCSLeadByte(buffer[i])) break; |
---|
839 | } |
---|
840 | } |
---|
841 | |
---|
842 | |
---|
843 | ////////////////////////// |
---|
844 | // ファイルパスをセット |
---|
845 | ////////////////////////// |
---|
846 | |
---|
847 | _splitpath(filepath,NULL,NULL,str,str2); |
---|
848 | lstrcat(str,str2); |
---|
849 | } |
---|
850 | else{ |
---|
851 | buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1); |
---|
852 | extern int DocumentCounter; |
---|
853 | DocumentCounter++; |
---|
854 | sprintf(str,"Document[%d]",DocumentCounter); |
---|
855 | } |
---|
856 | |
---|
857 | MDICREATESTRUCT mdic; |
---|
858 | mdic.szClass="MDIClientWindow_TextEdit"; |
---|
859 | mdic.hOwner=hInst; |
---|
860 | mdic.x=CW_USEDEFAULT; |
---|
861 | mdic.y=CW_USEDEFAULT; |
---|
862 | mdic.cx=CW_USEDEFAULT; |
---|
863 | mdic.cy=CW_USEDEFAULT; |
---|
864 | mdic.szTitle=str; |
---|
865 | |
---|
866 | hChild=::GetWindow(hClient,GW_CHILD); |
---|
867 | if(::IsWindow(hChild)){ |
---|
868 | if(::IsZoomed(hChild)) mdic.style=WS_MAXIMIZE; |
---|
869 | else mdic.style=0; |
---|
870 | } |
---|
871 | else{ |
---|
872 | if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE; |
---|
873 | else mdic.style=0; |
---|
874 | } |
---|
875 | |
---|
876 | //ファイルアイコンをセット |
---|
877 | SHFILEINFO shfi; |
---|
878 | if(filepath) |
---|
879 | SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON ); |
---|
880 | else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);; |
---|
881 | mdic.lParam=(LPARAM)shfi.hIcon; |
---|
882 | |
---|
883 | mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; |
---|
884 | hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成 |
---|
885 | |
---|
886 | //TextEditorコントロールを設置 |
---|
887 | ::GetClientRect(hChild,&rect); |
---|
888 | hEdit=CreateWindow("TextEditor",NULL, |
---|
889 | WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE, |
---|
890 | 0,0,0,0, |
---|
891 | hChild,NULL,hInst,NULL); |
---|
892 | |
---|
893 | |
---|
894 | //ウィンドウのID登録 |
---|
895 | MdiInfo.push_back( new MDIINFO() ); |
---|
896 | i = MdiInfo.size()-1; |
---|
897 | MdiInfo[i]->hwnd=hChild; |
---|
898 | MdiInfo[i]->DocType=DocumentType; |
---|
899 | DuplicateTitleCheck(str); |
---|
900 | MdiInfo[i]->title = str; |
---|
901 | if(filepath) |
---|
902 | { |
---|
903 | MdiInfo[i]->path = filepath; |
---|
904 | } |
---|
905 | else |
---|
906 | { |
---|
907 | MdiInfo[i]->path = ""; |
---|
908 | } |
---|
909 | |
---|
910 | MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] ); |
---|
911 | |
---|
912 | MdiInfo[i]->pMdiTextEdit->hEdit=hEdit; |
---|
913 | MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild); |
---|
914 | MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]); |
---|
915 | MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon; |
---|
916 | MdiInfo[i]->pMdiTextEdit->buffer=buffer; |
---|
917 | MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer)); |
---|
918 | MdiInfo[i]->pMdiTextEdit->iUnderStart=-1; |
---|
919 | MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1; |
---|
920 | MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0; |
---|
921 | MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0; |
---|
922 | MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0; |
---|
923 | MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0; |
---|
924 | MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1; |
---|
925 | MdiInfo[i]->pMdiTextEdit->bAutoScroll=0; |
---|
926 | MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace= |
---|
927 | GetControlTabSpace(i,&MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount); |
---|
928 | MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode; |
---|
929 | MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode; |
---|
930 | MdiInfo[i]->IndentStr=0; |
---|
931 | |
---|
932 | |
---|
933 | int flag; |
---|
934 | if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED; |
---|
935 | else flag=0; |
---|
936 | SendTextEditResizeEvent(hChild); |
---|
937 | |
---|
938 | |
---|
939 | //ワードカラーをセット |
---|
940 | if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(MdiInfo.size()-1); |
---|
941 | |
---|
942 | //Docコンボボックスに追加 |
---|
943 | extern HWND hDocCombo; |
---|
944 | if( hDocCombo ) |
---|
945 | { |
---|
946 | i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str); |
---|
947 | SendMessage(hDocCombo,CB_SETCURSEL,i,0); |
---|
948 | } |
---|
949 | |
---|
950 | //タブに追加 |
---|
951 | pobj_MainTab->InsertItem( str, true, TabColor ); |
---|
952 | |
---|
953 | ::SetFocus(hEdit); |
---|
954 | SetStatusText(NULL); |
---|
955 | |
---|
956 | //メニュー状態を設定 |
---|
957 | ResetState_DocMenu(); |
---|
958 | |
---|
959 | if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){ |
---|
960 | // 単体ソースコードを開いたとき |
---|
961 | extern HWND hProjectView; |
---|
962 | if( !::IsWindowVisible( hProjectView ) ){ |
---|
963 | // クラスビューを表示する |
---|
964 | SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0); |
---|
965 | ShowClassView(); |
---|
966 | |
---|
967 | // クラスビューを更新 |
---|
968 | ResetClassTree((HTREEITEM)-1); |
---|
969 | } |
---|
970 | } |
---|
971 | |
---|
972 | return hChild; |
---|
973 | } |
---|
974 | void CloseDocWindow(int WndNum){ |
---|
975 | int i2,i3; |
---|
976 | |
---|
977 | MdiInfo[WndNum]->hwnd=0; |
---|
978 | |
---|
979 | //ドキュメントコンボボックスから文字列を消去 |
---|
980 | extern HWND hDocCombo; |
---|
981 | i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str()); |
---|
982 | SendMessage(hDocCombo,CB_DELETESTRING,i2,0); |
---|
983 | |
---|
984 | //タブコントロールからアイテムを消去 |
---|
985 | if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true ); |
---|
986 | |
---|
987 | |
---|
988 | if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ |
---|
989 | //////////////////////////// |
---|
990 | // テキストエディタを閉じる |
---|
991 | //////////////////////////// |
---|
992 | |
---|
993 | extern COMPLEMENT_WINDOW_INFO ComplementWndInfo; |
---|
994 | if(ComplementWndInfo.hWnd){ |
---|
995 | //コード補完リストを破棄する |
---|
996 | DestroyWindow(ComplementWndInfo.hWnd); |
---|
997 | ComplementWndInfo.hWnd=0; |
---|
998 | } |
---|
999 | |
---|
1000 | HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->buffer); |
---|
1001 | HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->pColorRef); |
---|
1002 | |
---|
1003 | if(MdiInfo[WndNum]->IndentStr) HeapDefaultFree(MdiInfo[WndNum]->IndentStr); |
---|
1004 | |
---|
1005 | //エディットコントロールを破棄 |
---|
1006 | DestroyWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit); |
---|
1007 | |
---|
1008 | //Web検索ウィンドウを破棄 |
---|
1009 | delete MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult; |
---|
1010 | MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult=0; |
---|
1011 | |
---|
1012 | //ルーラーウィンドウを破棄 |
---|
1013 | delete MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler; |
---|
1014 | MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler=0; |
---|
1015 | |
---|
1016 | //アイコンを破棄 |
---|
1017 | if(MdiInfo[WndNum]->pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum]->pMdiTextEdit->hIcon); |
---|
1018 | |
---|
1019 | delete MdiInfo[WndNum]->pMdiTextEdit; |
---|
1020 | MdiInfo[WndNum]->pMdiTextEdit=0; |
---|
1021 | } |
---|
1022 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ |
---|
1023 | ///////////////////// |
---|
1024 | // RADツールを閉じる |
---|
1025 | ///////////////////// |
---|
1026 | |
---|
1027 | for(i2=0;i2<MAX_UNDONUM;i2++){ |
---|
1028 | if(MdiInfo[WndNum]->MdiRadInfo->undo.Command[i2]) |
---|
1029 | Rad_DeleteUndoData(WndNum,i2); |
---|
1030 | } |
---|
1031 | DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hTools); |
---|
1032 | DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hRad); |
---|
1033 | SelectObject(MdiInfo[WndNum]->MdiRadInfo->hMemDC,MdiInfo[WndNum]->MdiRadInfo->hOldBitmap); |
---|
1034 | DeleteDC(MdiInfo[WndNum]->MdiRadInfo->hMemDC); |
---|
1035 | DeleteObject(MdiInfo[WndNum]->MdiRadInfo->hBitmap); |
---|
1036 | GlobalFree(MdiInfo[WndNum]->MdiRadInfo); |
---|
1037 | } |
---|
1038 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ |
---|
1039 | //////////////////////////// |
---|
1040 | // メニューエディタを閉じる |
---|
1041 | //////////////////////////// |
---|
1042 | |
---|
1043 | DestroyWindow(MdiInfo[WndNum]->MdiMenuInfo->hList); |
---|
1044 | GlobalFree(MdiInfo[WndNum]->MdiMenuInfo); |
---|
1045 | } |
---|
1046 | else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ |
---|
1047 | //////////////////////////// |
---|
1048 | // アイコンエディタを閉じる |
---|
1049 | //////////////////////////// |
---|
1050 | |
---|
1051 | for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){ |
---|
1052 | for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){ |
---|
1053 | if(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]) |
---|
1054 | HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]); |
---|
1055 | } |
---|
1056 | } |
---|
1057 | |
---|
1058 | DeleteDC(MdiInfo[WndNum]->MdiIconEditInfo->memdc); |
---|
1059 | DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hMemBmp); |
---|
1060 | DestroyWindow(MdiInfo[WndNum]->MdiIconEditInfo->hMain); |
---|
1061 | for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){ |
---|
1062 | HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[i2]); |
---|
1063 | } |
---|
1064 | HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo); |
---|
1065 | } |
---|
1066 | else |
---|
1067 | { |
---|
1068 | throw; |
---|
1069 | } |
---|
1070 | |
---|
1071 | delete MdiInfo[WndNum]; |
---|
1072 | Jenga::Common::EraseVectorItem<std::vector<MDIINFO *>>( MdiInfo, WndNum ); |
---|
1073 | } |
---|
1074 | void ResizeTextEditWnd(HWND hwnd,int cx,int cy){ |
---|
1075 | int WndNum; |
---|
1076 | WndNum=GetWndNum(hwnd); |
---|
1077 | if(WndNum==-1) return; |
---|
1078 | |
---|
1079 | int WebResultWndHeight; |
---|
1080 | WebResultWndHeight=LINK_ITEM_HEIGHT; |
---|
1081 | //未完成 |
---|
1082 | WebResultWndHeight=0; |
---|
1083 | |
---|
1084 | int iHeightRuler; |
---|
1085 | if(pobj_nv->bEditor_Ruler){ |
---|
1086 | //ルーラー |
---|
1087 | MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize( |
---|
1088 | 0, |
---|
1089 | 0, |
---|
1090 | cx, |
---|
1091 | HEIGHT_RULER); |
---|
1092 | |
---|
1093 | iHeightRuler=HEIGHT_RULER; |
---|
1094 | |
---|
1095 | ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW); |
---|
1096 | } |
---|
1097 | else{ |
---|
1098 | iHeightRuler=0; |
---|
1099 | |
---|
1100 | ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE); |
---|
1101 | } |
---|
1102 | |
---|
1103 | //エディットウィンドウ |
---|
1104 | MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit, |
---|
1105 | 0, |
---|
1106 | iHeightRuler, |
---|
1107 | cx, |
---|
1108 | cy-WebResultWndHeight-iHeightRuler, |
---|
1109 | 1); |
---|
1110 | |
---|
1111 | //Web検索ウィンドウ |
---|
1112 | MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize( |
---|
1113 | 0, |
---|
1114 | cy-WebResultWndHeight, |
---|
1115 | cx, |
---|
1116 | WebResultWndHeight); |
---|
1117 | } |
---|
1118 | LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ |
---|
1119 | int i,i2; |
---|
1120 | HWND hEdit; |
---|
1121 | |
---|
1122 | switch(message){ |
---|
1123 | case WM_CREATE: |
---|
1124 | CREATESTRUCT *lpcs; |
---|
1125 | lpcs=(CREATESTRUCT *)lParam; |
---|
1126 | MDICREATESTRUCT *lpmcs; |
---|
1127 | lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams; |
---|
1128 | SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam); |
---|
1129 | break; |
---|
1130 | case WM_MDIACTIVATE: |
---|
1131 | //以前のMDIウィンドウのパラメータ ヒントを破棄する |
---|
1132 | if(MethodCheckInfo.hWnd){ |
---|
1133 | DestroyWindow(MethodCheckInfo.hWnd); |
---|
1134 | MethodCheckInfo.hWnd=0; |
---|
1135 | } |
---|
1136 | |
---|
1137 | //以前のコード補完リストを破棄する |
---|
1138 | if(ComplementWndInfo.hWnd){ |
---|
1139 | DestroyWindow(ComplementWndInfo.hWnd); |
---|
1140 | ComplementWndInfo.hWnd=0; |
---|
1141 | } |
---|
1142 | |
---|
1143 | if(!lParam) return 0; |
---|
1144 | i=GetWndNum((HWND)lParam); |
---|
1145 | if(i==-1) return 0; //ウィンドウが初期状態の場合 |
---|
1146 | |
---|
1147 | #ifndef THETEXT |
---|
1148 | //デバッガ メニューの状態を設定 |
---|
1149 | pobj_Debugger->ResetCommandEnabled(); |
---|
1150 | #endif |
---|
1151 | |
---|
1152 | //ドキュメント セレクト コンボボックス |
---|
1153 | extern HWND hDocCombo; |
---|
1154 | i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str()); |
---|
1155 | SendMessage(hDocCombo,CB_SETCURSEL,i2,0); |
---|
1156 | |
---|
1157 | //タブコントロール |
---|
1158 | pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str()); |
---|
1159 | |
---|
1160 | if( !projectInfo.IsOpened() ){ |
---|
1161 | ResetClassTree((HTREEITEM)-1); |
---|
1162 | } |
---|
1163 | |
---|
1164 | return 0; |
---|
1165 | case WM_SETFOCUS: |
---|
1166 | hEdit=GetWindow(hwnd,GW_CHILD); |
---|
1167 | SetFocus(hEdit); |
---|
1168 | SetStatusText(CmdMsg); |
---|
1169 | ResetState_EditMenu(); |
---|
1170 | ResetState_ViewMenu(); |
---|
1171 | break; |
---|
1172 | case WM_SIZE: |
---|
1173 | ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam)); |
---|
1174 | break; |
---|
1175 | case WM_CLOSE: |
---|
1176 | if(!DocumentModifyCheck(hwnd)) return 0; |
---|
1177 | CloseDocWindow(GetWndNum(hwnd)); |
---|
1178 | pobj_nv->bMDIZoomed=IsZoomed(hwnd); |
---|
1179 | i=DefMDIChildProc(hwnd,message,wParam,lParam); |
---|
1180 | |
---|
1181 | //メニュー状態を設定 |
---|
1182 | ResetState_DocMenu(); |
---|
1183 | |
---|
1184 | return i; |
---|
1185 | } |
---|
1186 | return DefMDIChildProc(hwnd,message,wParam,lParam); |
---|
1187 | } |
---|
1188 | |
---|
1189 | WNDPROC oldMainFrameWndProc; |
---|
1190 | LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ |
---|
1191 | char str[MAX_PATH]; |
---|
1192 | RECT rect; |
---|
1193 | POINT pos; |
---|
1194 | |
---|
1195 | if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){ |
---|
1196 | //「最近使ったファイル」メニューコマンド |
---|
1197 | lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]); |
---|
1198 | OpenFileWithExtension(str); |
---|
1199 | return 0; |
---|
1200 | } |
---|
1201 | |
---|
1202 | if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){ |
---|
1203 | //「最近使ったプロジェクト」メニューコマンド |
---|
1204 | lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]); |
---|
1205 | OpenFileWithExtension(str); |
---|
1206 | return 0; |
---|
1207 | } |
---|
1208 | |
---|
1209 | switch(message) |
---|
1210 | { |
---|
1211 | |
---|
1212 | #ifndef THETEXT |
---|
1213 | case WM_SETCOMPILEVIEW: |
---|
1214 | //コンパイラウィンドウ(埋め込み型)が表示されたとき |
---|
1215 | hCompileView=(HWND)lParam; |
---|
1216 | ActiveBasic::IDE::Program::mainFrame.Resized(); |
---|
1217 | return 0; |
---|
1218 | case WM_DESTROYCOMPILEVIEW: |
---|
1219 | //コンパイラウィンドウ(埋め込み型)が破棄されたとき |
---|
1220 | if((int)hCompileView==-1){ |
---|
1221 | //すぐに次のコンパイラウィンドウが起動するとき |
---|
1222 | hCompileView=0; |
---|
1223 | } |
---|
1224 | else{ |
---|
1225 | //完全にコンパイラウィンドウを閉じたときはリサイズ |
---|
1226 | hCompileView=0; |
---|
1227 | |
---|
1228 | ActiveBasic::IDE::Program::mainFrame.Resized(); |
---|
1229 | } |
---|
1230 | return 0; |
---|
1231 | |
---|
1232 | case WM_SETDEBUGGERBASE: |
---|
1233 | //デバッガベースウィンドウ(埋め込み型)が表示されたとき |
---|
1234 | pobj_Debugger->begin(); |
---|
1235 | |
---|
1236 | //BasicCompiler.exeの強制終了を考慮 |
---|
1237 | SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL); |
---|
1238 | |
---|
1239 | return 0; |
---|
1240 | case WM_DESTROYDEBUGGERBASE: |
---|
1241 | //BasicCompiler.exeの強制終了を考慮 |
---|
1242 | KillTimer(hOwner,ID_DEBUGSAFTY); |
---|
1243 | |
---|
1244 | //デバッガベースウィンドウ(埋め込み型)が破棄されたとき |
---|
1245 | pobj_Debugger->end(); |
---|
1246 | |
---|
1247 | return 0; |
---|
1248 | |
---|
1249 | case WM_SETDEBUGGERVIEW: |
---|
1250 | //デバッガウィンドウ(埋め込み型)が表示されたとき |
---|
1251 | pobj_Debugger->watch_start((HWND)lParam); |
---|
1252 | ActiveBasic::IDE::Program::mainFrame.Resized(); |
---|
1253 | return 0; |
---|
1254 | case WM_DESTROYDEBUGGERVIEW: |
---|
1255 | //デバッガウィンドウ(埋め込み型)が破棄されたとき |
---|
1256 | pobj_Debugger->watch_quit(); |
---|
1257 | ActiveBasic::IDE::Program::mainFrame.Resized(); |
---|
1258 | return 0; |
---|
1259 | #endif |
---|
1260 | |
---|
1261 | |
---|
1262 | case WM_MOUSEMOVE: |
---|
1263 | static DWORD dwDragLever; |
---|
1264 | static POINT PrevMousePos; |
---|
1265 | static int start; |
---|
1266 | |
---|
1267 | pos.x=(long)(short)LOWORD(lParam); |
---|
1268 | pos.y=(long)(short)HIWORD(lParam); |
---|
1269 | ClientToScreen(hwnd,&pos); |
---|
1270 | |
---|
1271 | if(dwDragLever){ |
---|
1272 | GetClientRect(hwnd,&rect); |
---|
1273 | |
---|
1274 | if(dwDragLever==1){ |
---|
1275 | //プロジェクトビューをリサイズ中 |
---|
1276 | pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x; |
---|
1277 | if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100; |
---|
1278 | if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100; |
---|
1279 | } |
---|
1280 | else if(dwDragLever==2){ |
---|
1281 | //デバッガビューをリサイズ中 |
---|
1282 | pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y; |
---|
1283 | if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60; |
---|
1284 | if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView) |
---|
1285 | pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView; |
---|
1286 | } |
---|
1287 | else if(dwDragLever==3){ |
---|
1288 | //コンパイラビューをリサイズ中 |
---|
1289 | pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y; |
---|
1290 | if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60; |
---|
1291 | if(rect.bottom-100<pobj_nv->height_ClipCompileView) |
---|
1292 | pobj_nv->height_ClipCompileView=rect.bottom-100; |
---|
1293 | } |
---|
1294 | else if(dwDragLever==4){ |
---|
1295 | //SideWebをリサイズ中 |
---|
1296 | pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x; |
---|
1297 | if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100; |
---|
1298 | if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100; |
---|
1299 | } |
---|
1300 | |
---|
1301 | ActiveBasic::IDE::Program::mainFrame.Resized(); |
---|
1302 | UpdateWindow(hwnd); |
---|
1303 | } |
---|
1304 | if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){ |
---|
1305 | //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン |
---|
1306 | GetWindowRect(hProjectView,&rect); |
---|
1307 | if(rect.top<=pos.y&&pos.y<=rect.bottom&& |
---|
1308 | rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){ |
---|
1309 | SetCursor(LoadCursor(0,IDC_SIZEWE)); |
---|
1310 | } |
---|
1311 | } |
---|
1312 | #ifndef THETEXT |
---|
1313 | if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){ |
---|
1314 | //デバッガビューとMDIクライアントの境目のサイズ変更ライン |
---|
1315 | GetWindowRect(pobj_Debugger->hwnd,&rect); |
---|
1316 | if(rect.left<=pos.x&&pos.x<=rect.right&& |
---|
1317 | rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ |
---|
1318 | SetCursor(LoadCursor(0,IDC_SIZENS)); |
---|
1319 | } |
---|
1320 | } |
---|
1321 | if(bClipCompileView&&IsWindowVisible(hCompileView)){ |
---|
1322 | //コンパイラビューとMDIクライアントの境目のサイズ変更ライン |
---|
1323 | GetWindowRect(hCompileView,&rect); |
---|
1324 | if(rect.left<=pos.x&&pos.x<=rect.right&& |
---|
1325 | rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ |
---|
1326 | SetCursor(LoadCursor(0,IDC_SIZENS)); |
---|
1327 | } |
---|
1328 | } |
---|
1329 | #endif |
---|
1330 | if( pobj_SideWeb ) |
---|
1331 | { |
---|
1332 | if(pobj_SideWeb->bShow){ |
---|
1333 | //SideWebとMDIクライアントの境目のサイズ変更ライン |
---|
1334 | pobj_SideWeb->GetRect(&rect); |
---|
1335 | ClientToScreen(hwnd,&rect); |
---|
1336 | if(rect.top<=pos.y&&pos.y<=rect.bottom&& |
---|
1337 | rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){ |
---|
1338 | SetCursor(LoadCursor(0,IDC_SIZEWE)); |
---|
1339 | } |
---|
1340 | } |
---|
1341 | } |
---|
1342 | return 0; |
---|
1343 | case WM_LBUTTONDOWN: |
---|
1344 | pos.x=LOWORD(lParam); |
---|
1345 | pos.y=HIWORD(lParam); |
---|
1346 | ClientToScreen(hwnd,&pos); |
---|
1347 | |
---|
1348 | if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){ |
---|
1349 | //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン |
---|
1350 | GetWindowRect(hProjectView,&rect); |
---|
1351 | if(rect.top<=pos.y&&pos.y<=rect.bottom&& |
---|
1352 | rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){ |
---|
1353 | SetCursor(LoadCursor(0,IDC_SIZEWE)); |
---|
1354 | |
---|
1355 | dwDragLever=1; |
---|
1356 | SetCapture(hwnd); |
---|
1357 | |
---|
1358 | PrevMousePos=pos; |
---|
1359 | start=pobj_nv->width_ClipProjectView; |
---|
1360 | } |
---|
1361 | } |
---|
1362 | #ifndef THETEXT |
---|
1363 | if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){ |
---|
1364 | //デバッガビューとMDIクライアントの境目のサイズ変更ライン |
---|
1365 | GetWindowRect(pobj_Debugger->hwnd,&rect); |
---|
1366 | if(rect.left<=pos.x&&pos.x<=rect.right&& |
---|
1367 | rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ |
---|
1368 | SetCursor(LoadCursor(0,IDC_SIZENS)); |
---|
1369 | |
---|
1370 | dwDragLever=2; |
---|
1371 | SetCapture(hwnd); |
---|
1372 | |
---|
1373 | PrevMousePos=pos; |
---|
1374 | start=pobj_nv->height_ClipDebuggerView; |
---|
1375 | } |
---|
1376 | } |
---|
1377 | if(bClipCompileView&&IsWindowVisible(hCompileView)){ |
---|
1378 | //コンパイラビューとMDIクライアントの境目のサイズ変更ライン |
---|
1379 | GetWindowRect(hCompileView,&rect); |
---|
1380 | if(rect.left<=pos.x&&pos.x<=rect.right&& |
---|
1381 | rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ |
---|
1382 | SetCursor(LoadCursor(0,IDC_SIZENS)); |
---|
1383 | |
---|
1384 | dwDragLever=3; |
---|
1385 | SetCapture(hwnd); |
---|
1386 | |
---|
1387 | PrevMousePos=pos; |
---|
1388 | start=pobj_nv->height_ClipCompileView; |
---|
1389 | } |
---|
1390 | } |
---|
1391 | #endif |
---|
1392 | if( pobj_SideWeb && pobj_SideWeb->bShow){ |
---|
1393 | //SideWebとMDIクライアントの境目のサイズ変更ライン |
---|
1394 | pobj_SideWeb->GetRect(&rect); |
---|
1395 | ClientToScreen(hwnd,&rect); |
---|
1396 | if(rect.top<=pos.y&&pos.y<=rect.bottom&& |
---|
1397 | rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){ |
---|
1398 | SetCursor(LoadCursor(0,IDC_SIZENS)); |
---|
1399 | |
---|
1400 | dwDragLever=4; |
---|
1401 | SetCapture(hwnd); |
---|
1402 | |
---|
1403 | PrevMousePos=pos; |
---|
1404 | start=pobj_nv->width_WebSearchView; |
---|
1405 | } |
---|
1406 | } |
---|
1407 | return 0; |
---|
1408 | case WM_LBUTTONUP: |
---|
1409 | if(dwDragLever){ |
---|
1410 | dwDragLever=0; |
---|
1411 | ReleaseCapture(); |
---|
1412 | } |
---|
1413 | return 0; |
---|
1414 | |
---|
1415 | |
---|
1416 | case WM_SYSCOMMAND: |
---|
1417 | //ウィンドウの最小化前にウィンドウ位置を保存 |
---|
1418 | if(wParam==SC_MINIMIZE){ |
---|
1419 | if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1; |
---|
1420 | else if(!IsIconic(hwnd)){ |
---|
1421 | pobj_nv->bWindowMax=0; |
---|
1422 | GetWindowRect(hwnd,&pobj_nv->StartupWindowRect); |
---|
1423 | } |
---|
1424 | } |
---|
1425 | break; //処理をDefFrameProcへ |
---|
1426 | } |
---|
1427 | |
---|
1428 | return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam ); |
---|
1429 | } |
---|
1430 | |
---|
1431 | int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){ |
---|
1432 | WNDCLASSEX wcl; |
---|
1433 | |
---|
1434 | wcl.cbSize=sizeof(WNDCLASSEX); |
---|
1435 | wcl.hInstance=hInst; |
---|
1436 | wcl.lpszClassName=lpClassName; |
---|
1437 | wcl.lpfnWndProc=WndProc; |
---|
1438 | |
---|
1439 | if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS; |
---|
1440 | else wcl.style=0; |
---|
1441 | |
---|
1442 | wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); |
---|
1443 | wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO); |
---|
1444 | |
---|
1445 | if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM); |
---|
1446 | else wcl.hCursor=LoadCursor(NULL,IDC_ARROW); |
---|
1447 | |
---|
1448 | wcl.lpszMenuName=NULL; |
---|
1449 | wcl.cbClsExtra=0; |
---|
1450 | wcl.cbWndExtra=0; |
---|
1451 | wcl.hbrBackground=hBackBrush; |
---|
1452 | |
---|
1453 | return RegisterClassEx(&wcl); |
---|
1454 | } |
---|
1455 | int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){ |
---|
1456 | int i,i2,IsStr; |
---|
1457 | char str[MAX_PATH],str2[MAX_PATH],dummy[1024]; |
---|
1458 | MSG msg; |
---|
1459 | HACCEL hAccel; |
---|
1460 | |
---|
1461 | hInst=hThisInst; |
---|
1462 | if(!SetupProjectEditor()) return 0; |
---|
1463 | |
---|
1464 | HBRUSH hGrayBrush_LineNumber; |
---|
1465 | hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220)); |
---|
1466 | |
---|
1467 | //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1468 | if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1469 | if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1470 | if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1471 | if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1472 | if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1473 | if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1474 | if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1475 | if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1476 | if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1477 | if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1478 | if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0; |
---|
1479 | if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1480 | if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; |
---|
1481 | if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0; |
---|
1482 | if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1483 | if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0; |
---|
1484 | |
---|
1485 | //Web検索用のウィンドウクラス |
---|
1486 | if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1487 | if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1488 | if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1489 | |
---|
1490 | //ルーラーのウィンドウクラス |
---|
1491 | if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1492 | |
---|
1493 | //SideWebのウィンドウクラス |
---|
1494 | if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; |
---|
1495 | |
---|
1496 | ActiveBasic::IDE::Program::Main(); |
---|
1497 | |
---|
1498 | //return 0; |
---|
1499 | |
---|
1500 | |
---|
1501 | hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1)); |
---|
1502 | |
---|
1503 | //メインウィンドウ |
---|
1504 | RECT *prc; |
---|
1505 | prc=&pobj_nv->StartupWindowRect; |
---|
1506 | /* |
---|
1507 | hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME, |
---|
1508 | WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, |
---|
1509 | prc->left, prc->top, |
---|
1510 | prc->right-prc->left, prc->bottom-prc->top, |
---|
1511 | HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL); |
---|
1512 | */ |
---|
1513 | |
---|
1514 | //バックアップ用タイマーを設定(10秒に一回) |
---|
1515 | SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL); |
---|
1516 | |
---|
1517 | SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon); |
---|
1518 | SetClipboardViewer(hOwner); |
---|
1519 | |
---|
1520 | if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE); |
---|
1521 | else ShowWindow(hOwner,ShowCmd); |
---|
1522 | UpdateWindow(hOwner); |
---|
1523 | |
---|
1524 | int open_sw=0; |
---|
1525 | if(lstrlen(lpCmdLine)>0){ |
---|
1526 | lstrcpy(dummy,lpCmdLine); |
---|
1527 | for(i=0,i2=0,IsStr=0;;i++,i2++){ |
---|
1528 | if(dummy[i]=='\"'){ |
---|
1529 | if(IsStr==0) IsStr=1; |
---|
1530 | else IsStr=0; |
---|
1531 | i++; |
---|
1532 | } |
---|
1533 | if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){ |
---|
1534 | str[i2]=0; |
---|
1535 | if(!(strstr(str,":")||strstr(str,"\\\\"))){ |
---|
1536 | lstrcpy(str2,str); |
---|
1537 | GetCurrentDirectory(MAX_PATH,str); |
---|
1538 | lstrcat(str,"\\"); |
---|
1539 | lstrcat(str,str2); |
---|
1540 | } |
---|
1541 | ShortPathToLongPath(str,str2); |
---|
1542 | OpenFileWithExtension(str2); |
---|
1543 | open_sw=1; |
---|
1544 | if(dummy[i]=='\0') break; |
---|
1545 | i2=-1; |
---|
1546 | continue; |
---|
1547 | } |
---|
1548 | str[i2]=dummy[i]; |
---|
1549 | } |
---|
1550 | } |
---|
1551 | |
---|
1552 | BOOL bRestore=0; |
---|
1553 | |
---|
1554 | |
---|
1555 | { |
---|
1556 | //自動バックアップ及び復元機能 |
---|
1557 | |
---|
1558 | //必要であれば復元 |
---|
1559 | bRestore=restore(); |
---|
1560 | } |
---|
1561 | |
---|
1562 | |
---|
1563 | #ifdef THETEXT |
---|
1564 | if(open_sw==0&&bRestore==0){ |
---|
1565 | //ファイルが開かれなかったとき |
---|
1566 | NewTextEditWindow(NULL,WNDTYPE_TEXT); |
---|
1567 | } |
---|
1568 | #endif |
---|
1569 | |
---|
1570 | |
---|
1571 | while(GetMessage(&msg,NULL,0,0)){ |
---|
1572 | |
---|
1573 | if(!TranslateAccelerator(hOwner,hAccel,&msg)){ |
---|
1574 | if( projectInfo.IsOpened() ){ |
---|
1575 | for(i=0,i2=0;i<MdiInfo.size();i++){ |
---|
1576 | if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){ |
---|
1577 | if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1; |
---|
1578 | } |
---|
1579 | } |
---|
1580 | if(i2==0){ |
---|
1581 | if(!TranslateMDISysAccel(hClient,&msg)){ |
---|
1582 | TranslateMessage(&msg); |
---|
1583 | DispatchMessage(&msg); |
---|
1584 | } |
---|
1585 | } |
---|
1586 | } |
---|
1587 | else{ |
---|
1588 | if(!TranslateMDISysAccel(hClient,&msg)){ |
---|
1589 | TranslateMessage(&msg); |
---|
1590 | DispatchMessage(&msg); |
---|
1591 | } |
---|
1592 | } |
---|
1593 | } |
---|
1594 | } |
---|
1595 | |
---|
1596 | DeleteObject(hGrayBrush_LineNumber); |
---|
1597 | |
---|
1598 | #if defined HeapAlloc |
---|
1599 | CheckHeapCheck(); |
---|
1600 | #endif |
---|
1601 | |
---|
1602 | return msg.wParam; |
---|
1603 | } |
---|