#include "stdafx.h" #include "Common.h" //////////////////////////////////////////////////////////////////////////// //このソースファイルではイベントプロシージャの管理を行う(MainWnd.abなど) //////////////////////////////////////////////////////////////////////////// int NowMenuNum; int GetItemMessageInfo(int WndInfoNum,char *buffer,char *EventName){ int i; for(i=lstrlen(buffer);i>=0;i--){ if(buffer[i]=='_') break; } if(i==-1) return 0; lstrcpy(EventName,buffer+i+1); buffer[i]=0; if(lstrcmp(EventName,"MenuClick")==0) return CT_MENU; ActiveBasic::PM::WindowInfo *pWindowInfo = projectInfo.windowInfos[WndInfoNum]; BOOST_FOREACH( ActiveBasic::PM::ChildWindowInfo *pChildInfo, pWindowInfo->childWindowInfos ) { if( pChildInfo->GetName() == buffer ) { return pChildInfo->Control; } } return 0; } char **GetProcedureNamesOfMessageCall(int WndInfoNum,ITEMEVENTINFO **ppItemEventInfo,int *num,BOOL *pbAlways){ extern HANDLE hHeap; int i,i2,i3,i4,i5,i6,NameLen,CallBackNameLen; char *buffer,**ppNames,temporary[MAX_PATH],temp2[MAX_PATH]; ActiveBasic::PM::WindowInfo *pWindowInfo = projectInfo.windowInfos[WndInfoNum]; NameLen=pWindowInfo->GetName().size(); CallBackNameLen=pWindowInfo->GetCallbackName().size(); buffer = ReadBuffer( projectInfo.GetWorkDir().GetPath() + pWindowInfo->GetSourceFileNameForOldVer( projectInfo.GetWorkDir().GetPath() ) ); *num=0; ppNames=(char **)HeapAlloc(hHeap,0,1); *pbAlways=0; //メッセージ *ppItemEventInfo=(ITEMEVENTINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(ITEMEVENTINFO)); if( buffer ) { for(i=0,i4=0;;i++){ if(buffer[i]=='\0') break; //注釈(複数行) if(buffer[i]=='/'&&buffer[i+1]=='*'){ i+=2; while(!(buffer[i]=='*'&&buffer[i+1]=='/')){ if(buffer[i]=='\0'){ i--; break; } i++; } continue; } if((buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]!='\0')||i==0){ if(buffer[i]=='\r'&&buffer[i+1]=='\n') i2=i+2; else i2=i; while(buffer[i2]>='0'&&buffer[i2]<='9') i2++; while(buffer[i2]==' '||buffer[i2]=='\t') i2++; if(memicmp(buffer+i2,"Sub",3)==0&&(buffer[i2+3]==' '||buffer[i2+3]=='\t')){ i2+=4; while(buffer[i2]==' '||buffer[i2]=='\t') i2++; strncpy(temporary,buffer+i2,NameLen); temporary[NameLen]=0; if( pWindowInfo->GetName() == temporary && buffer[i2+NameLen] == '_' ){ for(i2+=NameLen+1,i3=0;;i2++,i3++){ if(!IsVariableChar(buffer[i2])){ temporary[i3]=0; break; } temporary[i3]=buffer[i2]; } i6=GetItemMessageInfo(WndInfoNum,temporary,temp2); if(i6){ //アイテムメッセージ(WM_COMMAND、WM_NOTIFY) for(i5=0;;i5++){ if((*ppItemEventInfo)[i5].IdName==0){ *ppItemEventInfo=(ITEMEVENTINFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,*ppItemEventInfo,(i4+2)*sizeof(ITEMEVENTINFO)); (*ppItemEventInfo)[i4].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1); lstrcpy((*ppItemEventInfo)[i4].IdName,temporary); (*ppItemEventInfo)[i4].pEventNames=(char **)HeapAlloc(hHeap,0,1); (*ppItemEventInfo)[i4].ClassID=i6; i4++; break; } if(lstrcmp((*ppItemEventInfo)[i5].IdName,temporary)==0) break; } (*ppItemEventInfo)[i5].pEventNames=(char **)HeapReAlloc(hHeap,0,(*ppItemEventInfo)[i5].pEventNames,((*ppItemEventInfo)[i5].EventNum+1)*sizeof(char *)); (*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1); lstrcpy((*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum],temp2); (*ppItemEventInfo)[i5].EventNum++; } else if(temporary[0]){ //一般メッセージ ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,(*num+1)*sizeof(char *)); ppNames[*num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1); lstrcpy(ppNames[*num],temporary); (*num)++; } } } if(memicmp(buffer+i2,"Function",8)==0&&(buffer[i2+8]==' '||buffer[i2+8]=='\t')){ //[WndName]_WindowProcのみFunction定義 i2+=9; while(buffer[i2]==' '||buffer[i2]=='\t') i2++; if(memicmp(buffer+i2,pWindowInfo->GetCallbackName().c_str(),CallBackNameLen)==0&& (buffer[i2+CallBackNameLen]==' '||buffer[i2+CallBackNameLen]=='\t'||buffer[i2+CallBackNameLen]=='(')){ *pbAlways=1; } } } } HeapDefaultFree(buffer); } return ppNames; } void SelectProcedureOfMessageCall(int WndInfoNum,char *ProcedureName,char *Parameter){ int i,i2,i3,WndNum; char temporary[MAX_PATH],*pBuf; HWND hChild; POINT pos; ActiveBasic::PM::WindowInfo *pWindowInfo = projectInfo.windowInfos[WndInfoNum]; hChild=OpenFileWithExtension( projectInfo.GetWorkDir().GetPath() + pWindowInfo->GetSourceFileNameForOldVer( projectInfo.GetWorkDir().GetPath() ) ); if(!hChild) return; WndNum=GetWndNum(hChild); pBuf=MdiInfo[WndNum]->pMdiTextEdit->buffer; for(i=0;;i++){ if(pBuf[i]=='\0') break; if((pBuf[i]=='\r'&&pBuf[i+1]=='\n'&&pBuf[i+2]!='\0')||i==0){ if(i) i2=i+2; else i2=i; while(pBuf[i2]>='0'&&pBuf[i2]<='9') i2++; while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++; strncpy(temporary,pBuf+i2,3); temporary[3]=0; if(lstrcmpi(temporary,"Sub")==0&&(pBuf[i2+3]==' '||pBuf[i2+3]=='\t')){ pos.x=i2; i2+=4; while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++; for(i3=0;;i2++,i3++){ if(!IsVariableChar(pBuf[i2])){ temporary[i3]=0; break; } temporary[i3]=pBuf[i2]; } if(lstrcmpi(temporary,ProcedureName)==0){ for(;;i2++){ if(pBuf[i2]=='\r'||pBuf[i2]=='\0'){ if(pBuf[i2]=='\r'){ if(pBuf[i2+1]!='\n') continue; } pos.y=i2; break; } } break; } } } } if(pBuf[i]){ //プロシージャが見つかったとき TextEdit_SetSel(WndNum,pos.x,pos.y); } else{ //プロシージャがないときは生成する //挿入位置にキャレットを移動 TextEdit_SetSel(WndNum,i,i); //挿入 sprintf(temporary,"\r\nSub %s(%s)",ProcedureName,Parameter); i2=lstrlen(temporary); lstrcat(temporary,"\r\n\r\nEnd Sub\r\n"); TextEdit_ReplaceUpdateUndoData(WndNum,temporary,1,1); TextEdit_SetSel(WndNum,i+2,i+i2); } SetFocus(MdiInfo[WndNum]->pMdiTextEdit->hEdit); } void InsertEventToList(HWND hList,int ItemNum,char *EventName,char *MessageName,char *OutLine){ LV_ITEM item; item.mask=LVIF_TEXT; item.pszText=EventName; item.iItem=ItemNum; item.iSubItem=0; ListView_InsertItem(hList,&item); item.pszText=MessageName; item.iItem=ItemNum; item.iSubItem=1; ListView_SetItem(hList,&item); item.pszText=OutLine; item.iItem=ItemNum; item.iSubItem=2; ListView_SetItem(hList,&item); } BOOL GetEventProcedureNameFromListView(HWND hList,int WndNum,int WndInfoNum,char *EventName,char *Parameter,DWORD dwEventType){ int i,MaxCount; char temporary[MAX_PATH]; ActiveBasic::PM::WindowInfo *pWindowInfo = projectInfo.windowInfos[WndInfoNum]; MaxCount=ListView_GetItemCount(hList); if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ if(dwEventType==EVENTTYPE_DEFAULT){ for(i=0;iGetName().c_str(), temporary); break; } } if(i==MaxCount) return 0; if(i==0) lstrcpy(Parameter,"state As Integer, minimized As Integer"); else if(i==1) lstrcpy(Parameter,"ByRef CreateStruct As CREATESTRUCT"); else if(i==2) Parameter[0]=0; else if(i==3) lstrcpy(Parameter,"hDrop As HDROP"); else if(i==4) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND"); else if(i==5) lstrcpy(Parameter,"KeyCode As Long, flags As Long"); else if(i==6) lstrcpy(Parameter,"KeyCode As Long, flags As Long"); else if(i==7) lstrcpy(Parameter,"KeyCode As Long, flags As Long"); else if(i==8) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==9) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==10) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==11) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==12) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==13) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==14) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==15) lstrcpy(Parameter,"x As Integer, y As Integer"); else if(i==16) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==17) lstrcpy(Parameter,"hDC As HDC"); else if(i==18) lstrcpy(Parameter,"ByRef cancel As Integer"); else if(i==19) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==20) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==21) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer"); else if(i==22) lstrcpy(Parameter,"SizeType As Long, cx As Integer, cy As Integer"); else if(i==23) Parameter[0]=0; else if(i==24) lstrcpy(Parameter,"TimerID As DWord"); else if(i==25) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND"); } else if(dwEventType==EVENTTYPE_MENU){ for(i=0;iGetName().c_str(), temporary); break; } } if(i==MaxCount) return 0; Parameter[0]=0; } else if(dwEventType==EVENTTYPE_MMSYS){ for(i=0;iGetName().c_str(), temporary); break; } } if(i==MaxCount) return 0; if(i==0) lstrcpy(Parameter,"flags As Long, DevID As DWord"); } } else{ for(i=0;iGetName().c_str(), pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->GetName().c_str(), temporary); break; } } if(i==MaxCount) return 0; if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTVIEW){ //ListView if(i==0) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==1) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==2) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==3) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==4) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==5) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==6) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==8) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==9) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO"); else if(i==10) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==11) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==12) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==13) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==14) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO"); else if(i==15) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO"); else if(i==16) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==17) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==18) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW"); else if(i==19) lstrcpy(Parameter,"ByRef nmLVKeyDown As NMLVKEYDOWN"); else if(i==20) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_PROGRESSBAR){ //ProgressBar lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TRACKBAR){ //TrackBar lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TREEVIEW){ //TreeView if(0<=i&&i<=7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else lstrcpy(Parameter,"ByRef nmTreeView As NMTREEVIEW"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_UPDOWN){ //UpDown if(i==0) lstrcpy(Parameter,"ByRef nmHdr As NMHDR"); else if(i==1) lstrcpy(Parameter,"ByRef nmUpDown As NMUPDOWN"); } else Parameter[0]=0; } return 1; } int SetDefaultNotifyMessagesInList(HWND hList,int ClassID){ int i; i=0; InsertEventToList(hList,i++,"Click","NM_CLICK","コントロール内でマウスの左ボタンがクリックされた時"); InsertEventToList(hList,i++,"DblClick","NM_DBLCLK","コントロール内でマウスの左ボタンがダブル クリックされた時"); InsertEventToList(hList,i++,"KillFocus","NM_KILLFOCUS","入力フォーカスを失った時"); InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時"); InsertEventToList(hList,i++,"RClick","NM_RCLICK","コントロール内でマウスの右ボタンがクリックされた時"); InsertEventToList(hList,i++,"RDblClick","NM_RDBLCLK","コントロール内でマウスの右ボタンがダブル クリックされた時"); InsertEventToList(hList,i++,"Return","NM_RETURN","コントロールに入力フォーカスがあるときにEnterキーが押された時"); InsertEventToList(hList,i++,"SetFocus","NM_SETFOCUS","入力フォーカスを取得した時"); if(ClassID==CT_LISTVIEW){ InsertEventToList(hList,i++,"BeginDrag","LVN_BEGINDRAG","マウスの左ボタンでドラッグ&ドロップを始める時"); InsertEventToList(hList,i++,"BeginLabelEdit","LVN_BEGINLABELEDIT","アイテムのラベルの編集が開始された時"); InsertEventToList(hList,i++,"BeginRDrag","LVN_BEGINRDRAG","マウスの右ボタンでドラッグ&ドロップを始める時"); InsertEventToList(hList,i++,"ColumnClick","LVN_COLUMNCLICK","カラムの1つがクリックされた時"); InsertEventToList(hList,i++,"DeleteAllItems","LVN_DELETEALLITEMS","ビュー内のすべてのアイテムが削除された時"); InsertEventToList(hList,i++,"DeleteItem","LVN_DELETEITEM","ビュー内のアイテムが削除された時"); InsertEventToList(hList,i++,"EndLabelEdit","LVN_ENDLABELEDIT","アイテムのラベルの編集が終了した時"); InsertEventToList(hList,i++,"GetDispInfo","LVN_GETDISPINFO","親ウィンドウがディスプレイに関する情報を供給した時"); InsertEventToList(hList,i++,"InsertItem","LVN_INSERTITEM","ビュー内にアイテムが挿入された時"); InsertEventToList(hList,i++,"ItemChanged","LVN_ITEMCHANGED","ビュー内のアイテムが変更された時"); InsertEventToList(hList,i++,"ItemChanging","LVN_ITEMCHANGING","ビュー内のアイテムを変更する時"); InsertEventToList(hList,i++,"KeyDown","LVN_KEYDOWN","キーが押された時"); InsertEventToList(hList,i++,"SetDispInfo","LVN_SETDISPINFO","親ウィンドウがアイテムに対して情報を更新する必要がある時"); } else if(ClassID==CT_TREEVIEW){ //未完成 } return i; } void SetMenuEventToList(HWND hList,MENU_INFO *pMenuInfo,int *pListNum,int *pPos){ int i; for(i=0;iNumberOfMenu;i++){ if((!pMenuInfo->pMenuInfo[i].pMenuInfo)&&pMenuInfo->pMenuInfo[i].type==MFT_STRING) InsertEventToList(hList,(*pListNum)++,pMenuInfo->pMenuInfo[i].IdName,"WM_COMMAND",pMenuInfo->pMenuInfo[i].caption); (*pPos)++; if(pMenuInfo->pMenuInfo[i].pMenuInfo) SetMenuEventToList(hList,&pMenuInfo->pMenuInfo[i],pListNum,pPos); } } void SetEventToList(HWND hDlg,DWORD dwEventType){ int i,i2,WndNum; HWND hList; hList=GetDlgItem(hDlg,IDC_EVENTLIST); ListView_DeleteAllItems(hList); SetDlgItemText(hDlg,IDC_PROCEDURENAME,""); WndNum=GetWndNum(GetWindow(hClient,GW_CHILD)); ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path); i=0; if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1); EnableWindow(GetDlgItem(hDlg,IDC_MENU),1); EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),1); if(dwEventType==EVENTTYPE_DEFAULT){ SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0); InsertEventToList(hList,i++,"Activate","WM_ACTIVATE","ウィンドウがアクティブ、または非アクティブになった時"); InsertEventToList(hList,i++,"Create","WM_CREATE","ウィンドウ作成時"); InsertEventToList(hList,i++,"Destroy","WM_DESTROY","ウィンドウ破棄時"); InsertEventToList(hList,i++,"DropFiles","WM_DROPFILES","ウィンドウにファイルがドロップされた時"); InsertEventToList(hList,i++,"HScroll","WM_HSCROLL","水平スクロール バー・トラック バーが移動した時"); InsertEventToList(hList,i++,"KeyDown","WM_KEYDOWN","キーが押された時"); InsertEventToList(hList,i++,"KeyPress","WM_CHAR","ANSI文字キーを押して離した時"); InsertEventToList(hList,i++,"KeyUp","WM_KEYUP","キーが離された時"); InsertEventToList(hList,i++,"LButtonDblClick","WM_LBUTTONDBLCLK","マウスの左ボタンがダブル クリックされた時"); InsertEventToList(hList,i++,"LButtonDown","WM_LBUTTONDOWN","マウスの左ボタンが押された時"); InsertEventToList(hList,i++,"LButtonUp","WM_LBUTTONUP","マウスの左ボタンが離された時"); InsertEventToList(hList,i++,"MButtonDblClick","WM_MBUTTONDBLCLK","マウスの中央ボタンがダブル クリックされた時"); InsertEventToList(hList,i++,"MButtonDown","WM_MBUTTONDOWN","マウスの中央ボタンが押された時"); InsertEventToList(hList,i++,"MButtonUp","WM_MBUTTONUP","マウスの中央ボタンが離された時"); InsertEventToList(hList,i++,"MouseMove","WM_MOUSEMOVE","マウスが移動した時"); InsertEventToList(hList,i++,"Move","WM_MOVE","ウィンドウが移動した時"); InsertEventToList(hList,i++,"Notify","WM_NOTIFY","コモンコントロールからメッセージが通知された時"); InsertEventToList(hList,i++,"Paint","WM_PAINT","再描画要求が出された時"); InsertEventToList(hList,i++,"QueryClose","WM_CLOSE","ウィンドウの終了ボタンが押された時"); InsertEventToList(hList,i++,"RButtonDblClick","WM_RBUTTONDBLCLK","マウスの右ボタンがダブル クリックされた時"); InsertEventToList(hList,i++,"RButtonDown","WM_RBUTTONDOWN","マウスの右ボタンが押された時"); InsertEventToList(hList,i++,"RButtonUp","WM_RBUTTONUP","マウスの右ボタンが離された時"); InsertEventToList(hList,i++,"Resize","WM_SIZE","ウィンドウの大きさが変更された時"); InsertEventToList(hList,i++,"SetFocus","WM_SETFOCUS","キーボード フォーカスを受け取った時"); InsertEventToList(hList,i++,"Timer","WM_TIMER","設定したタイマーのタイム アウト時"); InsertEventToList(hList,i++,"VScroll","WM_VSCROLL","垂直スクロール バー・トラック バーが移動した時"); } else if(dwEventType==EVENTTYPE_MENU){ //メニュー イベント SendDlgItemMessage(hDlg,IDC_MENU,BM_SETCHECK,BST_CHECKED,0); if( pWindowInfo->HasMenu() ) { int MenuInfoNum; MenuInfoNum=GetMenuInfoNum(pWindowInfo->GetMenuIdName().c_str()); i=0; i2=0; SetMenuEventToList(hList,&projectInfo.pMenuInfo[MenuInfoNum],&i,&i2); } } else if(dwEventType==EVENTTYPE_MMSYS){ SendDlgItemMessage(hDlg,IDC_MMSYS,BM_SETCHECK,BST_CHECKED,0); InsertEventToList(hList,i++,"MciNotify","MM_MCINOTIFY","MCIコマンドが完了したり異常終了した場合"); } } else{ EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1); EnableWindow(GetDlgItem(hDlg,IDC_MENU),0); EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),0); SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0); if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_BUTTON){ //Button InsertEventToList(hList,i++,"Click","BN_CLICKED","ボタンがクリックされた時"); InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ボタンがダブル クリックされた時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_CHECKBOX){ //CheckBox InsertEventToList(hList,i++,"Click","BN_CLICKED","チェック ボックスがクリックされた時"); InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","チェック ボックスがダブル クリックされた時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_COMBOBOX){ //ComboBox InsertEventToList(hList,i++,"CloseUp","CBN_CLOSEUP","リスト ボックスが非表示になる時"); InsertEventToList(hList,i++,"DblClick","CBN_DBLCLK","リスト内のアイテムがダブル クリックされた時"); InsertEventToList(hList,i++,"DropDown","CBN_DROPDOWN","リスト ボックスがドロップ ダウンされる時"); InsertEventToList(hList,i++,"EditChange","CBN_EDITCHANGE","エディット ボックスの内容が変化した時(後処理)"); InsertEventToList(hList,i++,"EditUpdate","CBN_EDITUPDATE","リスト ボックスが非表示になった時"); InsertEventToList(hList,i++,"ErrSpace","CBN_ERRSPACE","メモリ割り当てに失敗した時"); InsertEventToList(hList,i++,"KillFocus","CBN_KILLFOCUS","入力フォーカスを失った時"); InsertEventToList(hList,i++,"SelChange","CBN_SELCHANGE","リスト内の選択が変更された時"); InsertEventToList(hList,i++,"SelEndCancel","CBN_SELENDCANCEL","コンボ ボックスの選択を取り消した時"); InsertEventToList(hList,i++,"SelEndOk","CBN_SELENDOK","選択した項目が有効である時"); InsertEventToList(hList,i++,"SetFocus","CBN_SETFOCUS","入力フォーカスを取得した時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_EDIT){ //Edit InsertEventToList(hList,i++,"Change","EN_CHANGE","エディット ボックスの内容が変更された時(後処理)"); InsertEventToList(hList,i++,"ErrSpace","EN_ERRSPACE","メモリ割り当てに失敗した時"); InsertEventToList(hList,i++,"HScroll","EN_HSCROLL","水平スクロールを行った時"); InsertEventToList(hList,i++,"KillFocus","EN_KILLFOCUS","入力フォーカスを失った時"); InsertEventToList(hList,i++,"MaxText","EN_MAXTEXT","文字数が上限を超えた時"); InsertEventToList(hList,i++,"SetFocus","EN_SETFOCUS","入力フォーカスを取得した時"); InsertEventToList(hList,i++,"Update","EN_UPDATE","エディット ボックスの内容が変更される時(前処理)"); InsertEventToList(hList,i++,"VScroll","EN_VSCROLL","垂直スクロールを行った時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_IMAGEBOX){ //ImageBox InsertEventToList(hList,i++,"Click","STN_CLICKED","イメージ ボックスがクリックされた時"); InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","イメージ ボックスがダブル クリックされた時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTBOX){ //ListBox InsertEventToList(hList,i++,"SelChange","LBN_SELCHANGE","リスト内の選択が変更された時"); InsertEventToList(hList,i++,"DblClick","LBN_DBLCLK","リスト内の文字列がダブル クリックされた時"); InsertEventToList(hList,i++,"ErrSpace","LBN_ERRSPACE","リストのメモリ割り当てに失敗した時"); InsertEventToList(hList,i++,"KillFocus","LBN_KILLFOCUS","入力フォーカスを失った時"); InsertEventToList(hList,i++,"SelCancel","LBN_SELCANCEL","リスト内の選択が取り消された時"); InsertEventToList(hList,i++,"SetFocus","LBN_SETFOCUS","入力フォーカスを取得した時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTVIEW){ //ListView i=SetDefaultNotifyMessagesInList(hList,CT_LISTVIEW); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_PROGRESSBAR){ //ProgressBar InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_RADIOBUTTON){ //RadioButton InsertEventToList(hList,i++,"Click","BN_CLICKED","ラジオ ボタンがクリックされた時"); InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ラジオ ボタンがダブル クリックされた時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_STATIC){ //Static InsertEventToList(hList,i++,"Click","STN_CLICKED","スタティック テキストがクリックされた時"); InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","スタティック テキストがダブル クリックされた時"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TRACKBAR){ //TrackBar InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時"); InsertEventToList(hList,i++,"ReleasedCapture","NM_RELEASEDCAPTURE ","マウス キャプチャ リリースの通知"); InsertEventToList(hList,i++,"CustomDraw","NM_CUSTOMDRAW ","カスタム描画操作の通知"); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TREEVIEW){ //TreeView i=SetDefaultNotifyMessagesInList(hList,CT_TREEVIEW); } else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_UPDOWN){ //UpDown InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","メモリ不足でコントロールの動作が完了できない時"); InsertEventToList(hList,i++,"Deltapos","UDN_DELTAPOS","コントロールの位置が変えられようとしている時"); } } } void Popup_SelectMenu(HWND hDlg){ int i; POINT pos; HMENU hMenu; if(projectInfo.NumberOfMenu==0) return; GetCursorPos(&pos); hMenu=CreatePopupMenu(); MENUITEMINFO mii; mii.cbSize=sizeof(MENUITEMINFO); for(i=0;ipath); ListView_DeleteAllItems(hList); SetDlgItemText(hwnd,IDC_PROCEDURENAME,""); i=0; i2=0; NowMenuNum=wParam-100; SetMenuEventToList(hList,&projectInfo.pMenuInfo[wParam-100],&i,&i2); } switch(message){ case WM_INITDIALOG: SetPosCenter(hwnd); SetFocus(GetDlgItem(hwnd,IDC_EVENTLIST)); hList=GetDlgItem(hwnd,IDC_EVENTLIST); GetClientRect(hList,&rect); dwStyle=ListView_GetExtendedListViewStyle(hList); dwStyle|=LVS_EX_FULLROWSELECT; ListView_SetExtendedListViewStyle(hList,dwStyle); ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; ListView_Column.fmt=LVCFMT_LEFT; ListView_Column.cx=100; ListView_Column.pszText="イベント"; ListView_Column.iSubItem=0; ListView_InsertColumn(hList,0,&ListView_Column); ListView_Column.cx=120; ListView_Column.pszText="対応メッセージ"; ListView_Column.iSubItem=1; ListView_InsertColumn(hList,1,&ListView_Column); ListView_Column.cx=rect.right-240; ListView_Column.pszText="概要"; ListView_Column.iSubItem=2; ListView_InsertColumn(hList,2,&ListView_Column); dwEventType=lParam; SetEventToList(hwnd,dwEventType); EnableWindow(GetDlgItem(hwnd,IDOK),0); OldEventListViewProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC); SetWindowLongPtr(GetDlgItem(hwnd,IDC_EVENTLIST),GWLP_WNDPROC,(long)EventListViewProc); { WndNum=GetWndNum(GetWindow(hClient,GW_CHILD)); ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path); NowMenuNum=GetMenuInfoNum(pWindowInfo->GetMenuIdName().c_str()); } break; case WM_COMMAND: switch(LOWORD(wParam)){ case IDC_DEFAULT: dwEventType=EVENTTYPE_DEFAULT; SetEventToList(hwnd,dwEventType); EnableWindow(GetDlgItem(hwnd,IDOK),0); break; case IDC_MENU: dwEventType=EVENTTYPE_MENU; SetEventToList(hwnd,dwEventType); EnableWindow(GetDlgItem(hwnd,IDOK),0); //「対象メニュー」選択メニューを表示 Popup_SelectMenu(hwnd); break; case IDC_MMSYS: dwEventType=EVENTTYPE_MMSYS; SetEventToList(hwnd,dwEventType); EnableWindow(GetDlgItem(hwnd,IDOK),0); break; case IDOK: hList=GetDlgItem(hwnd,IDC_EVENTLIST); WndNum=GetWndNum(GetWindow(hClient,GW_CHILD)); WndInfoNum=GetWndInfoNum(MdiInfo[WndNum]->path); if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){ SelectProcedureOfMessageCall(WndInfoNum,temporary,temp2); EndDialog(hwnd,0); } return 1; case IDCANCEL: EndDialog(hwnd,0); return 1; } break; case WM_NOTIFY: NMLISTVIEW *nmListView; nmListView=(NMLISTVIEW *)lParam; if(nmListView->hdr.idFrom==IDC_EVENTLIST){ if(nmListView->hdr.code==LVN_ITEMCHANGED){ hList=GetDlgItem(hwnd,IDC_EVENTLIST); WndNum=GetWndNum(GetWindow(hClient,GW_CHILD)); WndInfoNum=GetWndInfoNum(MdiInfo[WndNum]->path); if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){ sprintf(temporary+lstrlen(temporary),"(%s)",temp2); EnableWindow(GetDlgItem(hwnd,IDOK),1); } else{ temporary[0]=0; EnableWindow(GetDlgItem(hwnd,IDOK),0); } SetDlgItemText(hwnd,IDC_PROCEDURENAME,temporary); return 1; } else if(nmListView->hdr.code==NM_DBLCLK) SendMessage(hwnd,WM_COMMAND,IDOK,0); } break; } return 0; }