SetDrdataDlg.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:16k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // SetDrdataDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SetDrdataDlg.h"
  5. #include <io.h>
  6. #include "..Dialogs.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSetDrdataDlg dialog
  14. #define SETDR_COLUMN_COUNT 5
  15. static CString FormatDate( CSPTime &tm )
  16. {
  17. return (LPCTSTR)tm.Format( "%Y/%m/%d" );
  18. }
  19. static CString FormatDate( DWORD date )
  20. {
  21. CSPTime sptime;
  22. if( sptime.FromStockTimeDay( date ) )
  23. {
  24. return (LPCTSTR)sptime.Format( "%Y/%m/%d" );
  25. }
  26. return "----/--/--";
  27. }
  28. static BOOL ParseDate( CString strDate, DWORD * pDate )
  29. {
  30. CSPTime tm;
  31. char sepDate = '/';
  32. strDate.TrimLeft();
  33. strDate.TrimRight();
  34. if( strDate.IsEmpty() )
  35. return FALSE;
  36. int nYear = 1971, nMonth = 1, nDay = 1;
  37. int nHour = 0, nMinute= 0, nSecond = 0;
  38. CString strTemp;
  39. int nIndex;
  40. // year
  41. nIndex = strDate.Find( sepDate );
  42. if( -1 != nIndex )
  43. {
  44. strTemp = strDate.Left(nIndex);
  45. strDate = strDate.Mid(nIndex+1);
  46. nYear = atol(strTemp);
  47. }
  48. else
  49. {
  50. nYear = atol(strDate);
  51. tm = CSPTime( nYear, nMonth, nDay, nHour, nMinute, nSecond );
  52. if( pDate ) *pDate = tm.GetYear()*10000 + tm.GetMonth() * 100 + tm.GetDay();
  53. return (-1 != tm.GetTime());
  54. }
  55. // month
  56. nIndex = strDate.Find( sepDate );
  57. if( -1 != nIndex )
  58. {
  59. strTemp = strDate.Left(nIndex);
  60. strDate = strDate.Mid(nIndex+1);
  61. nMonth = atol(strTemp);
  62. }
  63. else
  64. {
  65. nMonth = atol(strDate);
  66. tm = CSPTime( nYear, nMonth, nDay, nHour, nMinute, nSecond );
  67. if( pDate ) *pDate = tm.GetYear()*10000 + tm.GetMonth() * 100 + tm.GetDay();
  68. return (-1 != tm.GetTime());
  69. }
  70. // day
  71. nDay = atol(strDate);
  72. if( 0 == nYear || 0 == nMonth || 0 == nDay )
  73. return FALSE;
  74. tm = CSPTime( nYear, nMonth, nDay, nHour, nMinute, nSecond );
  75. if( -1 == tm.GetTime() )
  76. return FALSE;
  77. if( pDate ) *pDate = tm.GetYear()*10000 + tm.GetMonth() * 100 + tm.GetDay();
  78. return TRUE;
  79. }
  80. IMPLEMENT_DYNCREATE(CSetDrdataDlg, CPropertyPageEx)
  81. CSetDrdataDlg::CSetDrdataDlg( )
  82. : CPropertyPageEx(CSetDrdataDlg::IDD)
  83. {
  84. //{{AFX_DATA_INIT(CSetDrdataDlg)
  85. m_tmDrdata = 0;
  86. //}}AFX_DATA_INIT
  87. m_tmDrdata = CSPTime::GetCurrentTime();
  88. }
  89. BOOL CSetDrdataDlg::InitializeGrid( )
  90. {
  91. m_Grid.SetEditable(TRUE);
  92. m_Grid.SetListMode(TRUE);
  93. m_Grid.SetHeaderSort(FALSE);
  94. m_Grid.SetSingleRowSelection(TRUE);
  95. m_Grid.EnableDragAndDrop(TRUE);
  96. m_Grid.SetGridLines(GVL_BOTH);
  97. m_Grid.EnableTitleTips( TRUE );
  98. m_Grid.SetRowResize( FALSE );
  99. m_Grid.SetColumnResize( TRUE );
  100. m_Grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));
  101. TRY {
  102. m_Grid.SetRowCount(1);
  103. m_Grid.SetColumnCount(SETDR_COLUMN_COUNT);
  104. m_Grid.SetFixedRowCount(1);
  105. m_Grid.SetFixedColumnCount(1);
  106. }
  107. CATCH (CMemoryException, e)
  108. {
  109. e->ReportError();
  110. e->Delete();
  111. return FALSE;
  112. }
  113. END_CATCH
  114. CRect rectGrid;
  115. m_Grid.GetClientRect( &rectGrid );
  116. int nWidth = rectGrid.Width() / m_Grid.GetColumnCount() - 1;
  117. m_Grid.SetColumnWidth( 0, nWidth + 10 );
  118. m_Grid.SetColumnWidth( 1, nWidth - 2 );
  119. m_Grid.SetColumnWidth( 2, nWidth - 2 );
  120. m_Grid.SetColumnWidth( 3, nWidth - 2 );
  121. m_Grid.SetColumnWidth( 4, nWidth - 2 );
  122. // Set Column Header
  123. UINT idsHeader[SETDR_COLUMN_COUNT] = {IDS_SETDRDATA_DATE, IDS_SETDRDATA_BONUS,
  124. IDS_SETDRDATA_BONUSSHARE, IDS_SETDRDATA_RATIONSHARE,
  125. IDS_SETDRDATA_RATIONVALUE };
  126. for( int nCol=0; nCol<SETDR_COLUMN_COUNT; nCol++ )
  127. {
  128. GV_ITEM item;
  129. item.mask = GVIF_TEXT|GVIF_FORMAT;
  130. item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE;
  131. item.row = 0;
  132. item.col = nCol;
  133. item.szText.LoadString( idsHeader[nCol] );
  134. m_Grid.SetItem(&item);
  135. }
  136. return TRUE;
  137. }
  138. void CSetDrdataDlg::LoadDrdata( CString strStockCode )
  139. {
  140. m_Grid.DeleteNonFixedRows();
  141. if( strStockCode.GetLength() <= 0 )
  142. return;
  143. CStock stock;
  144. stock.SetStockCode( CStock::marketUnknown, strStockCode );
  145. stock.SetDatabase( &AfxGetDB() );
  146. stock.PrepareData( CStock::dataDR, CKData::ktypeDay );
  147. CDRData  & drdata = stock.GetDRData();
  148. for( int i=0; i<drdata.GetSize(); i++ )
  149. {
  150. DRDATA dr = drdata.ElementAt(i);
  151. CStringArray astr;
  152. astr.SetSize( SETDR_COLUMN_COUNT );
  153. astr.ElementAt(0) = FormatDate( dr.m_date );
  154. astr.ElementAt(1).Format( "%g", dr.m_fProfit * 10 );
  155. astr.ElementAt(2).Format( "%g", dr.m_fGive * 10 );
  156. astr.ElementAt(3).Format( "%g", dr.m_fPei * 10 );
  157. astr.ElementAt(4).Format( "%g", dr.m_fPeiPrice );
  158. int nRow = m_Grid.InsertRow( astr[0] );
  159. for( int nCol=0; nCol<SETDR_COLUMN_COUNT; nCol++ )
  160. {
  161. GV_ITEM item;
  162. item.mask = GVIF_TEXT|GVIF_FORMAT;
  163. item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE;
  164. item.row = nRow;
  165. item.col = nCol;
  166. item.szText = astr[nCol];
  167. m_Grid.SetItem(&item);
  168. }
  169. }
  170. m_Grid.Invalidate();
  171. }
  172. void CSetDrdataDlg::StoreDrdata( CString strStockCode )
  173. {
  174. if( strStockCode.GetLength() <= 0 )
  175. return;
  176. // Save
  177. CStock stock;
  178. stock.SetStockCode( CStock::marketUnknown, strStockCode );
  179. stock.SetDatabase( &AfxGetDB() );
  180. CDRData  & drdata = stock.GetDRData();
  181. drdata.RemoveAll();
  182. for( int k=1; k<m_Grid.GetRowCount(); k++ )
  183. {
  184. DRDATA dr;
  185. memset( &dr, 0, sizeof(dr) );
  186. CString string = m_Grid.GetItemText( k, 0 );
  187. if( ParseDate( string, &(dr.m_date) ) )
  188. {
  189. dr.m_dwMarket = CStock::marketUnknown;
  190. strncpy( dr.m_szCode, strStockCode, min(sizeof(dr.m_szCode)-1,strStockCode.GetLength()) );
  191. CSPTime sptime;
  192. if( sptime.FromStockTimeDay(dr.m_date) )
  193. dr.m_time = sptime.GetTime();
  194. dr.m_fProfit = (float)( atof( m_Grid.GetItemText(k,1) ) * 0.1 );
  195. dr.m_fGive = (float)( atof( m_Grid.GetItemText(k,2) ) * 0.1 );
  196. dr.m_fPei = (float)( atof( m_Grid.GetItemText(k,3) ) * 0.1 );
  197. dr.m_fPeiPrice = (float)( atof( m_Grid.GetItemText(k,4) ) );
  198. drdata.InsertDRDataSort( dr );
  199. }
  200. }
  201. stock.StoreDRData( );
  202. }
  203. void CSetDrdataDlg::DoDataExchange(CDataExchange* pDX)
  204. {
  205. CPropertyPageEx::DoDataExchange(pDX);
  206. //{{AFX_DATA_MAP(CSetDrdataDlg)
  207. DDX_Control(pDX, IDC_IMPORTFXJ, m_btnImportFxj);
  208. DDX_Control(pDX, IDC_IMPORT, m_btnImport);
  209. DDX_Control(pDX, IDC_DELETE, m_btnDelete);
  210. DDX_Control(pDX, IDC_INSERT, m_btnInsert);
  211. DDX_Control(pDX, IDC_STATICSTOCK, m_staticStock);
  212. DDX_Control(pDX, IDC_LIST_STOCKSRC, m_listStockSrc);
  213. DDX_Control(pDX, IDC_COMBO_GROUPSRC, m_comboGroupSrc);
  214. DDX_Control(pDX, IDC_EDITCODE, m_editCode);
  215. DDX_DateTimeCtrl(pDX, IDC_TIME_DRDATA, m_tmDrdata);
  216. //}}AFX_DATA_MAP
  217. DDX_GridControl(pDX, IDC_GRID, m_Grid);
  218. }
  219. BEGIN_MESSAGE_MAP(CSetDrdataDlg, CPropertyPageEx)
  220. //{{AFX_MSG_MAP(CSetDrdataDlg)
  221. ON_EN_CHANGE(IDC_EDITCODE, OnChangeEditcode)
  222. ON_CBN_SELCHANGE(IDC_COMBO_GROUPSRC, OnSelchangeComboGroupsrc)
  223. ON_LBN_SELCHANGE(IDC_LIST_STOCKSRC, OnSelchangeListStocksrc)
  224. ON_BN_CLICKED(IDC_INSERT, OnInsert)
  225. ON_BN_CLICKED(IDC_DELETE, OnDelete)
  226. ON_BN_CLICKED(IDC_IMPORT, OnImport)
  227. ON_BN_CLICKED(IDC_IMPORTFXJ, OnImportfxj)
  228. //}}AFX_MSG_MAP
  229. END_MESSAGE_MAP()
  230. /////////////////////////////////////////////////////////////////////////////
  231. // CSetDrdataDlg message handlers
  232. BOOL CSetDrdataDlg::OnInitDialog()
  233. {
  234. CPropertyPageEx::OnInitDialog();
  235. CWaitCursor waitcursor;
  236. // TODO: Add extra initialization here
  237. CDomainContainer & groups = AfxGetGroupContainer( );
  238. CDomainContainer & domains = AfxGetDomainContainer( );
  239. CStockContainer & container = AfxGetStockContainer();
  240. // Src
  241. m_comboGroupSrc.InitStrings( TRUE, TRUE, groups );
  242. m_comboGroupSrc.SetCurSel( 0 );
  243. OnSelchangeComboGroupsrc();
  244. // Grid DrData
  245. InitializeGrid( );
  246. OnSelchangeListStocksrc();
  247. return TRUE;  // return TRUE unless you set the focus to a control
  248.               // EXCEPTION: OCX Property Pages should return FALSE
  249. }
  250. BOOL CSetDrdataDlg::OnKillActive() 
  251. {
  252. StoreDrdata( m_strCurStockCode );
  253. AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
  254. return CPropertyPageEx::OnKillActive();
  255. }
  256. void CSetDrdataDlg::OnOK() 
  257. {
  258. StoreDrdata( m_strCurStockCode );
  259. AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
  260. CPropertyPageEx::OnOK();
  261. }
  262. void CSetDrdataDlg::OnCancel() 
  263. {
  264. StoreDrdata( m_strCurStockCode );
  265. AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
  266. CPropertyPageEx::OnOK();
  267. }
  268. void CSetDrdataDlg::OnChangeEditcode() 
  269. {
  270. // TODO: If this is a RICHEDIT control, the control will not
  271. // send this notification unless you override the CPropertyPageEx::OnInitDialog()
  272. // function and call CRichEditCtrl().SetEventMask()
  273. // with the ENM_CHANGE flag ORed into the mask.
  274. // TODO: Add your control notification handler code here
  275. CString strText;
  276. m_editCode.GetWindowText( strText );
  277. strText.TrimLeft();
  278. strText.TrimLeft();
  279. if( strText.GetLength() > 0 )
  280. {
  281. int nSel = m_comboGroupSrc.GetCurSel();
  282. if( CB_ERR == nSel ||
  283. CStockContainer::typeAll != (int)(m_comboGroupSrc.GetItemData( nSel )) )
  284. {
  285. m_comboGroupSrc.SelectGroupAll( );
  286. OnSelchangeComboGroupsrc();
  287. }
  288. }
  289. if( !m_listStockSrc.SelectCode( 0, strText ) )
  290. m_listStockSrc.SelectShortname( 0, strText );
  291. OnSelchangeListStocksrc( );
  292. }
  293. void CSetDrdataDlg::OnSelchangeComboGroupsrc() 
  294. {
  295. // TODO: Add your control notification handler code here
  296. int nType = m_comboGroupSrc.GetCurSelType();
  297. CString strName = m_comboGroupSrc.GetCurSelName();
  298. m_listStockSrc.SetCurrentStocks( nType, strName, AfxGetGroupContainer() );
  299. }
  300. BOOL CSetDrdataDlg::PreTranslateMessage(MSG* pMsg) 
  301. {
  302. // TODO: Add your specialized code here and/or call the base class
  303. if( WM_KEYDOWN == pMsg->message )
  304. {
  305. if( VK_UP == pMsg->wParam )
  306. {
  307. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  308. {
  309. m_listStockSrc.SelectUp( );
  310. OnSelchangeListStocksrc( );
  311. return TRUE;
  312. }
  313. }
  314. else if( VK_DOWN == pMsg->wParam )
  315. {
  316. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  317. {
  318. m_listStockSrc.SelectDown( );
  319. OnSelchangeListStocksrc( );
  320. return TRUE;
  321. }
  322. }
  323. else if( VK_PRIOR == pMsg->wParam )
  324. {
  325. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  326. {
  327. m_listStockSrc.SelectPrior( );
  328. OnSelchangeListStocksrc( );
  329. return TRUE;
  330. }
  331. }
  332. else if( VK_NEXT == pMsg->wParam )
  333. {
  334. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  335. {
  336. m_listStockSrc.SelectNext( );
  337. OnSelchangeListStocksrc( );
  338. return TRUE;
  339. }
  340. }
  341. else if( VK_RETURN == pMsg->wParam )
  342. {
  343. if( ::GetFocus() == m_editCode.GetSafeHwnd() )
  344. {
  345. m_editCode.SetWindowText( NULL );
  346. return TRUE;
  347. }
  348. }
  349. }
  350. return CPropertyPageEx::PreTranslateMessage(pMsg);
  351. }
  352. void CSetDrdataDlg::OnSelchangeListStocksrc() 
  353. {
  354. // TODO: Add your control notification handler code here
  355. HWND hWndFocus = ::GetFocus( );
  356. int nSel = m_listStockSrc.GetCurSel( );
  357. StoreDrdata( m_strCurStockCode );
  358. if( LB_ERR != nSel )
  359. {
  360. CString rString, strStockCode;
  361. m_listStockSrc.GetText(nSel,rString);
  362. int nIndex = rString.Find( '(' );
  363. if( -1 != nIndex )
  364. strStockCode = rString.Left( nIndex );
  365. m_staticStock.SetWindowText( rString );
  366. m_strCurStockCode = strStockCode;
  367. LoadDrdata( m_strCurStockCode );
  368. }
  369. else
  370. {
  371. m_Grid.DeleteNonFixedRows();
  372. m_Grid.Invalidate( );
  373. CString strNoStock;
  374. strNoStock.LoadString( IDS_SETDRDATA_NOSTOCK );
  375. m_staticStock.SetWindowText( strNoStock );
  376. m_strCurStockCode.Empty();
  377. }
  378. m_btnInsert.EnableWindow( m_strCurStockCode.GetLength() > 0 );
  379. m_btnDelete.EnableWindow( m_strCurStockCode.GetLength() > 0 );
  380. ::SetFocus( hWndFocus );
  381. }
  382. void CSetDrdataDlg::OnInsert() 
  383. {
  384. // TODO: Add your control notification handler code here
  385. UpdateData( );
  386. CString strNewDate = FormatDate( m_tmDrdata );
  387. if( m_strCurStockCode.GetLength() > 0 )
  388. {
  389. CStringArray astr;
  390. astr.SetSize( SETDR_COLUMN_COUNT );
  391. astr.ElementAt(0) = strNewDate;
  392. astr.ElementAt(1).Format( "%.3f", 0. );
  393. astr.ElementAt(2).Format( "%.2f", 0. );
  394. astr.ElementAt(3).Format( "%.2f", 0. );
  395. astr.ElementAt(4).Format( "%.3f", 0. );
  396. int nRow = m_Grid.InsertRow( strNewDate );
  397. for( int nCol=1; nCol<SETDR_COLUMN_COUNT; nCol++ )
  398. {
  399. GV_ITEM item;
  400. item.mask = GVIF_TEXT|GVIF_FORMAT;
  401. item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE;
  402. item.row = nRow;
  403. item.col = nCol;
  404. item.szText = astr[nCol];
  405. m_Grid.SetItem(&item);
  406. }
  407. }
  408. m_Grid.Invalidate( );
  409. }
  410. void CSetDrdataDlg::OnDelete() 
  411. {
  412. // TODO: Add your control notification handler code here
  413. for( int nRow=m_Grid.GetRowCount()-1; nRow >=1; nRow -- )
  414. {
  415. for( int nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ )
  416. {
  417. if( m_Grid.GetItemState(nRow,nCol) & GVIS_SELECTED )
  418. {
  419. m_Grid.DeleteRow( nRow );
  420. int nRowNext = -1;
  421. if( nRow < m_Grid.GetRowCount() )
  422. nRowNext = nRow;
  423. else if( nRow-1 >= 1 && nRow-1 < m_Grid.GetRowCount() )
  424. nRowNext = nRow -1;
  425. if( nRowNext != -1 )
  426. {
  427. for( int nColTemp=0; nColTemp<m_Grid.GetColumnCount(); nColTemp ++ )
  428. m_Grid.SetItemState(nRowNext,nColTemp,m_Grid.GetItemState(nRowNext,nColTemp) | GVIS_SELECTED);
  429. }
  430. m_Grid.Invalidate( );
  431. return;
  432. }
  433. }
  434. }
  435. }
  436. BOOL CALLBACK ImportDRCallback(DWORD dwCode, DWORD dwProgress,
  437. LPCTSTR lpszMsg, void *cookie)
  438. {
  439. HWND hMainWnd = (HWND)cookie;
  440. if( PROG_PROGRESS == dwCode && ::IsWindow(hMainWnd) )
  441. {
  442. ::SendMessage( hMainWnd, WM_USER_WAITPROGRESS, dwProgress, (LPARAM)lpszMsg );
  443. }
  444. return TRUE;
  445. }
  446. void CSetDrdataDlg::OnImport() 
  447. {
  448. CNetDatabase netdb;
  449. if( !netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) )
  450. {
  451. AfxMessageBox( IDS_ROOTPATH_ERROR, MB_OK | MB_ICONINFORMATION );
  452. return;
  453. }
  454. CFileDialog dlg (TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING,
  455. "XDR Data files (*.zip,*.dat)|*.zip;*.dat|All files (*.*)|*.*||", NULL);
  456. if( IDOK == dlg.DoModal() )
  457. {
  458. CString sFileName = dlg.GetPathName();
  459. if( sFileName.GetLength() <= 0 || 0 != access(sFileName,0) )
  460. {
  461. AfxMessageBox( IDS_SETDRDATA_FILENOTEXISTS, MB_OK|MB_ICONINFORMATION );
  462. return;
  463. }
  464. CWaitDlg waitdlg( NULL, FALSE );
  465. waitdlg.SetProgressRange( 0, STKLIB_MAX_PROGRESS );
  466. CPackage pac;
  467. pac.m_nType = CPackage::packageDR;
  468. pac.m_bIsZipped = ( sFileName.GetLength() > 4 && 0 == sFileName.Right(4).CompareNoCase(".zip") );
  469. pac.m_strDescript = sFileName;
  470. if( netdb.InstallPackageEx( pac, sFileName, ImportDRCallback, waitdlg.GetSafeHwnd() ) )
  471. AfxMessageBox( IDS_SETDRDATA_INSTALLOK, MB_OK|MB_ICONINFORMATION );
  472. else
  473. AfxMessageBox( IDS_SETDRDATA_INSTALLFAIL, MB_OK|MB_ICONINFORMATION );
  474. AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
  475. }
  476. }
  477. void CSetDrdataDlg::OnImportfxj() 
  478. {
  479. CNetDatabase netdb;
  480. if( !netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) )
  481. {
  482. AfxMessageBox( IDS_ROOTPATH_ERROR, MB_OK | MB_ICONINFORMATION );
  483. return;
  484. }
  485. CFileDialog dlg (TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING,
  486. "Fxj Power files (*.zip,*.pwr)|*.zip;*.pwr|All files (*.*)|*.*||", NULL);
  487. if( IDOK == dlg.DoModal() )
  488. {
  489. CString sFileName = dlg.GetPathName();
  490. if( sFileName.GetLength() <= 0 || 0 != access(sFileName,0) )
  491. {
  492. AfxMessageBox( IDS_SETDRDATA_FILENOTEXISTS, MB_OK|MB_ICONINFORMATION );
  493. return;
  494. }
  495. CPackage pac;
  496. pac.m_nType = CPackage::packageDR;
  497. pac.m_bIsZipped = ( sFileName.GetLength() > 4 && 0 == sFileName.Right(4).CompareNoCase(".zip") );
  498. pac.m_strDescript = sFileName;
  499. if( netdb.InstallPackageEx( pac, sFileName, NULL, NULL ) )
  500. AfxMessageBox( IDS_SETDRDATA_INSTALLOK, MB_OK|MB_ICONINFORMATION );
  501. else
  502. AfxMessageBox( IDS_SETDRDATA_INSTALLFAIL, MB_OK|MB_ICONINFORMATION );
  503. AfxGetStaticDoc()->UpdateAllViews( NULL, UPDATE_HINT_GRAPHVIEW, NULL );
  504. }
  505. }