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

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

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

File size: 29.3 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]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;
[609]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;
[3]26 }
[609]27 if(i==pWindowInfo->NumberOfChildWindows) return 0;
[3]28
[609]29 return pWindowInfo->pChildInfo[i].Control;
[3]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
[609]37 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
[3]38
[609]39 NameLen=lstrlen(pWindowInfo->name);
40 CallBackNameLen=lstrlen(pWindowInfo->CallBackName);
41
42 sprintf(temporary,"%s%s",ProjectInfo.dir,pWindowInfo->filepath);
[3]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;
[609]78 if(lstrcmp(temporary,pWindowInfo->name)==0&&buffer[i2+NameLen]=='_'){
[3]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++;
[609]119 if(memicmp(buffer+i2,pWindowInfo->CallBackName,CallBackNameLen)==0&&
[3]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
[609]138 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
139
140 sprintf(temporary,"%s%s",ProjectInfo.dir,pWindowInfo->filepath);
[3]141 hChild=OpenFileWithExtension(temporary);
142 if(!hChild) return;
143 WndNum=GetWndNum(hChild);
144
[24]145 pBuf=MdiInfo[WndNum].pMdiTextEdit->buffer;
[3]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 }
[24]200 SetFocus(MdiInfo[WndNum].pMdiTextEdit->hEdit);
[3]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
[609]225 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
226
[3]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",
[609]234 pWindowInfo->name,
[3]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",
[609]273 pWindowInfo->name,
[3]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",
[609]287 pWindowInfo->name,
[3]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",
[609]302 pWindowInfo->name,
303 pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].IdName,
[3]304 temporary);
305 break;
306 }
307 }
308 if(i==MaxCount) return 0;
309
[609]310 if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
[3]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 }
[609]334 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
[3]335 //ProgressBar
336 lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
337 }
[609]338 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
[3]339 //TrackBar
340 lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
341 }
[609]342 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
[3]343 //TreeView
344 if(0<=i&&i<=7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
345 else lstrcpy(Parameter,"ByRef nmTreeView As NMTREEVIEW");
346 }
[609]347 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
[3]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;
[609]401 int i,i2,WndNum;
[3]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));
[609]409 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
[3]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);
[609]447 if(pWindowInfo->MenuID){
[3]448 int MenuInfoNum;
[609]449 MenuInfoNum=GetMenuInfoNum(pWindowInfo->MenuID);
[3]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);
[609]466 if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON){
[3]467 //Button
468 InsertEventToList(hList,i++,"Click","BN_CLICKED","ボタンがクリックされた時");
469 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ボタンがダブル クリックされた時");
470 }
[609]471 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX){
[3]472 //CheckBox
473 InsertEventToList(hList,i++,"Click","BN_CLICKED","チェック ボックスがクリックされた時");
474 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","チェック ボックスがダブル クリックされた時");
475 }
[609]476 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX){
[3]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 }
[609]490 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT){
[3]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 }
[609]501 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX){
[3]502 //ImageBox
503 InsertEventToList(hList,i++,"Click","STN_CLICKED","イメージ ボックスがクリックされた時");
504 InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","イメージ ボックスがダブル クリックされた時");
505 }
[609]506 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX){
[3]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 }
[609]515 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
[3]516 //ListView
517 i=SetDefaultNotifyMessagesInList(hList,CT_LISTVIEW);
518 }
[609]519 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
[3]520 //ProgressBar
521 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
522 }
[609]523 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON){
[3]524 //RadioButton
525 InsertEventToList(hList,i++,"Click","BN_CLICKED","ラジオ ボタンがクリックされた時");
526 InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ラジオ ボタンがダブル クリックされた時");
527 }
[609]528 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
[3]529 //Static
530 InsertEventToList(hList,i++,"Click","STN_CLICKED","スタティック テキストがクリックされた時");
531 InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","スタティック テキストがダブル クリックされた時");
532 }
[609]533 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
[3]534 //TrackBar
535 InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時");
536 InsertEventToList(hList,i++,"ReleasedCapture","NM_RELEASEDCAPTURE ","マウス キャプチャ リリースの通知");
537 InsertEventToList(hList,i++,"CustomDraw","NM_CUSTOMDRAW ","カスタム描画操作の通知");
538 }
[609]539 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
[3]540 //TreeView
541 i=SetDefaultNotifyMessagesInList(hList,CT_TREEVIEW);
542 }
[609]543 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
[3]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
[302]650 OldEventListViewProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC);
651 SetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC,(long)EventListViewProc);
[3]652
[609]653 {
654 WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
655 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
656 NowMenuNum=GetMenuInfoNum(pWindowInfo->MenuID);
657 }
[3]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.