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

Last change on this file was 829, checked in by イグトランス (egtra), 12 years ago

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

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