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

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

"extern PROJECTINFO ProjectInfo;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

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