수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694365
  • Today | 110
  • Yesterday | 606

Programming/MFC2007/04/03 17:44

MSFlexGrid Example For VS2005

Query
QueryDlg.cpp
#include "stdafx.h"
#include "QueryDlg.h"

// Type information for the event handler
_ATL_FUNC_INFO OnCurrentViewChangedInfo = {CC_STDCALL, VT_I4, 1, {VT_DISPATCH}};

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg - Event handlers

HRESULT __stdcall CQueryDlg::OnCurrentViewChanged(IDispatch* pNewCurrentView)
{
   bool bEnabled;

   // Set the current tool
   esriARViewType arViewType;
   m_ipARControl->get_CurrentViewType(&arViewType);
   if(esriARToolNoneSelected != arViewType)
   bEnabled = false;
   else
   {
   bEnabled = true;
   // Update the current tool if necessary
   esriARTool arCurrentTool;
   m_ipARControl->get_CurrentARTool(&arCurrentTool);
   if(arCurrentTool != m_ARTool)
    m_ipARControl->put_CurrentARTool(m_ARTool);
   }

   m_btnZoomIn.Enable(bEnabled);
   m_btnZoomOut.Enable(bEnabled);
   m_btnPan.Enable(bEnabled);
   m_btnFullExtent.Enable(bEnabled);
   EnableButtons(true, bEnabled);

   return S_OK;
}

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg - Message handlers

LRESULT CQueryDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
   // Get the control interfaces
   GetDlgControl(IDC_AR, IID_IARControl, (void **) &m_ipARControl);
   GetDlgControl(IDC_MSFLEXGRID, IID_IMSFlexGrid, (void **) &m_ipFlexGrid);

   // Set the window icon
   SetIcon(::LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_ICON_APP)));

   // Setup the buttons
   m_btnBrowse.Load(GetDlgItem(IDC_BUTTON_LOADPMF), IDB_BITMAP_BROWSE, IDS_OPEN, true);
   m_btnZoomIn.Load(GetDlgItem(IDC_BUTTON_ZOOMIN), IDB_BITMAP_ZOOMIN, IDS_ZOOMIN, false);
   m_btnZoomOut.Load(GetDlgItem(IDC_BUTTON_ZOOMOUT), IDB_BITMAP_ZOOMOUT, IDS_ZOOMOUT, false);
   m_btnPan.Load(GetDlgItem(IDC_BUTTON_PAN), IDB_BITMAP_PAN, IDS_PAN, false);
   m_btnFullExtent.Load(GetDlgItem(IDC_BUTTON_FULLEXTENT), IDB_BITMAP_FULLEXTENT, IDS_FULLEXTENT, false);

   // Create the custom font
   LOGFONT lf;
   ::GetObject((HFONT)::SendMessage(m_hWnd, WM_GETFONT, 0, 0), sizeof(LOGFONT), &lf);
   CComBSTR strFont;
   strFont.LoadString(IDS_FONT);
   _tcscpy(lf.lfFaceName, strFont);
   m_customFont = ::CreateFontIndirect(&lf);

   // Get this for formatting the flexgrid
   TEXTMETRIC tm;
   ::GetTextMetrics(::GetDC(m_hWnd), &tm);
   m_MaxCharWidth = tm.tmMaxCharWidth;

   // Connect to the AR Control
   AtlAdviseSinkMap(this, true);

   return 0;
}

LRESULT CQueryDlg::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
   AtlAdviseSinkMap(this, false);
   ::DeleteObject(m_customFont);
   return 0;
}

LRESULT CQueryDlg::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   EndDialog(0);
   return 0;
}

LRESULT CQueryDlg::OnClickedLoadPMF(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   // Open a file dialog for selecting map documents
   MSComDlg::ICommonDialogPtr pCommonDialog;
   GetDlgControl(IDC_COMMONDIALOG, MSComDlg::IID_ICommonDialog, (void **) &pCommonDialog);
   pCommonDialog->ShowOpen();

   // Exit if no map document is selected
   CComBSTR bstrFileName;
   pCommonDialog->get_FileName(&bstrFileName);
   if(0 == _tcslen(bstrFileName)) return 0;

   // Load the specified pmf
   VARIANT_BOOL bIsOK;
   m_ipARControl->CheckDocument(bstrFileName, &bIsOK);
   if(VARIANT_TRUE == bIsOK)
       m_ipARControl->LoadDocument(bstrFileName, NULL);
   else
   {
       CComBSTR strCaption, strError;
       strCaption.LoadString(IDS_CAPTION);
       strError.LoadString(IDS_LOAD_ERROR);
       MessageBox(strError, strCaption, MB_OK);
       return 0;
   }

   // Determine whether permission to search layers and query field values
   m_ipARControl->HasDocumentPermission(esriARDocumentPermissionsQueryFeatures, &m_bQueryFeatures);
   m_ipARControl->HasDocumentPermission(esriARDocumentPermissionsQueryValues, &m_bQueryValues);

   EnableButtons();

   return 0;
}

