Changeset 625 in dev for trunk/ab5.0/abdev/abdev/WindowControl.cpp
- Timestamp:
- May 27, 2008, 9:17:34 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/abdev/WindowControl.cpp
r624 r625 13 13 #endif 14 14 15 int GetWndInfoNum(char *name){ 15 int GetWndInfoNum( const std::string &name ) 16 { 16 17 for( int i=0;i<static_cast<int>(projectInfo.windowInfos.size());i++){ 17 if(lstrcmpi(name ,projectInfo.windowInfos[i]->GetName().c_str())==0) return i;18 if(lstrcmpi(name.c_str(),projectInfo.windowInfos[i]->GetName().c_str())==0) return i; 18 19 } 19 20 return -1; 20 21 } 21 ActiveBasic::PM::WindowInfo *GetWndInfo( c har *name )22 ActiveBasic::PM::WindowInfo *GetWndInfo( const std::string &name ) 22 23 { 23 24 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, projectInfo.windowInfos ) 24 25 { 25 if(lstrcmpi(name ,pWindowInfo->GetName().c_str())==0) return pWindowInfo;26 if(lstrcmpi(name.c_str(),pWindowInfo->GetName().c_str())==0) return pWindowInfo; 26 27 } 27 28 return NULL; … … 66 67 HGLOBAL Rad_GetChildInfoClipboardData(int WndNum,int WndInfoNum){ 67 68 //ChildWindowInfo構造体をクリップボード用データ(pByteが示すバッファ)に変換する 68 extern MDIINFO MdiInfo[MAX_WNDNUM];69 69 HGLOBAL hGlobal; 70 70 BYTE *pByte; … … 141 141 void Rad_PasteChildInfoClipboardData(int WndNum,HGLOBAL hGlobal){ 142 142 //hGlobalに格納されているクリップボードデータをRAD画面に挿入する 143 extern MDIINFO MdiInfo[MAX_WNDNUM];144 143 BYTE *pByte; 145 144 int i2,i3,WndInfoNum; … … 307 306 308 307 return pBuf; 308 } 309 const std::string PermutationWndPgmTemplate( const std::string &templateFilePath, const std::string &projectName, const std::string &windowName, const std::string &handleName, const std::string &procName ) 310 { 311 Jenga::Common::SourceTemplate sourceTemplate( templateFilePath ); 312 Jenga::Common::SourceTemplate::Values values; 313 314 values.Insert( "#name#", projectName ); 315 values.Insert( "#window#", windowName ); 316 values.Insert( "#handle#", handleName ); 317 values.Insert( "#procedure#", procName ); 318 319 return sourceTemplate.GetResult( values ); 309 320 } 310 321 … … 535 546 } 536 547 else if(lstrcmp(MessageName,"Create")==0){ 537 if(pWindowInfo->type==WNDTYPE_MODALDLG||pWindowInfo->type==WNDTYPE_MODELESSDLG) 548 if( pWindowInfo->IsModalDlg() || pWindowInfo->IsModelessDlg() ) 549 { 538 550 sprintf(Command,"%sCase WM_INITDIALOG\r\n",spaces); 539 else sprintf(Command,"%sCase WM_CREATE\r\n",spaces); 551 } 552 else 553 { 554 sprintf(Command,"%sCase WM_CREATE\r\n",spaces); 555 } 540 556 i=lstrlen(Command); 541 557 … … 833 849 sprintf(Command+i,"%s\tDim cancel=0 As Integer\r\n",spaces); 834 850 i+=lstrlen(Command+i); 835 if(bProcedureCall){ 851 if(bProcedureCall) 852 { 836 853 sprintf(Command+i,"%s\t%s_%s(cancel)\r\n",spaces,pWindowInfo->GetName().c_str(),MessageName); 837 854 i+=lstrlen(Command+i); 838 855 } 839 if(pWindowInfo->type==WNDTYPE_MODALDLG) 856 857 if( pWindowInfo->IsModalDlg() ) 858 { 840 859 sprintf(Command+i,"%s\tIf cancel=0 Then EndDialog(hWnd,0)\r\n",spaces); 860 } 841 861 else 862 { 842 863 sprintf(Command+i,"%s\tIf cancel=0 Then DestroyWindow(hWnd)\r\n",spaces); 864 } 843 865 return WM_CLOSE; 844 866 } … … 1362 1384 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, projectInfo.windowInfos ) 1363 1385 { 1364 if(pWindowInfo->type==WNDTYPE_MODALDLG){ 1386 if( pWindowInfo->IsModalDlg() ) 1387 { 1365 1388 if(sw1==0){ 1366 1389 sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo->GetName().c_str()); … … 1388 1411 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n", 1389 1412 pWindowInfo->GetHandleName().c_str(), 1390 pWindowInfo-> CallBackName);1413 pWindowInfo->GetCallbackName().c_str()); 1391 1414 } 1392 1415 else{ … … 1461 1484 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, projectInfo.windowInfos ) 1462 1485 { 1463 if(pWindowInfo->type==WNDTYPE_MODELESSDLG){ 1486 if( pWindowInfo->IsModelessDlg() ) 1487 { 1464 1488 sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo->GetName().c_str()); 1465 1489 i2+=lstrlen(buffer+i2); … … 1480 1504 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n", 1481 1505 pWindowInfo->GetHandleName().c_str(), 1482 pWindowInfo-> CallBackName);1506 pWindowInfo->GetCallbackName().c_str()); 1483 1507 } 1484 1508 else{ … … 1534 1558 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, projectInfo.windowInfos ) 1535 1559 { 1536 if(pWindowInfo->type==WNDTYPE_DEFAULT){ 1560 if( pWindowInfo->IsDefaultWindow() ) 1561 { 1537 1562 ////////////////////// 1538 1563 //通常ウィンドウ作成 … … 1558 1583 i2+=lstrlen(buffer+i2); 1559 1584 if(bAvailUserProc[i]) 1560 sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(%s)\r\n",pWindowInfo-> CallBackName);1585 sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(%s)\r\n",pWindowInfo->GetCallbackName().c_str()); 1561 1586 else sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(EventCall_%s)\r\n",pWindowInfo->GetName().c_str()); 1562 1587 i2+=lstrlen(buffer+i2); … … 1631 1656 { 1632 1657 extern HANDLE hHeap; 1633 extern MDIINFO MdiInfo[MAX_WNDNUM];1634 1658 int i,i2,size; 1635 1659 char *buffer,*temporary; … … 1638 1662 buffer=(char *)HeapAlloc(hHeap,0,GENERAL_SIZE*size); 1639 1663 i2=0; 1640 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, projectInfo.windowInfos )1664 BOOST_FOREACH( ActiveBasic::PM::WindowInfo *pWindowInfo, windowInfos ) 1641 1665 { 1642 1666 sprintf(buffer+i2,"WINDOW:%s\r\n",pWindowInfo->GetName().c_str()); 1643 i2+=lstrlen(buffer+i2);1644 sprintf(buffer+i2," HANDLE = %s\r\n",pWindowInfo->GetHandleName().c_str());1645 1667 i2+=lstrlen(buffer+i2); 1646 1668 sprintf(buffer+i2," POINT = %d,%d\r\n",pWindowInfo->pos.x,pWindowInfo->pos.y); … … 1684 1706 sprintf(buffer+i2," CLASS = \"%s\"\r\n",pWindowInfo->GetClassName().c_str()); 1685 1707 i2+=lstrlen(buffer+i2); 1686 sprintf(buffer+i2," CALLBACK = %s\r\n",pWindowInfo->CallBackName); 1687 i2+=lstrlen(buffer+i2); 1688 sprintf(buffer+i2," TYPE = %d\r\n",pWindowInfo->type); 1689 i2+=lstrlen(buffer+i2); 1690 sprintf(buffer+i2," FILEPATH = %s\r\n",pWindowInfo->filepath); 1708 sprintf(buffer+i2," TYPE = %d\r\n",(DWORD)pWindowInfo->GetType()); 1691 1709 i2+=lstrlen(buffer+i2); 1692 1710 BOOST_FOREACH( const ActiveBasic::PM::ChildWindowInfo *pChildInfo, pWindowInfo->childWindowInfos ) … … 1887 1905 } 1888 1906 else if(lstrcmpi(temporary,"HANDLE")==0&&i3==1){ 1889 projectInfo.windowInfos.back()->SetHandleName( temp2 );1907 //無視 1890 1908 } 1891 1909 else if(lstrcmpi(temporary,"POINT")==0&&i3==1){ … … 1977 1995 } 1978 1996 } 1979 else if(lstrcmpi(temporary,"CALLBACK")==0&&i3==1) {1980 projectInfo.windowInfos.back()->CallBackName=(char *)HeapAlloc(hHeap,0,i2+1);1981 lstrcpy(projectInfo.windowInfos.back()->CallBackName,temp2);1997 else if(lstrcmpi(temporary,"CALLBACK")==0&&i3==1) 1998 { 1999 // 無視 1982 2000 } 1983 2001 1984 2002 //以前のバージョンとの互換用 1985 else if(lstrcmpi(temporary,"DLGTMP")==0&&i3==1) projectInfo.windowInfos.back()-> type=GetValue(temp2);1986 1987 else if(lstrcmpi(temporary,"TYPE")==0&&i3==1) projectInfo.windowInfos.back()-> type=GetValue(temp2);1988 else if(lstrcmpi(temporary,"FILEPATH")==0&&i3==1) {1989 projectInfo.windowInfos.back()->filepath=(char *)HeapAlloc(hHeap,0,i2+1);1990 lstrcpy(projectInfo.windowInfos.back()->filepath,temp2);2003 else if(lstrcmpi(temporary,"DLGTMP")==0&&i3==1) projectInfo.windowInfos.back()->SetType( (ActiveBasic::PM::WindowType::EnumType)GetValue(temp2) ); 2004 2005 else if(lstrcmpi(temporary,"TYPE")==0&&i3==1) projectInfo.windowInfos.back()->SetType( (ActiveBasic::PM::WindowType::EnumType)GetValue(temp2) ); 2006 else if(lstrcmpi(temporary,"FILEPATH")==0&&i3==1) 2007 { 2008 // 無視 1991 2009 } 1992 2010 else if(lstrcmpi(temporary,"ITEM")==0&&i3==1){ … … 2082 2100 struct NEW_WINDOW{ 2083 2101 char name[MAX_PATH]; 2084 char HandleName[MAX_PATH]; 2085 char CallBackName[MAX_PATH]; 2086 BOOL type; 2102 ActiveBasic::PM::WindowType::EnumType type; 2087 2103 }; 2088 2104 NEW_WINDOW NewWindow; … … 2092 2108 case WM_INITDIALOG: 2093 2109 SetPosCenter(hwnd); 2094 SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_SETCHECK,BST_CHECKED,0);2095 SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);2096 2110 SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_SETCHECK,BST_CHECKED,0); 2097 2111 break; … … 2100 2114 case IDOK: 2101 2115 GetDlgItemText(hwnd,IDC_WINDOWNAME,NewWindow.name,MAX_PATH); 2102 GetDlgItemText(hwnd,IDC_WINDOWHANDLE,NewWindow.HandleName,MAX_PATH);2103 GetDlgItemText(hwnd,IDC_WINDOWPROC,NewWindow.CallBackName,MAX_PATH);2104 2116 if(SendDlgItemMessage(hwnd,IDC_DEFWINDOW,BM_GETCHECK,0,0)) 2105 NewWindow.type=WNDTYPE_DEFAULT; 2117 { 2118 NewWindow.type = ActiveBasic::PM::WindowType::Default; 2119 } 2106 2120 else if(SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_GETCHECK,0,0)) 2107 NewWindow.type=WNDTYPE_MODALDLG; 2121 { 2122 NewWindow.type = ActiveBasic::PM::WindowType::ModalDlg; 2123 } 2108 2124 else if(SendDlgItemMessage(hwnd,IDC_MODELESSDLG,BM_GETCHECK,0,0)) 2109 NewWindow.type=WNDTYPE_MODELESSDLG; 2125 { 2126 NewWindow.type = ActiveBasic::PM::WindowType::ModelessDlg; 2127 } 2110 2128 EndDialog(hwnd,1); 2111 2129 return 1; … … 2114 2132 return 1; 2115 2133 case IDC_WINDOWNAME: 2116 if(HIWORD(wParam)==EN_CHANGE) SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0); 2117 return 1; 2118 case IDC_AUTOSET: 2119 if(SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_GETCHECK,0,0)){ 2120 SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,1,0); 2121 SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,1,0); 2134 if(HIWORD(wParam)==EN_CHANGE) 2135 { 2122 2136 GetDlgItemText(hwnd,IDC_WINDOWNAME,temporary,MAX_PATH); 2123 2137 if(temporary[0]){ … … 2131 2145 SetDlgItemText(hwnd,IDC_WINDOWPROC,""); 2132 2146 } 2133 }2134 else{2135 SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,0,0);2136 SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,0,0);2137 2147 } 2138 2148 return 1; … … 2160 2170 void Project_Window_Insert(void){ 2161 2171 extern HANDLE hHeap; 2162 char temporary[MAX_PATH],temp2[1024] ,*pTemp;2172 char temporary[MAX_PATH],temp2[1024]; 2163 2173 2164 2174 if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROJECT_NEWWINDOW),hOwner,(DLGPROC)DlgProject_NewWindow)) return; … … 2179 2189 return; 2180 2190 } 2181 if(lstrcmpi(NewWindow.HandleName,pWindowInfo->GetHandleName().c_str())==0){2182 //"\"%s\" ハンドルは既にプロジェクト内に存在します。"2183 sprintf(temporary,STRING_DUPLICATIONERROR_HANDLE_IN_PROJECT,pWindowInfo->GetHandleName().c_str());2184 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);2185 return;2186 }2187 if(lstrcmpi(NewWindow.CallBackName,pWindowInfo->CallBackName)==0){2188 //"\"%s\" プロシージャは既にプロジェクト内に存在します。"2189 sprintf(temporary,STRING_DUPLICATIONERROR_PROC_IN_PROJECT,pWindowInfo->CallBackName);2190 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);2191 return;2192 }2193 2191 } 2194 2192 … … 2202 2200 //ウィンドウ名 2203 2201 projectInfo.windowInfos.back()->SetName( NewWindow.name ); 2204 2205 //ハンドル名2206 projectInfo.windowInfos.back()->SetHandleName( NewWindow.HandleName );2207 2202 2208 2203 //位置情報 … … 2217 2212 //スタイル 2218 2213 switch(NewWindow.type){ 2219 case WNDTYPE_DEFAULT:2214 case ActiveBasic::PM::WindowType::Default: 2220 2215 //通常ウィンドウ 2221 2216 projectInfo.windowInfos.back()->SetStyle( WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX ); 2222 2217 break; 2223 case WNDTYPE_MODALDLG:2224 case WNDTYPE_MODELESSDLG:2218 case ActiveBasic::PM::WindowType::ModalDlg: 2219 case ActiveBasic::PM::WindowType::ModelessDlg: 2225 2220 //ダイアログ テンプレート(最大化、最小化ボタンをなくして、細枠にする) 2226 2221 projectInfo.windowInfos.back()->SetStyle( WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU ); … … 2247 2242 projectInfo.windowInfos.back()->SetClassName( temporary ); 2248 2243 2249 //コールバック関数名2250 projectInfo.windowInfos.back()->CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.CallBackName)+1);2251 lstrcpy(projectInfo.windowInfos.back()->CallBackName,NewWindow.CallBackName);2252 2253 2244 //タイプ識別 2254 projectInfo.windowInfos.back()->type=NewWindow.type; 2255 2256 2257 //メッセージ処理ファイル名 2258 sprintf(temporary,"%s.ab",projectInfo.windowInfos.back()->GetName().c_str()); 2259 projectInfo.windowInfos.back()->filepath=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1); 2260 lstrcpy(projectInfo.windowInfos.back()->filepath,temporary); 2245 projectInfo.windowInfos.back()->SetType( NewWindow.type ); 2246 2261 2247 2262 2248 … … 2265 2251 ////////////////////////// 2266 2252 2267 //テンプレートを読み込む 2268 const std::string newWindowTemplateSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\new_window_template.sbp"; 2269 pTemp = ReadBuffer( newWindowTemplateSbpPath ); 2270 2271 //#name#をプロジェクト名に置換 2272 pTemp=PermutationWndPgmTemplate(pTemp, 2273 projectInfo.GetName().c_str(), 2274 NewWindow.name, 2275 NewWindow.HandleName, 2276 NewWindow.CallBackName); 2253 // テンプレートを使ってMainWnd.abを生成する 2254 const std::string resultStr = PermutationWndPgmTemplate( 2255 ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\new_window_template.sbp", 2256 projectInfo.GetName(), 2257 (std::string)NewWindow.name, 2258 (std::string)"h" + NewWindow.name, 2259 (std::string)NewWindow.name + "Proc" 2260 ); 2277 2261 2278 2262 sprintf(temporary,"%s%s.ab",projectInfo.GetWorkDir().GetPath().c_str(),projectInfo.windowInfos.back()->GetName().c_str()); 2279 2263 2280 2264 //書き込み 2281 WriteBuffer(temporary, pTemp,lstrlen(pTemp));2265 WriteBuffer(temporary,resultStr.c_str(),resultStr.size()); 2282 2266 Project_File_Insert(temporary); 2283 2267 2284 HeapDefaultFree(pTemp);2285 2268 2286 2269 … … 2309 2292 void Project_Window_Delete(int WndInfoNum){ 2310 2293 extern HANDLE hHeap; 2311 extern MDIINFO MdiInfo[MAX_WNDNUM];2312 2294 int i; 2313 2295 … … 2315 2297 2316 2298 //ウィンドウが開かれている場合は閉じる 2317 for(i=0;i<M AX_WNDNUM;i++){2318 if(MdiInfo[i].hwnd&&lstrcmpi(pWindowInfo->GetName().c_str(),MdiInfo[i].path )==0){2299 for(i=0;i<MdiInfo.size();i++){ 2300 if(MdiInfo[i].hwnd&&lstrcmpi(pWindowInfo->GetName().c_str(),MdiInfo[i].path.c_str())==0){ 2319 2301 SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0); 2320 2302 break; 2321 2303 } 2322 2304 } 2323 2324 //ウィンドウ情報のメモリを解放2325 HeapDefaultFree(pWindowInfo->filepath);2326 HeapDefaultFree(pWindowInfo->CallBackName);2327 2305 2328 2306 //子ウィンドウのメモリを解放
Note: See TracChangeset
for help on using the changeset viewer.