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

Last change on this file since 609 was 609, checked in by dai_9181, 15 years ago

ProjectInfo構造体のpWindowInfoメンバをwindowInfosメンバに置き換えた。

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