LRESULT CQueryDlg::OnClickedZoomIn(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   m_ipARControl->put_CurrentARTool(esriARToolMapZoomIn);
   // Remember the current tool
   m_ARTool = esriARToolMapZoomIn;
   return 0;
}

LRESULT CQueryDlg::OnClickedZoomOut(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   m_ipARControl->put_CurrentARTool(esriARToolMapZoomOut);
   m_ARTool = esriARToolMapZoomOut;
   return 0;
}

LRESULT CQueryDlg::OnClickedPan(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   m_ipARControl->put_CurrentARTool(esriARToolMapPan);
   m_ARTool = esriARToolMapPan;
   return 0;
}

LRESULT CQueryDlg::OnClickedFullExtent(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   // Set extent to full data extent
   double xMin, yMin, xMax, yMax;
   IARPageLayoutPtr ipARPageLayout;
   m_ipARControl->get_ARPageLayout(&ipARPageLayout);
   IARMapPtr ipARFocusMap;
   ipARPageLayout->get_FocusARMap(&ipARFocusMap);
   ipARFocusMap->GetFullExtent(&xMin, &yMin, &xMax, &yMax);
   ipARFocusMap->SetExtent(xMin, yMin, xMax, yMax);
   // Refresh the display
   ipARFocusMap->Refresh(VARIANT_TRUE);
   return 0;
}

LRESULT CQueryDlg::OnClickedQuery(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   // Determine whether permission to search layers
   if(!m_bQueryFeatures)
   {
       CComBSTR strCaption, strError;
       strCaption.LoadString(IDS_CAPTION);
       strError.LoadString(IDS_PERMISSION_ERROR);
       MessageBox(strError, strCaption, MB_OK);
       return 0;
   }

   // Get IARQueryDef interface
   IARSearchDefPtr pSearchDef(CLSID_ArcReaderSearchDef);
   // Set the spatial searching to intersects
   pSearchDef->put_SpatialRelationship(esriARSpatialRelationshipIntersects);

   // Get the layer count
   IARPageLayoutPtr ipARPageLayout;
   m_ipARControl->get_ARPageLayout(&ipARPageLayout);
   IARMapPtr ipARFocusMap;
   ipARPageLayout->get_FocusARMap(&ipARFocusMap);
   long lLayerCnt;
   ipARFocusMap->get_ARLayerCount(&lLayerCnt);

   // Get the coordinates of the current extent
   double dXmin, dYmin, dXmax, dYmax;
   ipARFocusMap->GetExtent(&dXmin, &dYmin, &dXmax, &dYmax);
   // Set the envelope coordinates as the search shape
   pSearchDef->SetEnvelopeShape(dXmin, dYmin, dXmax, dYmax, 0);

   // Get IARFeatureSet interface
   ipARFocusMap->QueryARFeatures(pSearchDef, &m_ipFeatureSet);
   // Reset the featureset
   m_ipFeatureSet->Reset();
   // Get the IARFeature interface
   m_ipFeatureSet->Next(&m_ipFeature);
   // Display attribute values
   m_lRecord = 0;

   UpdateValueDisplay();
   EnableButtons(false);
   return 0;
}

LRESULT CQueryDlg::OnClickedNextFtr(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   // Get the next feature
   m_ipFeatureSet->get_ARFeature(++m_lRecord, &m_ipFeature);
   UpdateValueDisplay();
   return 0;
}

LRESULT CQueryDlg::OnClickedPreviousFtr(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   // Get the previous feature
   m_ipFeatureSet->get_ARFeature(--m_lRecord, &m_ipFeature);
   UpdateValueDisplay();
   return 0;
}

