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

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