// LocalView.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "ConsoleApp.h" #include "LocalView.h" #include "MainFrm.h" #include "RemoteView.h" #include "RemoteTreeCtrl.h" #include "RemoteListCtrl.h" //#include "Winuser.h" CString BYTE2KMBYTE(__int64 nBytes, int nFlag, bool bShowDecimalPoint); CString NumericFormat(__int64 nNumeric); CString GetErrorMessage(DWORD dwError); BOOL DeleteDirectory(CString sDirectory); // CLocalView IMPLEMENT_DYNCREATE(CLocalView, CView) CLocalView::CLocalView() { m_bDragSplitter = FALSE; m_cxSplitter = COptions::GetOptionVal(OPTION_LOCALTREESIZE); m_nTimer = 0; m_nSelectedCount = 0; m_nSelectedBytes = 0; m_nSelectedFiles = 0; m_nSelectedSecialObj = 0; m_nTotalCount = 0; m_nTotalBytes = 0; m_pnodeRoot = NULL; m_bUpdating = FALSE; m_bIgnoreEvent = FALSE; } CLocalView::~CLocalView() { COptions::SetOption(OPTION_LOCALTREESIZE, m_cxSplitter); } BEGIN_MESSAGE_MAP(CLocalView, CView) ON_WM_CREATE() ON_WM_SIZE() ON_WM_ERASEBKGND() ON_WM_TIMER() ON_BN_CLICKED(IDC_LOCAL_ADVERT, OnLocalAdvert) ON_BN_CLICKED(IDC_LOCAL_BTN_TOOLBAR, OnLocalBtnToolbar) ON_BN_CLICKED(IDC_LOCAL_BTN_UPLOAD, OnLocalBtnUpload) ON_BN_CLICKED(IDC_LOCAL_BTN_DOWNLOAD, OnLocalBtnDownload) ON_BN_CLICKED(IDC_LOCAL_BTN_NEWFOLDER, OnLocalBtnNewFolder) ON_BN_CLICKED(IDC_LOCAL_BTN_DELETE, OnLocalBtnDelete) ON_BN_CLICKED(IDC_LOCAL_TITLE, OnLocalTitle) // ON_BN_CLICKED(IDC_LOCAL_BTN_GO_ADDR, OnLocalBtnGoAddr) ON_BN_CLICKED(IDC_LOCAL_BTN_UP_ADDR, OnLocalBtnUpAddr) ON_BN_CLICKED(IDC_LOCAL_BTN_LISTSTYLE, OnLocalBtnListStyle) ON_COMMAND(ID_LIST_NEWFOLDER, OnListNewfolder) ON_COMMAND(ID_LIST_REFRESH, OnListRefresh) ON_COMMAND(ID_LIST_TYPE0, OnListType0) ON_COMMAND(ID_LIST_TYPE1, OnListType1) ON_COMMAND(ID_LIST_TYPE2, OnListType2) ON_COMMAND(ID_LIST_TYPE3, OnListType3) ON_COMMAND(ID_LIST_TYPE4, OnListType4) ON_COMMAND(ID_LIST_SORT1, OnListSort1) ON_COMMAND(ID_LIST_SORT2, OnListSort2) ON_COMMAND(ID_LIST_SORT3, OnListSort3) ON_COMMAND(ID_LIST_SORT4, OnListSort4) ON_COMMAND(ID_LIST_PASTE, OnListPaste) ON_COMMAND(ID_LIST_ALL, OnListAll) END_MESSAGE_MAP() // CLocalView Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CLocalView::AssertValid() const { CView::AssertValid(); } void CLocalView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG // CLocalView ±×¸®±â void CLocalView::OnDraw(CDC* pDC) { RECT rc, rcClient; CBrush br; GetClientRect(&rcClient); /////////////////////////////////////////////////////////////////////////////// // 3D À½¿µ CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf) return; int cyToolBar = pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : 0; // Àüü br.CreateSysColorBrush(COLOR_BTNFACE); rc = rcClient; pDC->FillRect(&rc, &br); br.DeleteObject(); // ÃÖ»ó´Ü br.CreateSysColorBrush(COLOR_BTNHIGHLIGHT); rc = rcClient; rc.top = cyToolBar; rc.bottom = cyToolBar + HIGHLIGHT_SIZE; pDC->FillRect(&rc, &br); // ¸ÇÁÂÃø rc = rcClient; rc.left = 0; rc.right = HIGHLIGHT_SIZE; pDC->FillRect(&rc, &br); br.DeleteObject(); // ¸Ç¿ìÃø br.CreateSysColorBrush(COLOR_BTNSHADOW); rc = rcClient; rc.left = rc.right - 1; pDC->FillRect(&rc, &br); br.DeleteObject(); RedrawFocus(); } // CLocalView ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. BOOL CLocalView::PreTranslateMessage(MSG* pMsg) { static int xOldSplitter = -77; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); int x, y; switch (pMsg->message) { case WM_MOUSEMOVE: x = LOWORD(pMsg->lParam); y = HIWORD(pMsg->lParam); if (m_bDragSplitter) { if (xOldSplitter != -77) InvertTracker(xOldSplitter); InvertTracker(xOldSplitter = x + 2); return TRUE; } else if (pMsg->hwnd == m_hWnd) { RECT rc; GetClientRect(&rc); rc.left = m_cxSplitter; rc.right = m_cxSplitter + SPLITTER_SIZE; rc.top = (pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : TOOLBAR_BTN_HEIGHT) + CAPTION_HEIGHT; rc.bottom -= STATUS_HEIGHT; if (x >= rc.left && x <= rc.right && y >= rc.top && y <= rc.bottom) SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE)); } break; case WM_LBUTTONDOWN: if (pmf->m_bShowMidToolBar) { if (HIWORD(pMsg->lParam) > TOOLBAR_HEIGHT) ((CMainFrame*)AfxGetMainWnd())->SetFocus(this); } else ((CMainFrame*)AfxGetMainWnd())->SetFocus(this); x = LOWORD(pMsg->lParam); y = HIWORD(pMsg->lParam); if (pMsg->hwnd == m_hWnd) { RECT rc; GetClientRect(&rc); rc.left = m_cxSplitter; rc.right = m_cxSplitter + SPLITTER_SIZE; rc.top = (pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : TOOLBAR_BTN_HEIGHT) + CAPTION_HEIGHT; rc.bottom -= STATUS_HEIGHT; if (x >= rc.left && x <= rc.right && y >= rc.top && y <= rc.bottom) { GetWindowRect(&rc); ClipCursor(&rc); SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE)); SetCapture(); m_bDragSplitter = TRUE; xOldSplitter = -77; return TRUE; } } break; case WM_LBUTTONUP: if (m_bDragSplitter) { InvertTracker(xOldSplitter); ClipCursor(NULL); ReleaseCapture(); SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); m_bDragSplitter = FALSE; RECT rc; GetClientRect(&rc); x = LOWORD(pMsg->lParam); if (x < MIN_TREE_WIDTH) x = MIN_TREE_WIDTH; else if (x > rc.right - MIN_LIST_WIDTH) x = rc.right - MIN_LIST_WIDTH; m_cxSplitter = x; RedrawControl(rc.right, rc.bottom); return TRUE; } break; case WM_RBUTTONDOWN: ((CMainFrame*)AfxGetMainWnd())->SetFocus(this); break; } return CView::PreTranslateMessage(pMsg); } BOOL CLocalView::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; cs.dwExStyle |= WS_EX_STATICEDGE; return CView::PreCreateWindow(cs); } int CLocalView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); CString sCaption; // Áß°£Åø¹Ù if (!m_capToolBar.Create(this, "", CPWS_EX_RAISED_EDGE, WS_VISIBLE | WS_CLIPCHILDREN, CRect(0, 0, 0, 0), IDC_LOCAL_TOOLBAR)) { AfxMessageBox("IDC_LOCAL_TOOLBAR »ý¼º ½ÇÆÐ.\n"); return -1; } if (!m_stcAdvert.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_ADVERT)) { AfxMessageBox("IDC_LOCAL_ADVERT »ý¼º ½ÇÆÐ.\n"); return -1; } if (m_stcAdvert.Load(MAKEINTRESOURCE(IDR_ADVERT), _T("GIF"))) m_stcAdvert.Draw(); if (!m_btnToolBar.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_TOOLBAR)) { AfxMessageBox("IDC_LOCAL_BTN_TOOLBAR »ý¼º ½ÇÆÐ.\n"); return -1; } if (!m_btnUpload.Create("¿Ã¸®±â", WS_VISIBLE | BS_BITMAP, CRect(0,0,0,0), this, IDC_LOCAL_BTN_UPLOAD)) { AfxMessageBox("IDC_LOCAL_BTN_UPLOAD »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnUpload.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnUpload.SetFont(&pmf->m_font); m_btnUpload.SetBitmap(0, IDB_BTN_UPLOAD); if (!m_btnDownload.Create("³»¸®±â", WS_VISIBLE | BS_BITMAP, CRect(0,0,0,0), this, IDC_LOCAL_BTN_DOWNLOAD)) { AfxMessageBox("IDC_LOCAL_BTN_DOWNLOAD »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnDownload.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnDownload.SetFont(&pmf->m_font); m_btnDownload.SetBitmap(0, IDB_BTN_DOWNLOAD); if (!m_btnNewFolder.Create("»õÆú´õ", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_NEWFOLDER)) { AfxMessageBox("IDC_LOCAL_BTN_NEWFOLDER »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnNewFolder.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnNewFolder.SetFont(&pmf->m_font); m_btnNewFolder.SetBitmap(0, IDB_BTN_NEWFOLDER); if (!m_btnDelete.Create("»èÁ¦", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_DELETE)) { AfxMessageBox("IDC_LOCAL_BTN_DELETE »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnDelete.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnDelete.SetFont(&pmf->m_font); m_btnDelete.SetBitmap(0, IDB_BTN_DELETE); // Æ®¸® »ý¼º if (!m_capTitleIcon.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, 0)) { AfxMessageBox("IDC_LOCAL_TITLEICON »ý¼º ½ÇÆÐ.\n"); return -1; } m_capTitleIcon.LoadBitmaps(IDB_CAP_LOCAL); sCaption = "³» ÄÄÇ»ÅÍ"; if (!m_capTitle.Create(this, " " + sCaption, CPWS_EX_CLOSEBUTTON, WS_VISIBLE, CRect(0, 0, 0, 0), IDC_LOCAL_TITLE)) { AfxMessageBox("IDC_LOCAL_TITLE »ý¼º ½ÇÆÐ.\n"); return -1; } m_capTitle.SetFont(&pmf->m_font); if (!m_tree.Create("", WS_VISIBLE | WS_CHILD, CRect(0,0,0,0), this, IDC_LOCAL_TREE)) { AfxMessageBox( "IDC_LOCAL_TREE »ý¼º ½ÇÆÐ.\n" ); return -1; } // m_tree.ModifyStyle(WS_BORDER | WS_THICKFRAME, NULL); // m_tree.ModifyStyleEx(NULL, WS_EX_STATICEDGE); // ¸®½ºÆ® »ý¼º sCaption = "À§Ä¡"; if (!m_capAddr.Create(sCaption, WS_VISIBLE | SS_CENTER | SS_CENTERIMAGE, CRect(0,0,0,0), this, IDC_LOCAL_STC_ADDR)) { AfxMessageBox("IDC_LOCAL_STC_ADDR »ý¼º ½ÇÆÐ.\n"); return -1; } m_capAddr.SetFont(&pmf->m_font); if (!m_cboAddr.Create("", WS_VISIBLE, CRect(0,0,0,0), this, IDC_LOCAL_CBO_ADDR)) { AfxMessageBox("IDC_LOCAL_CBO_ADDR »ý¼º ½ÇÆÐ.\n"); return -1; } if (!m_btnGoAddr.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_GO_ADDR)) { AfxMessageBox("IDC_LOCAL_BTN_GO_ADDR »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnGoAddr.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnGoAddr.SetBitmap(0, IDB_BTN_GO); if (!m_btnUpAddr.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_UP_ADDR)) { AfxMessageBox("IDC_LOCAL_BTN_UP_ADDR »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnUpAddr.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnUpAddr.SetBitmap(0, IDB_BTN_UP); if (!m_btnListStyle.Create("", WS_VISIBLE | BS_OWNERDRAW, CRect(0,0,0,0), this, IDC_LOCAL_BTN_LISTSTYLE)) { AfxMessageBox("IDC_LOCAL_BTN_LISTSTYLE »ý¼º ½ÇÆÐ.\n"); return -1; } m_btnListStyle.SetXButtonStyle(BS_XT_WINXP_COMPAT); m_btnListStyle.SetBitmap(0, IDB_BTN_LISTSTYLE); if (!m_list.Create("", WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SHAREIMAGELISTS | LVS_EDITLABELS, CRect(0,0,0,0), this, IDC_LOCAL_LIST)) { AfxMessageBox("IDC_LOCAL_LIST »ý¼º ½ÇÆÐ.\n"); return -1; } m_list.put_MultiSelect(TRUE); if (!m_capStatus.Create(this, "", CPWS_EX_RAISED_EDGE, WS_VISIBLE, CRect(0, 0, 0, 0), 0)) { AfxMessageBox("IDC_LOCAL_STATUSBAR »ý¼º ½ÇÆÐ.\n"); return -1; } m_capStatus.SetFont(&pmf->m_font); if (!m_prgStatusSpace.Create(WS_VISIBLE, CRect(0, 0, 0, 0), this, 0)) { AfxMessageBox("IDC_LOCAL_STATUS_SPACE »ý¼º ½ÇÆÐ.\n"); return -1; } m_prgStatusSpace.SetFont(&pmf->m_font); m_prgStatusSpace.SetRange(0, 100); m_prgStatusSpace.SetText(" "); m_prgStatusSpace.SetStep(1); m_prgStatusSpace.ShowWindow(SW_HIDE); if (!m_stcStatusSpace.Create("", WS_VISIBLE, CRect(0, 0, 0, 0), this)) { AfxMessageBox("IDC_LOCAL_STATUS_SPACE »ý¼º ½ÇÆÐ.\n"); return -1; } m_stcStatusSpace.SetFont(&pmf->m_font); if (!m_stcStatusObject.Create("", WS_VISIBLE, CRect(0, 0, 0, 0), this)) { AfxMessageBox("IDC_LOCAL_STATUS_OBJECT »ý¼º ½ÇÆÐ.\n"); return -1; } m_stcStatusObject.SetFont(&pmf->m_font); if (!m_stcStatusMsg.Create("", WS_VISIBLE, CRect(0, 0, 0, 0), this)) { AfxMessageBox("IDC_LOCAL_STATUS_MSG »ý¼º ½ÇÆÐ.\n"); return -1; } m_stcStatusMsg.SetFont(&pmf->m_font); if (!m_stcSeparator1.Create("", WS_VISIBLE | WS_BORDER, CRect(0, 0, 1, STATUS_HEIGHT - 2), this)) { AfxMessageBox("IDC_LOCAL_STATUS_SEPARATOR »ý¼º ½ÇÆÐ.\n"); return -1; } m_stcSeparator1.ModifyStyleEx(NULL, WS_EX_STATICEDGE); if (!m_stcSeparator2.Create("", WS_VISIBLE | WS_BORDER, CRect(0, 0, 1, STATUS_HEIGHT - 2), this)) { AfxMessageBox("IDC_LOCAL_STATUS_SEPARATOR »ý¼º ½ÇÆÐ.\n"); return -1; } m_stcSeparator2.ModifyStyleEx(NULL, WS_EX_STATICEDGE); // m_tree.put_ShList((IDispatch*)m_list.GetControlUnknown()); m_cboAddr.put_ShTree((IDispatch*)m_tree.GetControlUnknown()); // Çã¿ë½Ã OleDrop ¿¡·¯¹ß»ý // m_tree.put_ShList((IDispatch*)m_list.GetControlUnknown()); ApplyListStyle(); return 0; } void CLocalView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); m_cxSplitter = m_cxSplitter > 0 ? m_cxSplitter : 250; RedrawControl(cx, cy); if (pmf->m_bSizing) { m_cboAddr.SetRedraw(FALSE); m_tree.SetRedraw(FALSE); m_list.SetRedraw(FALSE); } RedrawControl(cx, cy); if (pmf->m_bSizing) { m_cboAddr.SetRedraw(TRUE); m_tree.SetRedraw(TRUE); m_list.SetRedraw(TRUE); } } BOOL CLocalView::OnEraseBkgnd(CDC* pDC) { return TRUE; } void CLocalView::OnTimer(UINT nIDEvent) { // EndWaitCursor(); KillTimer(m_nTimer); m_nTimer = 0; if (nIDEvent == TIMER_ID_UPDATESTATUS) { if (m_nSelectedFiles > 0) m_stcStatusObject.SetWindowText(NumericFormat(m_nSelectedCount) + " °³Ã¼°¡ ¼±ÅõÊ, " + BYTE2KMBYTE(m_nSelectedBytes, 0, TRUE)); else m_stcStatusObject.SetWindowText(NumericFormat(m_nSelectedCount) + " °³Ã¼°¡ ¼±ÅõÊ"); AfxGetMainWnd()->PostMessage(WMU_UPDATE_CONTROL_STATUS); } else if (nIDEvent == TIMER_ID_CHANGEFOLDER) { m_list.put_Folder(m_tree.get_SelectedFolder()); AfxGetMainWnd()->PostMessage(WMU_UPDATE_CONTROL_STATUS); } CView::OnTimer(nIDEvent); } void CLocalView::OnLocalAdvert() { // ¿©±â } void CLocalView::OnLocalBtnToolbar() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); pmf->OnViewMidToolbar(); } void CLocalView::OnLocalBtnUpload() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); pmf->Upload(true); } void CLocalView::OnLocalBtnDownload() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); pmf->Download(); } void CLocalView::OnLocalBtnNewFolder() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); if (pmf->m_fl == FL_LOCAL) OnListNewfolder(); else ((CRemoteListCtrl*)pmf->m_pRemoteView->GetListCtrl())->OnListNewfolder(); } void CLocalView::OnLocalBtnDelete() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); if (pmf->m_fl == FL_LOCAL) DeleteFile(); else ((CRemoteListCtrl*)pmf->m_pRemoteView->GetListCtrl())->OnListfileDelete(); } void CLocalView::OnLocalTitle() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pmf); pmf->OnViewLtree(); } /* void CLocalView::OnLocalBtnGoAddr() { IPTxShTreeNodes *pnodes = (IPTxShTreeNodes*)m_tree.get_Nodes(); IPTxShTreeNode *pnode; long lNodeCount; pnodes->get_Count(&lNodeCount); BSTR bstrNode; for (int i = 0; i < lNodeCount - 1; i++) { pnodes->get_Item(i, &pnode); pnode->get_DisplayName(&bstrNode); CString sNode(bstrNode); if (sAddr == sNode) { m_tree.put_SelectedNode(pnode); break; } } } */ void CLocalView::OnLocalBtnUpAddr() { m_tree.GoUp(1); } void CLocalView::OnLocalBtnListStyle() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); pmf->m_nLocalListType++; if (pmf->m_nLocalListType == 5) pmf->m_nLocalListType = 0; ApplyListStyle(); } ///////////////////////////////////////////////////////////////////////////////////////// // TreeCtrl, ListCtrl event method BEGIN_EVENTSINK_MAP(CLocalView, CView) ON_EVENT(CLocalView, IDC_LOCAL_CBO_ADDR, 100, OnMouseDownLocalCombo, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 10, OnAfterSelChangeLocalTree, VTS_DISPATCH) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 15, OnBeforeShellMenuPopupLocalTree, VTS_DISPATCH VTS_DISPATCH VTS_I4 VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 16, OnAfterShellMenuSelectionLocalTree, VTS_DISPATCH VTS_I4 VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 18, OnOleDragOverLocalTree, VTS_DISPATCH VTS_PI4 VTS_PI2 VTS_PI2 VTS_R4 VTS_R4 VTS_I2) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 19, OnOleDragDropLocalTree, VTS_DISPATCH VTS_PI4 VTS_PI2 VTS_PI2 VTS_R4 VTS_R4) ON_EVENT(CLocalView, IDC_LOCAL_TREE, 100, OnMouseDownLocalTree, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 7, OnFolderChangedLocalList, VTS_NONE) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 8, OnBeforeSelectionChangeLocalList, VTS_DISPATCH VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 14, OnAfterFillLocalList, VTS_NONE) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 15, OnBeforeShellMenuPopupLocalList, VTS_DISPATCH VTS_DISPATCH VTS_I4 VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 16, OnAfterShellMenuSelectionLocalList, VTS_DISPATCH VTS_I4 VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 17, OnItemContextMenuLocalList, VTS_DISPATCH VTS_R4 VTS_R4 VTS_PBOOL) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 18, OnOleDragOverLocalList, VTS_DISPATCH VTS_PI4 VTS_PI2 VTS_PI2 VTS_R4 VTS_R4 VTS_I2) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 19, OnOleDragDropLocalList, VTS_DISPATCH VTS_PI4 VTS_PI2 VTS_PI2 VTS_R4 VTS_R4) ON_EVENT(CLocalView, IDC_LOCAL_LIST, 102, OnMouseUpLocalList, VTS_I2 VTS_I2 VTS_R4 VTS_R4) END_EVENTSINK_MAP() void CLocalView::OnMouseDownLocalCombo(short aButton, short aShift, float ax, float ay) { ((CMainFrame*)AfxGetMainWnd())->SetFocus(this); } void CLocalView::OnAfterSelChangeLocalTree(LPDISPATCH aSelectedNode) { if (!m_pnodeRoot) m_pnodeRoot = (IPTxShTreeNode*)aSelectedNode; m_nTimer = (UINT)SetTimer(TIMER_ID_CHANGEFOLDER, 1, 0); AfxGetMainWnd()->PostMessage(WMU_UPDATE_CONTROL_STATUS); } void CLocalView::OnBeforeShellMenuPopupLocalTree(LPDISPATCH aMenu, LPDISPATCH aSelectedNode, long aNextCustomMenuId, BOOL* aCancelMenu) { IPTxContextMenu *pcontextmenu = (IPTxContextMenu *)aMenu; IPTxMenuItems *pmenuitems; pcontextmenu->get_MenuItems(&pmenuitems); IPTxMenuItem *pmenuitem; m_nPasteMenuId = -1; // ¼±ÅÃµÈ Æ®¸®ÀÇ ³ëµå°¡ ÆÄÀϽýºÅÛ? IPTxShTreeNode *pnode = (IPTxShTreeNode*)aSelectedNode; VARIANT_BOOL bFileSystem; pnode->get_IsFileSystem(&bFileSystem); if (!bFileSystem) return; BSTR bstr; pnode->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath == "") return; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); // Ŭ¸³º¸µå¿¡ µ¥ÀÌÅͰ¡ ÀÖ³ª? COleDataObject odo; if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) && !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0)) return; DWORD dwAttr = GetFileAttributes(sPath); if (dwAttr == INVALID_FILE_ATTRIBUTES) return; if (!(dwAttr & FILE_ATTRIBUTE_DIRECTORY)) return; int iCopyPos = -1, iPastePos = -1; long nCount; pmenuitems->get_Count(&nCount); for (int i = 0; i < nCount; i++) { pmenuitems->get_Item(i, &pmenuitem); BSTR bstr; pmenuitem->get_Caption(&bstr); CString sCaption(bstr); ::SysFreeString(bstr); if (!sCaption.Left(4).Compare("º¹»ç")) iCopyPos = i; else if (!sCaption.Left(8).Compare("ºÙ¿©³Ö±â")) iPastePos = i; } if (iPastePos > 0) { pmenuitems->get_Item(iPastePos, &pmenuitem); pmenuitem->put_Enabled(TRUE); pmenuitem->get_CommandId(&m_nPasteMenuId); } else if (iCopyPos > 0 && iPastePos < 0) { m_nPasteMenuId = aNextCustomMenuId + 1; CString sMenuCaption = "ºÙ¿©³Ö±â(&P)"; pmenuitems->InsertItem(iCopyPos + 1, m_nPasteMenuId, sMenuCaption.AllocSysString(), &pmenuitem); pmenuitem->put_Enabled(TRUE); } m_sSelectedPath = sPath; } void CLocalView::OnAfterShellMenuSelectionLocalTree(LPDISPATCH aSelectedNode, long aSelectedMenuId, BOOL* aCancelDefaultBehaviour) { if (aSelectedMenuId == m_nPasteMenuId) m_list.PasteClipboard(m_sSelectedPath); } void CLocalView::OnOleDragOverLocalTree(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay, short aState) { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf->m_bDragFromRemote) return; IPTxShTreeNode* pnode = (IPTxShTreeNode*)m_tree.HitTest(ax, ay); if (!pnode) { *aEffect = DROPEFFECT_NONE; return; } BSTR bstr; pnode->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath == "") *aEffect = DROPEFFECT_NONE; else *aEffect = DROPEFFECT_COPY; } void CLocalView::OnOleDragDropLocalTree(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay) { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf->m_bDragFromRemote) return; IPTxShTreeNode* pnode = (IPTxShTreeNode*)m_tree.HitTest(ax, ay); if (!pnode) return; BSTR bstr; pnode->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath == "") return; pmf->m_sDragTarget = sPath; pmf->Download(false); } void CLocalView::OnMouseDownLocalTree(short aButton, short aShift, float ax, float ay) { ((CMainFrame *)AfxGetMainWnd())->SetFocus(this); } void CLocalView::OnFolderChangedLocalList() { m_tree.put_SelectedFolder(m_list.get_Folder()); } void CLocalView::OnBeforeSelectionChangeLocalList(LPDISPATCH aItem, BOOL* aCancel) { if (m_bUpdating) return; // BeginWaitCursor(); if (*aCancel != 0xEDBC0000) { IPTxShListItem *pitem = (IPTxShListItem *)aItem; INT64 nBytes; pitem->get_Size64(&nBytes); BSTR bstrPath; pitem->get_PathName(&bstrPath); CString sPath(bstrPath); ::SysFreeString(bstrPath); VARIANT_BOOL bSelected; pitem->get_Selected(&bSelected); if (!bSelected) { if (sPath == "") m_nSelectedSecialObj++; if (nBytes >= 0) m_nSelectedFiles++; m_nSelectedCount++; m_nSelectedBytes += nBytes < 0 ? 0 : nBytes; } else { if (sPath == "") m_nSelectedSecialObj--; if (nBytes >= 0) m_nSelectedFiles--; m_nSelectedCount--; m_nSelectedBytes -= nBytes < 0 ? 0 : nBytes; } } else { m_nSelectedCount = 0; m_nSelectedBytes = 0; m_nSelectedFiles = 0; m_nSelectedSecialObj = 0; } if (m_nSelectedCount > 0) { if (m_nTimer != 0) KillTimer(m_nTimer); m_nTimer = (UINT)SetTimer(TIMER_ID_UPDATESTATUS, 10, 0); } else { if (m_nTimer != 0) KillTimer(m_nTimer); if (m_nTotalBytes >= 0) m_stcStatusObject.SetWindowText(NumericFormat(m_nTotalCount) + " °³Ã¼, " + BYTE2KMBYTE(m_nTotalBytes, 0, TRUE)); else m_stcStatusObject.SetWindowText(NumericFormat(m_nTotalCount) + " °³Ã¼"); } AfxGetMainWnd()->PostMessage(WMU_UPDATE_CONTROL_STATUS); } void CLocalView::OnAfterFillLocalList() { IPTxShTreeNode *pnode = (IPTxShTreeNode*)m_tree.get_SelectedNode(); // Path ±¸Çϱâ BSTR bstr; pnode->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); typedef BOOL (WINAPI *PGETDISKFREESPACEEX)(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); if (sPath.GetLength() > 0) { PGETDISKFREESPACEEX pGetDiskFreeSpaceEx; __int64 nTotalBytes, nFreeBytes; BOOL bRet; pGetDiskFreeSpaceEx = (PGETDISKFREESPACEEX)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetDiskFreeSpaceExA"); if (pGetDiskFreeSpaceEx) { __int64 nFreeBytesToCaller; bRet = pGetDiskFreeSpaceEx(sPath, (PULARGE_INTEGER)&nFreeBytesToCaller, (PULARGE_INTEGER)&nTotalBytes, (PULARGE_INTEGER)&nFreeBytes); } else { DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters; bRet = GetDiskFreeSpaceA(sPath, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters); nTotalBytes = dwTotalClusters * dwSectPerClust * dwBytesPerSect; nFreeBytes = dwFreeClusters * dwSectPerClust * dwBytesPerSect; } if (bRet) { CString sText = " µð½ºÅ© ¿©À¯ °ø°£: "; sText += BYTE2KMBYTE(nFreeBytes, 0, TRUE); m_stcStatusSpace.SetWindowText(sText); int nPercent = (int)((nFreeBytes * 100) / nTotalBytes); sText.Format("%d%% ³²À½", nPercent); m_prgStatusSpace.SetPos(100 - nPercent, sText); m_prgStatusSpace.ShowWindow(SW_SHOW); } else { m_prgStatusSpace.ShowWindow(SW_HIDE); m_stcStatusSpace.SetWindowText(GetErrorMessage(GetLastError())); } } else { m_prgStatusSpace.ShowWindow(SW_HIDE); m_stcStatusSpace.SetWindowText(""); } IPTxShListItems *pitems = (IPTxShListItems *)m_list.get_Items(); long nTotalCount; pitems->get_Count(&nTotalCount); VARIANT_BOOL bFileSystem; // IPTxShTreeNode *pnode = (IPTxShTreeNode*)m_tree.get_SelectedNode(); pnode->get_IsFileSystem(&bFileSystem); if (bFileSystem) { CFileStatus64 fs; __int64 nTotalBytes = 0; IPTxShListItem *pitem; for (int i = 0; i < nTotalCount; i++) { pitems->get_Item(i, &pitem); BSTR bstr; pitem->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (GetStatus64(sPath, fs)) nTotalBytes += fs.m_size; } m_stcStatusObject.SetWindowText(NumericFormat(nTotalCount) + " °³Ã¼, " + BYTE2KMBYTE(nTotalBytes, 0, TRUE)); m_nTotalBytes = nTotalBytes; } else { m_stcStatusObject.SetWindowText(NumericFormat(nTotalCount) + " °³Ã¼"); m_nTotalBytes = -1; } m_nTotalCount = nTotalCount; } void CLocalView::OnItemContextMenuLocalList(LPDISPATCH aItem, float ax, float ay, BOOL* aCancelDefaultMenu) { m_bIgnoreEvent = TRUE; } void CLocalView::OnBeforeShellMenuPopupLocalList(LPDISPATCH aMenu, LPDISPATCH aSelectedItems, long aNextCustomMenuId, BOOL* aCancelMenu) { IPTxContextMenu *pcontextmenu = (IPTxContextMenu *)aMenu; IPTxMenuItems *pmenuitems; pcontextmenu->get_MenuItems(&pmenuitems); IPTxMenuItem *pmenuitem; CString sMenuCaption = "***** ¿Ã¸®±â *****"; pmenuitems->InsertItem(0, aNextCustomMenuId, sMenuCaption.AllocSysString(), &pmenuitem); pmenuitem->put_Enabled(!(m_btnUpload.GetStyle() & WS_DISABLED)); pmenuitem->put_Break(TRUE); sMenuCaption = "-"; pmenuitems->InsertItem(1, 0, sMenuCaption.AllocSysString(), &pmenuitem); m_nUploadMenuId = aNextCustomMenuId; m_nPasteMenuId = -1; // ¼±ÅÃµÈ Æ®¸®ÀÇ ³ëµå°¡ ÆÄÀϽýºÅÛ? IPTxShTreeNode *pnode = (IPTxShTreeNode*)m_tree.get_SelectedNode(); VARIANT_BOOL bFileSystem; pnode->get_IsFileSystem(&bFileSystem); if (!bFileSystem) return; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); // Ŭ¸³º¸µå¿¡ µ¥ÀÌÅͰ¡ ÀÖ³ª? COleDataObject odo; if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) && !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0)) return; // ¼±ÅÃµÈ if (m_nSelectedCount != 1) return; IPTxShListItems *pitems = (IPTxShListItems *)m_list.get_Items(); long nCount; pitems->get_Count(&nCount); IPTxShListItem *pitem; for (int i = 0; i < nCount; i++) { pitems->get_Item(i, &pitem); VARIANT_BOOL bSelected; pitem->get_Selected(&bSelected); if (!bSelected) continue; BSTR bstr; pitem->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath == "") continue; DWORD dwAttr = GetFileAttributes(sPath); if (dwAttr == INVALID_FILE_ATTRIBUTES) break; if (!(dwAttr & FILE_ATTRIBUTE_DIRECTORY)) break; int iCopyPos = -1, iPastePos = -1; pmenuitems->get_Count(&nCount); for (int i = 0; i < nCount; i++) { pmenuitems->get_Item(i, &pmenuitem); BSTR bstr; pmenuitem->get_Caption(&bstr); CString sCaption(bstr); ::SysFreeString(bstr); if (!sCaption.Left(4).Compare("º¹»ç")) iCopyPos = i; else if (!sCaption.Left(8).Compare("ºÙ¿©³Ö±â")) iPastePos = i; } if (iPastePos > 0) { pmenuitems->get_Item(iPastePos, &pmenuitem); pmenuitem->put_Enabled(TRUE); pmenuitem->get_CommandId(&m_nPasteMenuId); } else if (iCopyPos > 0 && iPastePos < 0) { m_nPasteMenuId = aNextCustomMenuId + 1; sMenuCaption = "ºÙ¿©³Ö±â(&P)"; pmenuitems->InsertItem(iCopyPos + 1, m_nPasteMenuId, sMenuCaption.AllocSysString(), &pmenuitem); pmenuitem->put_Enabled(TRUE); } m_sSelectedPath = sPath; break; } } void CLocalView::OnAfterShellMenuSelectionLocalList(LPDISPATCH aSelectedItems, long aSelectedMenuItemId, BOOL* aCancelDefaultBehaviour) { if (aSelectedMenuItemId == m_nUploadMenuId) OnLocalBtnUpload(); else if (aSelectedMenuItemId == m_nPasteMenuId) m_list.PasteClipboard(m_sSelectedPath); } void CLocalView::OnOleDragOverLocalList(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay, short aState) { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf->m_bDragFromRemote) return; if (!m_pwndPrevFocused) { m_pwndPrevFocused = GetFocus(); m_list.SendMessage(WM_SETFOCUS); } if (m_pitemPrev) m_pitemPrev->put_Selected(m_bPrevItemSelected); IPTxShListItem* pitem = (IPTxShListItem*)m_list.HitTest(ax, ay); if (!pitem) { m_pitemPrev = NULL; *aEffect = DROPEFFECT_COPY; } else { m_pitemPrev = pitem; pitem->get_Selected(&m_bPrevItemSelected); pitem->put_Selected(TRUE); *aEffect = DROPEFFECT_NONE; BSTR bstr; pitem->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath != "" && GetFileAttributes(sPath) & FILE_ATTRIBUTE_DIRECTORY) *aEffect = DROPEFFECT_COPY; } } void CLocalView::OnOleDragDropLocalList(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay) { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf->m_bDragFromRemote) return; if (m_pitemPrev) m_pitemPrev->put_Selected(m_bPrevItemSelected); IPTxShListItem* pitem = (IPTxShListItem*)m_list.HitTest(ax, ay); if (!pitem) { IPTxShFolder* pfolder = (IPTxShFolder*)m_tree.get_SelectedFolder(); BSTR bstr; pfolder->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); pmf->m_sDragTarget = sPath; } else { *aEffect = DROPEFFECT_NONE; BSTR bstr; pitem->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); if (sPath == "" || !(GetFileAttributes(sPath) & FILE_ATTRIBUTE_DIRECTORY)) return; pmf->m_sDragTarget = sPath; } pmf->Download(false); } void CLocalView::OnMouseUpLocalList(short aButton, short aShift, float ax, float ay) { if (aButton != 2 || m_list.HitTest(ax, ay) || m_bIgnoreEvent) { m_bIgnoreEvent = FALSE; return; } CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); CMenu menu, *pmenu; menu.LoadMenu(IDR_POP_LLIST); pmenu = menu.GetSubMenu(0); ASSERT(pmenu != NULL); pmenu->SetMenuItemBitmaps(ID_LIST_NEWFOLDER, MF_BYCOMMAND, &pmf->m_bmFolder, &pmf->m_bmFolder); pmenu->SetMenuItemBitmaps(ID_LIST_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste); switch (pmf->m_nLocalListType) { case 0: pmenu->CheckMenuItem(ID_LIST_TYPE0, MF_CHECKED); break; case 1: pmenu->CheckMenuItem(ID_LIST_TYPE1, MF_CHECKED); break; case 2: pmenu->CheckMenuItem(ID_LIST_TYPE2, MF_CHECKED); break; case 3: pmenu->CheckMenuItem(ID_LIST_TYPE3, MF_CHECKED); break; case 4: pmenu->CheckMenuItem(ID_LIST_TYPE4, MF_CHECKED); break; } switch (abs(m_list.get_SortColumn())) { case 1: case 5: pmenu->CheckMenuItem(ID_LIST_SORT1, MF_CHECKED); break; case 2: pmenu->CheckMenuItem(ID_LIST_SORT2, MF_CHECKED); break; case 3: pmenu->CheckMenuItem(ID_LIST_SORT3, MF_CHECKED); break; case 4: pmenu->CheckMenuItem(ID_LIST_SORT4, MF_CHECKED); break; } COleDataObject odo; if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) && !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0)) pmenu->EnableMenuItem(ID_LIST_PASTE, MF_GRAYED); CPoint pt((int)ax + 1, (int)ay + 1); m_list.ClientToScreen(&pt); pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); } void CLocalView::OnListNewfolder() { m_list.CreateNewFolder(TRUE); } void CLocalView::OnListRefresh() { m_tree.Refresh(); m_list.Refresh(); } void CLocalView::OnListType0() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewLlistType0(); } void CLocalView::OnListType1() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewLlistType1(); } void CLocalView::OnListType2() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewLlistType2(); } void CLocalView::OnListType3() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewLlistType3(); } void CLocalView::OnListType4() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewLlistType4(); } void CLocalView::OnListSort1() { int nSort = m_list.get_SortColumn(); if (abs(nSort) == 1) m_list.put_SortColumn(-nSort); else if (nSort > 0) m_list.put_SortColumn(1); else m_list.put_SortColumn(-1); } void CLocalView::OnListSort2() { int nSort = m_list.get_SortColumn(); if (abs(nSort) == 2) m_list.put_SortColumn(-nSort); else if (nSort > 0) m_list.put_SortColumn(2); else m_list.put_SortColumn(-2); } void CLocalView::OnListSort3() { int nSort = m_list.get_SortColumn(); if (abs(nSort) == 3) m_list.put_SortColumn(-nSort); else if (nSort > 0) m_list.put_SortColumn(3); else m_list.put_SortColumn(-3); } void CLocalView::OnListSort4() { int nSort = m_list.get_SortColumn(); if (abs(nSort) == 4) m_list.put_SortColumn(-nSort); else if (nSort > 0) m_list.put_SortColumn(4); else m_list.put_SortColumn(-4); } void CLocalView::OnListPaste() { m_list.PasteClipboard(); } void CLocalView::OnListAll() { IPTxShListItems* pitems = (IPTxShListItems*)m_list.get_Items(); long nCount; pitems->get_Count(&nCount); IPTxShListItem* pitem; for (int i = 0; i < nCount; i++) { pitems->get_Item(i, &pitem); pitem->put_Selected(TRUE); } } ///////////////////////////////////////////////////////////////////////////////////////// // User defined method void CLocalView::RedrawFocus() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf->m_bShowLocalTree) return; RECT rc; GetClientRect(&rc); CDC* pDC = GetDC(); CBrush br; br.CreateSysColorBrush(COLOR_CAPTIONTEXT); rc.left = m_cxSplitter; rc.right = m_cxSplitter + SPLITTER_SIZE; rc.top = (pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : TOOLBAR_BTN_HEIGHT) + CAPTION_HEIGHT + 1; pDC->FillRect(&rc, &br); br.DeleteObject(); br.CreateSysColorBrush(pmf->m_fl == FL_LOCAL ? COLOR_ACTIVECAPTION : COLOR_INACTIVECAPTION); rc.left = m_cxSplitter + 1; rc.right = m_cxSplitter + SPLITTER_SIZE - 2; pDC->FillRect(&rc, &br); br.DeleteObject(); ReleaseDC(pDC); } void CLocalView::RedrawControl(int cx, int cy) { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (!pmf) return; int cxList; int cyToolBar = pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : TOOLBAR_BTN_HEIGHT; int cyStatusBar = pmf->m_bShowLocalStatus ? STATUS_HEIGHT : 0; m_btnToolBar.LoadBitmaps(pmf->m_bShowMidToolBar ? IDB_BTN_TOOLBAR1 : IDB_BTN_TOOLBAR2); HDWP hdwp = BeginDeferWindowPos(22); if (hdwp) { DeferWindowPos(hdwp, m_capToolBar.m_hWnd, HWND_TOP, 0, 0, cx, pmf->m_bShowMidToolBar ? cyToolBar : 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnToolBar.m_hWnd, HWND_TOP, cx - (TOOLBAR_BTN_WIDTH + 1), 0, TOOLBAR_BTN_WIDTH, TOOLBAR_BTN_HEIGHT, SWP_NOZORDER); if (pmf->m_bShowMidToolBar) { DeferWindowPos(hdwp, m_stcAdvert.m_hWnd, HWND_TOP, 10, 3, 285, 35, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnUpload.m_hWnd, HWND_TOP, 350, 7, 80, 26, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnDownload.m_hWnd, HWND_TOP, 435, 7, 80, 24, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnNewFolder.m_hWnd, HWND_TOP, 520, 7, 80, 24, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnDelete.m_hWnd, HWND_TOP, 605, 7, 80, 24, SWP_NOZORDER); } else { DeferWindowPos(hdwp, m_stcAdvert.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnUpload.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnDownload.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnNewFolder.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnDelete.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); } if (pmf->m_bShowLocalTree) { cxList = m_cxSplitter + SPLITTER_SIZE; DeferWindowPos(hdwp, m_capTitleIcon.m_hWnd, HWND_TOP, HIGHLIGHT_SIZE + 3, HIGHLIGHT_SIZE + cyToolBar + 3, 16, 16, SWP_NOZORDER); DeferWindowPos(hdwp, m_capTitle.m_hWnd, HWND_TOP, HIGHLIGHT_SIZE, HIGHLIGHT_SIZE + cyToolBar, m_cxSplitter + 1, CAPTION_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_tree.m_hWnd, HWND_TOP, -1, HEADER_HEIGHT + cyToolBar, m_cxSplitter + 1, cy - HEADER_HEIGHT - cyStatusBar - cyToolBar, SWP_NOZORDER); } else { cxList = 0; DeferWindowPos(hdwp, m_capTitleIcon.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_capTitle.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_tree.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); } DeferWindowPos(hdwp, m_capAddr.m_hWnd, HWND_TOP, cxList - 3, HIGHLIGHT_SIZE + cyToolBar, ADDRESS_WIDTH + 3, CAPTION_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_cboAddr.m_hWnd, HWND_TOP, cxList + ADDRESS_WIDTH, HIGHLIGHT_SIZE + cyToolBar, cx - (cxList + (ADDRESS_BTN_WIDTH << 1)) - ADDRESS_WIDTH - 1, 200, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnUpAddr.m_hWnd, HWND_TOP, cx - (ADDRESS_BTN_WIDTH << 1) - 1, HIGHLIGHT_SIZE + cyToolBar + 1, ADDRESS_BTN_WIDTH, CAPTION_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_btnListStyle.m_hWnd, HWND_TOP, cx - ADDRESS_BTN_WIDTH - 1, HIGHLIGHT_SIZE + cyToolBar + 1, ADDRESS_BTN_WIDTH, CAPTION_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_list.m_hWnd, HWND_TOP, cxList - 1, HEADER_HEIGHT + cyToolBar, cx - cxList + 1, cy - HEADER_HEIGHT - cyStatusBar - cyToolBar, SWP_NOZORDER); DeferWindowPos(hdwp, m_capStatus.m_hWnd, HWND_TOP, 0, cy - cyStatusBar, cx, cyStatusBar, SWP_NOZORDER); if (pmf->m_bShowLocalStatus) { int nTop = cy - cyStatusBar + 4; DeferWindowPos(hdwp, m_prgStatusSpace.m_hWnd, HWND_TOP, 0, nTop - 4, 77, cyStatusBar - 1, SWP_NOZORDER | SWP_FRAMECHANGED); DeferWindowPos(hdwp, m_stcStatusSpace.m_hWnd, HWND_TOP, 80, nTop, 170, STATUS_TEXT_HEIGHT, SWP_NOZORDER | SWP_FRAMECHANGED); DeferWindowPos(hdwp, m_stcStatusObject.m_hWnd, HWND_TOP, 255, nTop, 170, STATUS_TEXT_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcStatusMsg.m_hWnd, HWND_TOP, 430, nTop, cx - 435, STATUS_TEXT_HEIGHT, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcSeparator1.m_hWnd, HWND_TOP, 253, nTop - 3, 0, 0, SWP_NOZORDER | SWP_NOSIZE); DeferWindowPos(hdwp, m_stcSeparator2.m_hWnd, HWND_TOP, 428, nTop - 3, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } else { DeferWindowPos(hdwp, m_prgStatusSpace.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcStatusSpace.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcStatusObject.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcStatusMsg.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); DeferWindowPos(hdwp, m_stcSeparator1.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE); DeferWindowPos(hdwp, m_stcSeparator2.m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } EndDeferWindowPos(hdwp); } RedrawFocus(); } void CLocalView::RedrawControlEx() { RECT rc; GetClientRect(&rc); RedrawControl(rc.right, rc.bottom); } void CLocalView::ApplyListStyle() { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT(pmf); switch (pmf->m_nLocalListType) { case 0: m_list.put_ViewStyle(m_list.ptvsThumbnails); break; case 1: m_list.put_ViewStyle(m_list.ptvsIcon); break; case 2: m_list.put_ViewStyle(m_list.ptvsSmallIcon); break; case 3: m_list.put_ViewStyle(m_list.ptvsList); break; case 4: m_list.put_ViewStyle(m_list.ptvsReport); break; } } BOOL CLocalView::GetSelectedObject(CStringArray& saObject) { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); BOOL bFoundSystemObject = FALSE; VARIANT_BOOL vbool; BSTR bstr; if (pmf->m_pwndLocal == &m_list) { IPTxShListItems *pitems = (IPTxShListItems *)m_list.get_Items(); long nCount; pitems->get_Count(&nCount); IPTxShListItem *pitem; for (int i = 0; i < nCount; i++) { pitems->get_Item(i, &pitem); pitem->get_Selected(&vbool); if (!vbool) continue; pitem->get_IsFileSystem(&vbool); if (!vbool) { bFoundSystemObject = TRUE; continue; } pitem->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); saObject.Add(sPath); } } else { IPTxShTreeNode *pnode = (IPTxShTreeNode *)m_tree.get_SelectedNode(); pnode->get_IsFileSystem(&vbool); if (!vbool) bFoundSystemObject = TRUE; else { pnode->get_PathName(&bstr); CString sPath(bstr); ::SysFreeString(bstr); saObject.Add(sPath); } } if (bFoundSystemObject) AfxMessageBox("½Ã½ºÅÛ ÆÄÀÏÀº ¾÷·Îµå ÇÒ ¼ö ¾ø½À´Ï´Ù.", MB_ICONEXCLAMATION); return saObject.GetCount() > 0 ? TRUE : FALSE; } BOOL CLocalView::SetPath(CString sPath) { return TRUE; } CString CLocalView::GetSelectedPath() { IPTxShFolder* pfolder = (IPTxShFolder*)m_tree.get_SelectedFolder(); BSTR bstrPath; pfolder->get_PathName(&bstrPath); CString sPath(bstrPath); ::SysFreeString(bstrPath); return sPath; } BOOL CLocalView::IsSelected() { return m_nSelectedCount > 0 ? TRUE : FALSE; } BOOL CLocalView::IsSpecialObjectSelected() { return m_nSelectedSecialObj > 0 ? TRUE : FALSE; } void CLocalView::InvertTracker(int x) { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); CRect rc; GetWindowRect(&rc); pmf->ScreenToClient(&rc); rc.top += ((pmf->m_bShowMidToolBar ? TOOLBAR_HEIGHT : TOOLBAR_BTN_HEIGHT) + CAPTION_HEIGHT + 2); rc.bottom -= (STATUS_HEIGHT + 2); CDC* pDC = pmf->GetDC(); CBrush* pBrush = CBrush::FromHandle((HBRUSH)::GetStockObject(WHITE_BRUSH)); HBRUSH hOldBrush = NULL; if (pBrush != NULL) hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject); pDC->PatBlt(x, rc.top, SPLITTER_SIZE - 1, rc.Height(), PATINVERT); if (hOldBrush != NULL) SelectObject(pDC->m_hDC, hOldBrush); ReleaseDC(pDC); } void CLocalView::StartDrag() { m_bUpdating = TRUE; m_pwndPrevFocused = NULL; m_pitemPrev = NULL; } void CLocalView::EndDrag() { m_bUpdating = FALSE; if (m_pwndPrevFocused) m_pwndPrevFocused->SetFocus(); } void CLocalView::RefreshItem() { m_tree.Refresh(); m_list.Refresh(); } BOOL CLocalView::CopyClipboard(COleDataObject& odo, CString sTargetPath, BOOL bErase) { STGMEDIUM sm; FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; if (!odo.GetData(CF_HDROP, &sm, &fe)) return FALSE; HDROP hdrop = (HDROP)sm.hGlobal; int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0); if (nDragCount == 0) return FALSE; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); pmf->m_saDragSource.RemoveAll(); char szFile[MAX_PATH]; int nBufSize = 0; for (int i = 0; i < nDragCount; i++) { ::DragQueryFile(hdrop, i, szFile, sizeof(szFile)); CString sFile(szFile); if (sFile.Find('\\') < 0) continue; pmf->m_saDragSource.Add(sFile); nBufSize += sFile.GetLength() + 2; } if (pmf->m_saDragSource.GetCount() == 0) return FALSE; char* pszBuf = new char[nBufSize]; WORD wFlag = FOF_MULTIDESTFILES; int iPos = 0; for (i = 0; i < pmf->m_saDragSource.GetCount(); i++) { CopyMemory(&pszBuf[iPos], pmf->m_saDragSource[i], pmf->m_saDragSource[i].GetLength()); iPos += pmf->m_saDragSource[i].GetLength(); CopyMemory(&pszBuf[iPos], "\0\0", 2); iPos += 2; if (pmf->m_saDragSource[i].Left(pmf->m_saDragSource[i].ReverseFind('\\')) == sTargetPath) wFlag |= FOF_RENAMEONCOLLISION; } SHFILEOPSTRUCT shfo; ZeroMemory(&shfo, sizeof(shfo)); shfo.wFunc = FO_COPY; shfo.fFlags = wFlag; shfo.pFrom = pszBuf; shfo.pTo = sTargetPath; int nRet = SHFileOperation(&shfo); delete pszBuf; return (nRet == 0); } void CLocalView::DeleteFile() { IPTxShListItems* pitems = (IPTxShListItems*)m_list.get_Items(); long nCount; pitems->get_Count(&nCount); BeginWaitCursor(); VARIANT_BOOL bSelected; IPTxShListItem* pitem; for (int i = 0; i < nCount; i++) { pitems->get_Item(i, &pitem); pitem->get_Selected(&bSelected); if (!bSelected) continue; BSTR bstrPath; pitem->get_PathName(&bstrPath); CString sPath(bstrPath); ::SysFreeString(bstrPath); if (sPath == "") continue; DeleteDirectory(sPath); } EndWaitCursor(); }