LRESULT CQueryDlg::OnClickedZoomTo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   return m_ipFeature->ZoomTo();
}

LRESULT CQueryDlg::OnClickedCenterAt(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   return m_ipFeature->CenterAt();
}

LRESULT CQueryDlg::OnClickedFlash(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   return m_ipFeature->Flash();
}

LRESULT CQueryDlg::OnClickedFlicker(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
   return m_ipFeature->Flicker();
}

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg - Custom Draw message handlers

// Draw the information text in blue
LRESULT CQueryDlg::OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
   if((HWND)lParam == GetDlgItem(IDC_STATIC_FTRCOUNT)) return 0;

   HDC hdc = (HDC)wParam;
   ::SetTextColor(hdc, ::GetSysColor(COLOR_HIGHLIGHT));
   ::SetBkMode(hdc, TRANSPARENT);
   ::SelectObject(hdc, m_customFont);
   return (LRESULT)::GetStockObject(HOLLOW_BRUSH);
}

// Draws the button in the appropriate mode
LRESULT CQueryDlg::OnDrawItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
   LPDRAWITEMSTRUCT drawItem = (LPDRAWITEMSTRUCT)lParam;

   if(GetDlgItem(IDC_BUTTON_LOADPMF) == drawItem->hwndItem)
       m_btnBrowse.Draw(drawItem);
   else if(GetDlgItem(IDC_BUTTON_ZOOMIN) == drawItem->hwndItem)
       m_btnZoomIn.Draw(drawItem);
   else if(GetDlgItem(IDC_BUTTON_ZOOMOUT) == drawItem->hwndItem)
       m_btnZoomOut.Draw(drawItem);
   else if(GetDlgItem(IDC_BUTTON_PAN) == drawItem->hwndItem)
       m_btnPan.Draw(drawItem);
   else if(GetDlgItem(IDC_BUTTON_FULLEXTENT) == drawItem->hwndItem)
       m_btnFullExtent.Draw(drawItem);

   return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CQueryDlg - Helpers

