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

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

MDIINFO構造体をリファクタリング。

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