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

Last change on this file since 475 was 475, checked in by dai_9181, 15 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.