void CQueryDlg::UpdateValueDisplay()
{
   CComVariant varFieldValue;
   CComVariant varFieldName;
   CComBSTR sFieldValue;
   CComBSTR sFieldName;
   SIZE txtSize;
   long lValueWidth = 0;
   long lNameWidth = 0;
   HDC hDC = ::GetDC(m_hWnd);
   long lRow = 0;

   // A grid row for each field
   if(NULL == m_ipFeature)
   m_ipFlexGrid->put_Rows(0);
   else
   {
       long lFldCount;
       m_ipFeature->get_FieldCount(&lFldCount);
       m_ipFlexGrid->put_Rows(lFldCount);
   }

   // For each field that isn't the 'Shape' field
   long lRowCnt;
   m_ipFlexGrid->get_Rows(&lRowCnt);
   for(long i = 0; i < lRowCnt; i++)
   {
       esriARFieldType arFieldType;
       m_ipFeature->get_FieldType(i, &arFieldType);
       if(esriARFieldTypeGeometry != arFieldType &&
            esriARFieldTypeRaster != arFieldType &&
            esriARFieldTypeBlob != arFieldType)
       {
           // Display field names
           m_ipFlexGrid->put_Col(0);
           m_ipFlexGrid->put_Row(lRow);
           m_ipFeature->get_FieldAliasName(i, &sFieldName);
           m_ipFlexGrid->put_Text(sFieldName);
           ::GetTextExtentPoint32(hDC, sFieldName, sFieldName.Length(), &txtSize);
           txtSize.cx *= m_MaxCharWidth;
           if(txtSize.cx > lNameWidth)
               lNameWidth = txtSize.cx;

           // Display field values
           m_ipFlexGrid->put_Col(1);
           m_ipFlexGrid->put_Row(lRow);
           m_ipFlexGrid->put_CellAlignment(flexAlignLeftCenter);
           if(m_bQueryValues)
           {
               m_ipFeature->get_Value(CComVariant(i), &varFieldValue);
               if (varFieldValue.vt != VT_EMPTY)
               {
                   varFieldValue.ChangeType(VT_BSTR);
                   sFieldValue = varFieldValue.bstrVal;
               }
               else
                   sFieldValue = _T("<NULL>");
           }
           else
               sFieldValue.LoadString(IDS_NOPERMISSION);
           m_ipFlexGrid->put_Text(sFieldValue);
           ::GetTextExtentPoint32(hDC, sFieldValue, sFieldValue.Length(), &txtSize);
           txtSize.cx *= m_MaxCharWidth;
           if(txtSize.cx > lValueWidth)
               lValueWidth = txtSize.cx;
           lRow++;
       }
   }

   // Set column widths
   m_ipFlexGrid->put_ColWidth(0, lNameWidth);
   m_ipFlexGrid->put_ColWidth(1, lValueWidth);

   // Enabled/disable controls
   TCHAR tCaption[64];
   BOOL bEnabled;
   long lFtrCount;
   long lCurrFtr;
   m_ipFeatureSet->get_ARFeatureCount(&lFtrCount);
   if(0 == lFtrCount)
   {
       bEnabled = FALSE;
       ::EnableWindow(GetDlgItem(IDC_BUTTON_NEXTFTR), FALSE);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_PREVIOUSFTR), FALSE);
       lCurrFtr = m_lRecord;
   }
   else if(1 == lFtrCount)
   {
       bEnabled = TRUE;
       ::EnableWindow(GetDlgItem(IDC_BUTTON_NEXTFTR), FALSE);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_PREVIOUSFTR), FALSE);
       lCurrFtr = m_lRecord + 1;
   }
   else
   {
       bEnabled = TRUE;
       if(0 == m_lRecord)
           ::EnableWindow(GetDlgItem(IDC_BUTTON_PREVIOUSFTR), FALSE);
       else
           ::EnableWindow(GetDlgItem(IDC_BUTTON_PREVIOUSFTR), TRUE);
       if(lFtrCount == m_lRecord + 1)
           ::EnableWindow(GetDlgItem(IDC_BUTTON_NEXTFTR), FALSE);
       else
           ::EnableWindow(GetDlgItem(IDC_BUTTON_NEXTFTR), TRUE);
       lCurrFtr = m_lRecord + 1;
   }
   _stprintf(tCaption, _T("%ld of %ld\0"), lCurrFtr, lFtrCount);
   ::SetWindowText(GetDlgItem(IDC_STATIC_FTRCOUNT), tCaption);
   ::EnableWindow(GetDlgItem(IDC_BUTTON_ZOOMTO), bEnabled);
   ::EnableWindow(GetDlgItem(IDC_BUTTON_CENTERAT), bEnabled);
   ::EnableWindow(GetDlgItem(IDC_BUTTON_FLASH), bEnabled);
   ::EnableWindow(GetDlgItem(IDC_BUTTON_FLICKER), bEnabled);
}

void CQueryDlg::EnableButtons(bool bMapOnly, bool bEnabled)
{
   BOOL BEnabled = bEnabled ? TRUE : FALSE;

   if(bMapOnly)
   {
       m_btnZoomIn.Enable(bEnabled);
       m_btnZoomOut.Enable(bEnabled);
       m_btnPan.Enable(bEnabled);
       m_btnFullExtent.Enable(bEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_SPATIALQUERY), BEnabled);
   }
   else
   {
       ::EnableWindow(GetDlgItem(IDC_BUTTON_NEXTFTR), BEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_PREVIOUSFTR), BEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_ZOOMTO), BEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_CENTERAT), BEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_FLASH), BEnabled);
       ::EnableWindow(GetDlgItem(IDC_BUTTON_FLICKER), BEnabled);
   }
}

"MFC" 카테고리의 다른 글
  • installshield guide? (0)2007/04/05
  • GDI+ Anigif (0)2007/04/05
  • MSFlexGrid Example For VS2005 (0)2007/04/03
  • Using a System icon (SHGetFileInfo) (시스템 아... (0)2007/04/03
  • Using Drop-Down Buttons in a Toolbar Control (... (0)2007/04/03
2007/04/03 17:44 2007/04/03 17:44
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2778

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 471 472 473 474 475 476 477 478 479 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 노테르담
  • 콜 레퍼런스
  • 삼보
  • 배열과 포인터
  • 이수안
  • 관찰
  • 국지원
  • Cloaking
  • Windows Workflow Foundation
  • 포트스캐닝
  • NUMA
  • 아이콘
  • C++
  • Profiling
  • Naver
  • BDM
  • semantic
  • 한국정보과학회
  • 모나리자
  • 프로필

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.