source: dev/trunk/ab5.0/abdev/abdev/MessageCallOperation.cpp@ 481

Last change on this file since 481 was 475, checked in by dai_9181, 16 years ago

構成管理を変更中・・・(いったんコミット)

File size: 29.8 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5////////////////////////////////////////////////////////////////////////////
6//このソースファイルではイベントプロシージャの管理を行う(MainWnd.abなど)
7////////////////////////////////////////////////////////////////////////////
8
9int NowMenuNum;
10
11int GetItemMessageInfo(int WndInfoNum,char *buffer,char *EventName){
12 extern PROJECTINFO ProjectInfo;
13 int i;
14
15 for(i=lstrlen(buffer);i>=0;i--){
16 if(buffer[i]=='_') break;
17 }
18 if(i==-1) return 0;
19 lstrcpy(EventName,buffer+i+1);
20 buffer[i]=0;
21 if(lstrcmp(EventName,"MenuClick")==0) return CT_MENU;
22 for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
23 if(lstrcmp(buffer,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].IdName)==0) break;
24 }
25 if(i==ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows) return 0;
26
27 return ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].Control;
28}
29char **GetProcedureNamesOfMessageCall(int WndInfoNum,ITEMEVENTINFO **ppItemEventInfo,int *num,BOOL *pbAlways){
30 extern HANDLE hHeap;
31 extern PROJECTINFO ProjectInfo;
32 int i,i2,i3,i4,i5,i6,NameLen,CallBackNameLen;
33 char *buffer,**ppNames,temporary[MAX_PATH],temp2[MAX_PATH];
34
35 NameLen=lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name);
36 CallBackNameLen=lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].CallBackName);
37
38 sprintf(temporary,"%s%s",ProjectInfo.dir,ProjectInfo.pWindowInfo[WndInfoNum].filepath);
39 buffer=ReadBuffer(temporary);
40
41 *num=0;
42 ppNames=(char **)HeapAlloc(hHeap,0,1);
43
44 *pbAlways=0;
45
46 //メッセージ
47 *ppItemEventInfo=(ITEMEVENTINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(ITEMEVENTINFO));
48 for(i=0,i4=0;;i++){
49 if(buffer[i]=='\0') break;
50
51 //注釈(複数行)
52 if(buffer[i]=='/'&&buffer[i+1]=='*'){
53 i+=2;
54 while(!(buffer[i]=='*'&&buffer[i+1]=='/')){
55 if(buffer[i]=='\0'){
56 i--;
57 break;
58 }
59 i++;
60 }
61 continue;
62 }
63
64 if((buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]!='\0')||i==0){
65 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i2=i+2;
66 else i2=i;
67 while(buffer[i2]>='0'&&buffer[i2]<='9') i2++;
68 while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
69 if(memicmp(buffer+i2,"Sub",3)==0&&(buffer[i2+3]==' '||buffer[i2+3]=='\t')){
70 i2+=4;
71 while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
72 strncpy(temporary,buffer+i2,NameLen);
73 temporary[NameLen]=0;
74 if(lstrcmp(temporary,ProjectInfo.pWindowInfo[WndInfoNum].name)==0&&buffer[i2+NameLen]=='_'){
75 for(i2+=NameLen+1,i3=0;;i2++,i3++){
76 if(!IsVariableChar(buffer[i2])){
77 temporary[i3]=0;
78 break;
79 }
80 temporary[i3]=buffer[i2];
81 }
82 i6=GetItemMessageInfo(WndInfoNum,temporary,temp2);
83 if(i6){
84 //アイテムメッセージ(WM_COMMAND、WM_NOTIFY)
85 for(i5=0;;i5++){
86 if((*ppItemEventInfo)[i5].IdName==0){
87 *ppItemEventInfo=(ITEMEVENTINFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,*ppItemEventInfo,(i4+2)*sizeof(ITEMEVENTINFO));
88 (*ppItemEventInfo)[i4].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
89 lstrcpy((*ppItemEventInfo)[i4].IdName,temporary);
90 (*ppItemEventInfo)[i4].pEventNames=(char **)HeapAlloc(hHeap,0,1);
91 (*ppItemEventInfo)[i4].ClassID=i6;
92 i4++;
93 break;
94 }
95 if(lstrcmp((*ppItemEventInfo)[i5].IdName,temporary)==0) break;
96 }
97 (*ppItemEventInfo)[i5].pEventNames=(char **)HeapReAlloc(hHeap,0,(*ppItemEventInfo)[i5].pEventNames,((*ppItemEventInfo)[i5].EventNum+1)*sizeof(char *));
98 (*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
99 lstrcpy((*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum],temp2);
100 (*ppItemEventInfo)[i5].EventNum++;
101 }
102 else if(temporary[0]){
103 //一般メッセージ
104 ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,(*num+1)*sizeof(char *));
105 ppNames[*num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
106 lstrcpy(ppNames[*num],temporary);
107 (*num)++;
108 }
109 }
110 }
111 if(memicmp(buffer+i2,"Function",8)==0&&(buffer[i2+8]==' '||buffer[i2+8]=='\t')){
112 //[WndName]_WindowProcのみFunction定義
113 i2+=9;
114 while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
115 if(memicmp(buffer+i2,ProjectInfo.pWindowInfo[WndInfoNum].CallBackName,CallBackNameLen)==0&&
116 (buffer[i2+CallBackNameLen]==' '||buffer[i2+CallBackNameLen]=='\t'||buffer[i2+CallBackNameLen]=='(')){
117 *pbAlways=1;
118 }
119 }
120 }
121 }
122 HeapDefaultFree(buffer);
123
124 return ppNames;
125}
126void SelectProcedureOfMessageCall(int WndInfoNum,char *ProcedureName,char *Parameter){
127 extern MDIINFO MdiInfo[MAX_WNDNUM];
128 extern PROJECTINFO ProjectInfo;
129 int i,i2,i3,WndNum;
130 char temporary[MAX_PATH],*pBuf;
131 HWND hChild;
132 POINT pos;
133
134 sprintf(temporary,"%s%s",ProjectInfo.dir,ProjectInfo.pWindowInfo[WndInfoNum].filepath);
135 hChild=OpenFileWithExtension(temporary);
136 if(!hChild) return;
137 WndNum=GetWndNum(hChild);
138
139 pBuf=MdiInfo[WndNum].pMdiTextEdit->buffer;
140
141 for(i=0;;i++){
142 if(pBuf[i]=='\0') break;
143 if((pBuf[i]=='\r'&&pBuf[i+1]=='\n'&&pBuf[i+2]!='\0')||i==0){
144 if(i) i2=i+2;
145 else i2=i;
146 while(pBuf[i2]>='0'&&pBuf[i2]<='9') i2++;
147 while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
148 strncpy(temporary,pBuf+i2,3);
149 temporary[3]=0;
150 if(lstrcmpi(temporary,"Sub")==0&&(pBuf[i2+3]==' '||pBuf[i2+3]=='\t')){
151 pos.x=i2;
152 i2+=4;
153 while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
154 for(i3=0;;i2++,i3++){
155 if(!IsVariableChar(pBuf[i2])){
156 temporary[i3]=0;
157 break;
158 }
159 temporary[i3]=pBuf[i2];
160 }
161 if(lstrcmpi(temporary,ProcedureName)==0){
162 for(;;i2++){
163 if(pBuf[i2]=='\r'||pBuf[i2]=='\0'){
164 if(pBuf[i2]=='\r'){
165 if(pBuf[i2+1]!='\n') continue;
166 }
167 pos.y=i2;
168 break;
169 }
170 }
171 break;
172 }
173 }
174 }
175 }
176 if(pBuf[i]){
177 //プロシージャが見つかったとき
178 TextEdit_SetSel(WndNum,pos.x,pos.y);
179 }
180 else{
181 //プロシージャがないときは生成する
182
183 //挿入位置にキャレットを移動
184 TextEdit_SetSel(WndNum,i,i);
185
186 //挿入
187 sprintf(temporary,"\r\nSub %s(%s)",ProcedureName,Parameter);
188 i2=lstrlen(temporary);
189 lstrcat(temporary,"\r\n\r\nEnd Sub\r\n");
190 TextEdit_ReplaceUpdateUndoData(WndNum,temporary,1,1);
191
192 TextEdit_SetSel(WndNum,i+2,i+i2);
193 }
194 SetFocus(MdiInfo[WndNum].pMdiTextEdit->hEdit);
195}
196void InsertEventToList(HWND hList,int ItemNum,char *EventName,char *MessageName,char *OutLine){
197 LV_ITEM item;
198
199 item.mask=LVIF_TEXT;
200 item.pszText=EventName;
201 item.iItem=ItemNum;
202 item.iSubItem=0;
203 ListView_InsertItem(hList,&item);
204 item.pszText=MessageName;
205 item.iItem=ItemNum;
206 item.iSubItem=1;
207 ListView_SetItem(hList,&item);
208 item.pszText=OutLine;
209 item.iItem=ItemNum;
210 item.iSubItem=2;
211 ListView_SetItem(hList,&item);
212}
213BOOL GetEventProcedureNameFromListView(HWND hList,int WndNum,int WndInfoNum,char *EventName,char *Parameter,DWORD dwEventType){
214 extern PROJECTINFO ProjectInfo;
215 extern MDIINFO MdiInfo[MAX_WNDNUM];
216 int i,MaxCount;
217 char temporary[MAX_PATH];
218
219 MaxCount=ListView_GetItemCount(hList);
220 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
221 if(dwEventType==EVENTTYPE_DEFAULT){
222 for(i=0;i<MaxCount;i++){
223 if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
224 ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
225 sprintf(EventName,"%s_%s",
226 ProjectInfo.pWindowInfo[WndInfoNum].name,
227 temporary);
228 break;
229 }
230 }
231 if(i==MaxCount) return 0;
232
233 if(i==0) lstrcpy(Parameter,"state As Integer, minimized As Integer");
234 else if(i==1) lstrcpy(Parameter,"ByRef CreateStruct As CREATESTRUCT");
235 else if(i==2) Parameter[0]=0;
236 else if(i==3) lstrcpy(Parameter,"hDrop As HDROP");
237 else if(i==4) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND");
238 else if(i==5) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
239 else if(i==6) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
240 else if(i==7) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
241 else if(i==8) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
242 else if(i==9) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
243 else if(i==10) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
244 else if(i==11) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
245 else if(i==12) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
246 else if(i==13) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
247 else if(i==14) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
248 else if(i==15) lstrcpy(Parameter,"x As Integer, y As Integer");
249 else if(i==16) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
250 else if(i==17) lstrcpy(Parameter,"hDC As HDC");
251 else if(i==18) lstrcpy(Parameter,"ByRef cancel As Integer");
252 else if(i==19) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
253 else if(i==20) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
254 else if(i==21) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
255 else if(i==22) lstrcpy(Parameter,"SizeType As Long, cx As Integer, cy As Integer");
256 else if(i==23) Parameter[0]=0;
257 else if(i==24) lstrcpy(Parameter,"TimerID As DWord");
258 else if(i==25) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND");
259 }
260 else if(dwEventType==EVENTTYPE_MENU){
261 for(i=0;i<MaxCount;i++){
262 if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
263 ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
264 sprintf(EventName,"%s_%s_MenuClick",
265 ProjectInfo.pWindowInfo[WndInfoNum].name,
266 temporary);
267 break;
268 }
269 }
270 if(i==MaxCount) return 0;
271
272 Parameter[0]=0;
273 }
274 else if(dwEventType==EVENTTYPE_MMSYS){
275 for(i=0;i<MaxCount;i++){
276 if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
277 ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
278 sprintf(EventName,"%s_%s",
279 ProjectInfo.pWindowInfo[WndInfoNum].name,
280 temporary);
281 break;
282 }
283 }
284 if(i==MaxCount) return 0;
285
286 if(i==0) lstrcpy(Parameter,"flags As Long, DevID As DWord");
287 }
288 }
289 else{
290 for(i=0;i<MaxCount;i++){
291 if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
292 ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
293 sprintf(EventName,"%s_%s_%s",
294 ProjectInfo.pWindowInfo[WndInfoNum].name,
295 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].IdName,
296 temporary);
297 break;
298 }
299 }
300 if(i==MaxCount) return 0;
301
302 if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
303 //ListView
304 if(i==0) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
305 else if(i==1) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
306 else if(i==2) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
307 else if(i==3) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
308 else if(i==4) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
309 else if(i==5) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
310 else if(i==6) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
311 else if(i==7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
312 else if(i==8) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
313 else if(i==9) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
314 else if(i==10) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
315 else if(i==11) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
316 else if(i==12) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
317 else if(i==13) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
318 else if(i==14) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
319 else if(i==15) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
320 else if(i==16) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
321 else if(i==17) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
322 else if(i==18) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
323 else if(i==19) lstrcpy(Parameter,"ByRef nmLVKeyDown As NMLVKEYDOWN");
324 else if(i==20) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
325 }
326 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
327 //ProgressBar
328 lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
329 }
330 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
331 //TrackBar
332 lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
333 }
334 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
335 //TreeView
336 if(0<=i&&i<=7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
337 else lstrcpy(Parameter,"ByRef nmTreeView As NMTREEVIEW");
338 }
339 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
340 //UpDown
341 if(i==0) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
342 else if(i==1) lstrcpy(Parameter,"ByRef nmUpDown As NMUPDOWN");
343 }
344 else Parameter[0]=0;
345 }
346
347 return 1;
348}
349int SetDefaultNotifyMessagesInList(HWND hList,int ClassID){
350 int i;
351 i=0;
352 InsertEventToList(hList,i++,"Click","NM_CLICK","コントロール内でマウスの左ボタンがクリックされた時");
353 InsertEventToList(hList,i++,"DblClick","NM_DBLCLK","コントロール内でマウスの左ボタンがダブル クリックされた時");
354 InsertEventToList(hList,i++,"KillFocus","NM_KILLFOCUS","入力フォーカスを失った時");
355 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
356 InsertEventToList(hList,i++,"RClick","NM_RCLICK","コントロール内でマウスの右ボタンがクリックされた時");
357 InsertEventToList(hList,i++,"RDblClick","NM_RDBLCLK","コントロール内でマウスの右ボタンがダブル クリックされた時");
358 InsertEventToList(hList,i++,"Return","NM_RETURN","コントロールに入力フォーカスがあるときにEnterキーが押された時");
359 InsertEventToList(hList,i++,"SetFocus","NM_SETFOCUS","入力フォーカスを取得した時");
360 if(ClassID==CT_LISTVIEW){
361 InsertEventToList(hList,i++,"BeginDrag","LVN_BEGINDRAG","マウスの左ボタンでドラッグ&ドロップを始める時");
362 InsertEventToList(hList,i++,"BeginLabelEdit","LVN_BEGINLABELEDIT","アイテムのラベルの編集が開始された時");
363 InsertEventToList(hList,i++,"BeginRDrag","LVN_BEGINRDRAG","マウスの右ボタンでドラッグ&ドロップを始める時");
364 InsertEventToList(hList,i++,"ColumnClick","LVN_COLUMNCLICK","カラムの1つがクリックされた時");
365 InsertEventToList(hList,i++,"DeleteAllItems","LVN_DELETEALLITEMS","ビュー内のすべてのアイテムが削除された時");
366 InsertEventToList(hList,i++,"DeleteItem","LVN_DELETEITEM","ビュー内のアイテムが削除された時");
367 InsertEventToList(hList,i++,"EndLabelEdit","LVN_ENDLABELEDIT","アイテムのラベルの編集が終了した時");
368 InsertEventToList(hList,i++,"GetDispInfo","LVN_GETDISPINFO","親ウィンドウがディスプレイに関する情報を供給した時");
369 InsertEventToList(hList,i++,"InsertItem","LVN_INSERTITEM","ビュー内にアイテムが挿入された時");
370 InsertEventToList(hList,i++,"ItemChanged","LVN_ITEMCHANGED","ビュー内のアイテムが変更された時");
371 InsertEventToList(hList,i++,"ItemChanging","LVN_ITEMCHANGING","ビュー内のアイテムを変更する時");
372 InsertEventToList(hList,i++,"KeyDown","LVN_KEYDOWN","キーが押された時");
373 InsertEventToList(hList,i++,"SetDispInfo","LVN_SETDISPINFO","親ウィンドウがアイテムに対して情報を更新する必要がある時");
374 }
375 else if(ClassID==CT_TREEVIEW){
376 //未完成
377 }
378 return i;
379}
380void SetMenuEventToList(HWND hList,MENU_INFO *pMenuInfo,int *pListNum,int *pPos){
381 int i;
382 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
383 if((!pMenuInfo->pMenuInfo[i].pMenuInfo)&&pMenuInfo->pMenuInfo[i].type==MFT_STRING)
384 InsertEventToList(hList,(*pListNum)++,pMenuInfo->pMenuInfo[i].IdName,"WM_COMMAND",pMenuInfo->pMenuInfo[i].caption);
385 (*pPos)++;
386 if(pMenuInfo->pMenuInfo[i].pMenuInfo)
387 SetMenuEventToList(hList,&pMenuInfo->pMenuInfo[i],pListNum,pPos);
388 }
389}
390void SetEventToList(HWND hDlg,DWORD dwEventType){
391 extern MDIINFO MdiInfo[MAX_WNDNUM];
392 extern PROJECTINFO ProjectInfo;
393 int i,i2,WndNum,WndInfoNum;
394 HWND hList;
395
396 hList=GetDlgItem(hDlg,IDC_EVENTLIST);
397 ListView_DeleteAllItems(hList);
398 SetDlgItemText(hDlg,IDC_PROCEDURENAME,"");
399
400 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
401 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
402 i=0;
403 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
404 EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1);
405 EnableWindow(GetDlgItem(hDlg,IDC_MENU),1);
406 EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),1);
407 if(dwEventType==EVENTTYPE_DEFAULT){
408 SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0);
409 InsertEventToList(hList,i++,"Activate","WM_ACTIVATE","ウィンドウがアクティブ、または非アクティブになった時");
410 InsertEventToList(hList,i++,"Create","WM_CREATE","ウィンドウ作成時");
411 InsertEventToList(hList,i++,"Destroy","WM_DESTROY","ウィンドウ破棄時");
412 InsertEventToList(hList,i++,"DropFiles","WM_DROPFILES","ウィンドウにファイルがドロップされた時");
413 InsertEventToList(hList,i++,"HScroll","WM_HSCROLL","水平スクロール バー・トラック バーが移動した時");
414 InsertEventToList(hList,i++,"KeyDown","WM_KEYDOWN","キーが押された時");
415 InsertEventToList(hList,i++,"KeyPress","WM_CHAR","ANSI文字キーを押して離した時");
416 InsertEventToList(hList,i++,"KeyUp","WM_KEYUP","キーが離された時");
417 InsertEventToList(hList,i++,"LButtonDblClick","WM_LBUTTONDBLCLK","マウスの左ボタンがダブル クリックされた時");
418 InsertEventToList(hList,i++,"LButtonDown","WM_LBUTTONDOWN","マウスの左ボタンが押された時");
419 InsertEventToList(hList,i++,"LButtonUp","WM_LBUTTONUP","マウスの左ボタンが離された時");
420 InsertEventToList(hList,i++,"MButtonDblClick","WM_MBUTTONDBLCLK","マウスの中央ボタンがダブル クリックされた時");
421 InsertEventToList(hList,i++,"MButtonDown","WM_MBUTTONDOWN","マウスの中央ボタンが押された時");
422 InsertEventToList(hList,i++,"MButtonUp","WM_MBUTTONUP","マウスの中央ボタンが離された時");
423 InsertEventToList(hList,i++,"MouseMove","WM_MOUSEMOVE","マウスが移動した時");
424 InsertEventToList(hList,i++,"Move","WM_MOVE","ウィンドウが移動した時");
425 InsertEventToList(hList,i++,"Notify","WM_NOTIFY","コモンコントロールからメッセージが通知された時");
426 InsertEventToList(hList,i++,"Paint","WM_PAINT","再描画要求が出された時");
427 InsertEventToList(hList,i++,"QueryClose","WM_CLOSE","ウィンドウの終了ボタンが押された時");
428 InsertEventToList(hList,i++,"RButtonDblClick","WM_RBUTTONDBLCLK","マウスの右ボタンがダブル クリックされた時");
429 InsertEventToList(hList,i++,"RButtonDown","WM_RBUTTONDOWN","マウスの右ボタンが押された時");
430 InsertEventToList(hList,i++,"RButtonUp","WM_RBUTTONUP","マウスの右ボタンが離された時");
431 InsertEventToList(hList,i++,"Resize","WM_SIZE","ウィンドウの大きさが変更された時");
432 InsertEventToList(hList,i++,"SetFocus","WM_SETFOCUS","キーボード フォーカスを受け取った時");
433 InsertEventToList(hList,i++,"Timer","WM_TIMER","設定したタイマーのタイム アウト時");
434 InsertEventToList(hList,i++,"VScroll","WM_VSCROLL","垂直スクロール バー・トラック バーが移動した時");
435 }
436 else if(dwEventType==EVENTTYPE_MENU){
437 //メニュー イベント
438 SendDlgItemMessage(hDlg,IDC_MENU,BM_SETCHECK,BST_CHECKED,0);
439 if(ProjectInfo.pWindowInfo[WndInfoNum].MenuID){
440 int MenuInfoNum;
441 MenuInfoNum=GetMenuInfoNum(ProjectInfo.pWindowInfo[WndInfoNum].MenuID);
442 i=0;
443 i2=0;
444
445 SetMenuEventToList(hList,&ProjectInfo.pMenuInfo[MenuInfoNum],&i,&i2);
446 }
447 }
448 else if(dwEventType==EVENTTYPE_MMSYS){
449 SendDlgItemMessage(hDlg,IDC_MMSYS,BM_SETCHECK,BST_CHECKED,0);
450 InsertEventToList(hList,i++,"MciNotify","MM_MCINOTIFY","MCIコマンドが完了したり異常終了した場合");
451 }
452 }
453 else{
454 EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1);
455 EnableWindow(GetDlgItem(hDlg,IDC_MENU),0);
456 EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),0);
457 SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0);
458 if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON){
459 //Button
460 InsertEventToList(hList,i++,"Click","BN_CLICKED","ボタンがクリックされた時");
461 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ボタンがダブル クリックされた時");
462 }
463 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX){
464 //CheckBox
465 InsertEventToList(hList,i++,"Click","BN_CLICKED","チェック ボックスがクリックされた時");
466 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","チェック ボックスがダブル クリックされた時");
467 }
468 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX){
469 //ComboBox
470 InsertEventToList(hList,i++,"CloseUp","CBN_CLOSEUP","リスト ボックスが非表示になる時");
471 InsertEventToList(hList,i++,"DblClick","CBN_DBLCLK","リスト内のアイテムがダブル クリックされた時");
472 InsertEventToList(hList,i++,"DropDown","CBN_DROPDOWN","リスト ボックスがドロップ ダウンされる時");
473 InsertEventToList(hList,i++,"EditChange","CBN_EDITCHANGE","エディット ボックスの内容が変化した時(後処理)");
474 InsertEventToList(hList,i++,"EditUpdate","CBN_EDITUPDATE","リスト ボックスが非表示になった時");
475 InsertEventToList(hList,i++,"ErrSpace","CBN_ERRSPACE","メモリ割り当てに失敗した時");
476 InsertEventToList(hList,i++,"KillFocus","CBN_KILLFOCUS","入力フォーカスを失った時");
477 InsertEventToList(hList,i++,"SelChange","CBN_SELCHANGE","リスト内の選択が変更された時");
478 InsertEventToList(hList,i++,"SelEndCancel","CBN_SELENDCANCEL","コンボ ボックスの選択を取り消した時");
479 InsertEventToList(hList,i++,"SelEndOk","CBN_SELENDOK","選択した項目が有効である時");
480 InsertEventToList(hList,i++,"SetFocus","CBN_SETFOCUS","入力フォーカスを取得した時");
481 }
482 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT){
483 //Edit
484 InsertEventToList(hList,i++,"Change","EN_CHANGE","エディット ボックスの内容が変更された時(後処理)");
485 InsertEventToList(hList,i++,"ErrSpace","EN_ERRSPACE","メモリ割り当てに失敗した時");
486 InsertEventToList(hList,i++,"HScroll","EN_HSCROLL","水平スクロールを行った時");
487 InsertEventToList(hList,i++,"KillFocus","EN_KILLFOCUS","入力フォーカスを失った時");
488 InsertEventToList(hList,i++,"MaxText","EN_MAXTEXT","文字数が上限を超えた時");
489 InsertEventToList(hList,i++,"SetFocus","EN_SETFOCUS","入力フォーカスを取得した時");
490 InsertEventToList(hList,i++,"Update","EN_UPDATE","エディット ボックスの内容が変更される時(前処理)");
491 InsertEventToList(hList,i++,"VScroll","EN_VSCROLL","垂直スクロールを行った時");
492 }
493 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX){
494 //ImageBox
495 InsertEventToList(hList,i++,"Click","STN_CLICKED","イメージ ボックスがクリックされた時");
496 InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","イメージ ボックスがダブル クリックされた時");
497 }
498 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX){
499 //ListBox
500 InsertEventToList(hList,i++,"SelChange","LBN_SELCHANGE","リスト内の選択が変更された時");
501 InsertEventToList(hList,i++,"DblClick","LBN_DBLCLK","リスト内の文字列がダブル クリックされた時");
502 InsertEventToList(hList,i++,"ErrSpace","LBN_ERRSPACE","リストのメモリ割り当てに失敗した時");
503 InsertEventToList(hList,i++,"KillFocus","LBN_KILLFOCUS","入力フォーカスを失った時");
504 InsertEventToList(hList,i++,"SelCancel","LBN_SELCANCEL","リスト内の選択が取り消された時");
505 InsertEventToList(hList,i++,"SetFocus","LBN_SETFOCUS","入力フォーカスを取得した時");
506 }
507 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
508 //ListView
509 i=SetDefaultNotifyMessagesInList(hList,CT_LISTVIEW);
510 }
511 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
512 //ProgressBar
513 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
514 }
515 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON){
516 //RadioButton
517 InsertEventToList(hList,i++,"Click","BN_CLICKED","ラジオ ボタンがクリックされた時");
518 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ラジオ ボタンがダブル クリックされた時");
519 }
520 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
521 //Static
522 InsertEventToList(hList,i++,"Click","STN_CLICKED","スタティック テキストがクリックされた時");
523 InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","スタティック テキストがダブル クリックされた時");
524 }
525 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
526 //TrackBar
527 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
528 InsertEventToList(hList,i++,"ReleasedCapture","NM_RELEASEDCAPTURE ","マウス キャプチャ リリースの通知");
529 InsertEventToList(hList,i++,"CustomDraw","NM_CUSTOMDRAW ","カスタム描画操作の通知");
530 }
531 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
532 //TreeView
533 i=SetDefaultNotifyMessagesInList(hList,CT_TREEVIEW);
534 }
535 else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
536 //UpDown
537 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
538 InsertEventToList(hList,i++,"Deltapos","UDN_DELTAPOS","コントロールの位置が変えられようとしている時");
539 }
540 }
541}
542void Popup_SelectMenu(HWND hDlg){
543 extern PROJECTINFO ProjectInfo;
544 int i;
545 POINT pos;
546 HMENU hMenu;
547
548 if(ProjectInfo.NumberOfMenu==0) return;
549
550 GetCursorPos(&pos);
551
552 hMenu=CreatePopupMenu();
553
554 MENUITEMINFO mii;
555 mii.cbSize=sizeof(MENUITEMINFO);
556 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
557 if(NowMenuNum==i){
558 mii.fMask=MIIM_TYPE|MIIM_ID|MIIM_STATE;
559 mii.fState=MFS_CHECKED;
560 }
561 else mii.fMask=MIIM_TYPE|MIIM_ID;
562 mii.fType=MFT_STRING;
563 mii.wID=100+i;
564 mii.dwTypeData=ProjectInfo.pMenuInfo[i].IdName;
565 InsertMenuItem(hMenu,i,1,&mii);
566 }
567
568 extern HMENU hRadMenuBase;
569 TrackPopupMenu(hMenu,TPM_LEFTALIGN,pos.x,pos.y,0,hDlg,0);
570
571 DestroyMenu(hMenu);
572}
573
574WNDPROC OldEventListViewProc;
575LRESULT CALLBACK EventListViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
576 if(message==WM_RBUTTONDOWN){
577 if(SendDlgItemMessage(GetParent(hwnd),IDC_MENU,BM_GETCHECK,0,0))
578 Popup_SelectMenu(GetParent(hwnd));
579 return 0;
580 }
581 return CallWindowProc(OldEventListViewProc,hwnd,message,wParam,lParam);
582}
583BOOL CALLBACK DlgEventCode(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
584 extern MDIINFO MdiInfo[MAX_WNDNUM];
585 extern PROJECTINFO ProjectInfo;
586 int WndNum,WndInfoNum,i,i2;
587 char temporary[MAX_PATH],temp2[MAX_PATH];
588 HWND hList;
589 DWORD dwStyle;
590 RECT rect;
591 LV_COLUMN ListView_Column;
592
593 static DWORD dwEventType;
594
595 if(message==WM_COMMAND&&100<=wParam&&wParam<200){
596 hList=GetDlgItem(hwnd,IDC_EVENTLIST);
597 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
598 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
599
600 ListView_DeleteAllItems(hList);
601 SetDlgItemText(hwnd,IDC_PROCEDURENAME,"");
602 i=0;
603 i2=0;
604
605 NowMenuNum=wParam-100;
606 SetMenuEventToList(hList,&ProjectInfo.pMenuInfo[wParam-100],&i,&i2);
607 }
608
609 switch(message){
610 case WM_INITDIALOG:
611 SetPosCenter(hwnd);
612 SetFocus(GetDlgItem(hwnd,IDC_EVENTLIST));
613
614 hList=GetDlgItem(hwnd,IDC_EVENTLIST);
615 GetClientRect(hList,&rect);
616 dwStyle=ListView_GetExtendedListViewStyle(hList);
617 dwStyle|=LVS_EX_FULLROWSELECT;
618 ListView_SetExtendedListViewStyle(hList,dwStyle);
619
620 ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
621 ListView_Column.fmt=LVCFMT_LEFT;
622
623 ListView_Column.cx=100;
624 ListView_Column.pszText="イベント";
625 ListView_Column.iSubItem=0;
626 ListView_InsertColumn(hList,0,&ListView_Column);
627
628 ListView_Column.cx=120;
629 ListView_Column.pszText="対応メッセージ";
630 ListView_Column.iSubItem=1;
631 ListView_InsertColumn(hList,1,&ListView_Column);
632
633 ListView_Column.cx=rect.right-240;
634 ListView_Column.pszText="概要";
635 ListView_Column.iSubItem=2;
636 ListView_InsertColumn(hList,2,&ListView_Column);
637
638 dwEventType=lParam;
639 SetEventToList(hwnd,dwEventType);
640 EnableWindow(GetDlgItem(hwnd,IDOK),0);
641
642 OldEventListViewProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC);
643 SetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC,(long)EventListViewProc);
644
645 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
646 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
647 NowMenuNum=GetMenuInfoNum(ProjectInfo.pWindowInfo[WndInfoNum].MenuID);
648 break;
649 case WM_COMMAND:
650 switch(LOWORD(wParam)){
651 case IDC_DEFAULT:
652 dwEventType=EVENTTYPE_DEFAULT;
653 SetEventToList(hwnd,dwEventType);
654 EnableWindow(GetDlgItem(hwnd,IDOK),0);
655 break;
656 case IDC_MENU:
657 dwEventType=EVENTTYPE_MENU;
658 SetEventToList(hwnd,dwEventType);
659 EnableWindow(GetDlgItem(hwnd,IDOK),0);
660
661 //「対象メニュー」選択メニューを表示
662 Popup_SelectMenu(hwnd);
663 break;
664 case IDC_MMSYS:
665 dwEventType=EVENTTYPE_MMSYS;
666 SetEventToList(hwnd,dwEventType);
667 EnableWindow(GetDlgItem(hwnd,IDOK),0);
668 break;
669 case IDOK:
670 hList=GetDlgItem(hwnd,IDC_EVENTLIST);
671 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
672 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
673 if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){
674 SelectProcedureOfMessageCall(WndInfoNum,temporary,temp2);
675 EndDialog(hwnd,0);
676 }
677 return 1;
678 case IDCANCEL:
679 EndDialog(hwnd,0);
680 return 1;
681 }
682 break;
683 case WM_NOTIFY:
684 NMLISTVIEW *nmListView;
685 nmListView=(NMLISTVIEW *)lParam;
686 if(nmListView->hdr.idFrom==IDC_EVENTLIST){
687 if(nmListView->hdr.code==LVN_ITEMCHANGED){
688 hList=GetDlgItem(hwnd,IDC_EVENTLIST);
689 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
690 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
691 if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){
692 sprintf(temporary+lstrlen(temporary),"(%s)",temp2);
693 EnableWindow(GetDlgItem(hwnd,IDOK),1);
694 }
695 else{
696 temporary[0]=0;
697 EnableWindow(GetDlgItem(hwnd,IDOK),0);
698 }
699 SetDlgItemText(hwnd,IDC_PROCEDURENAME,temporary);
700 return 1;
701 }
702 else if(nmListView->hdr.code==NM_DBLCLK)
703 SendMessage(hwnd,WM_COMMAND,IDOK,0);
704 }
705 break;
706 }
707 return 0;
708}
Note: See TracBrowser for help on using the repository browser.