// BrowsDlg.cpp : implementation file // #include "stdafx.h" #include "demo.h" #include "mainfrm.h" #include "BrowsDlg.h" #include "DemoDoc.h" #include "windowsx.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IDC_IMGLISTCTRL 0 ///////////////////////////////////////////////////////////////////////////// // CBrowseDlg dialog CBrowseDlg::CBrowseDlg(CWnd* pParent /*=NULL*/) : CDialog(CBrowseDlg::IDD, pParent) { //{{AFX_DATA_INIT(CBrowseDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT ASSERT(pParent != NULL); m_pMyOwner=pParent; m_nID = CBrowseDlg::IDD; m_bQuit = FALSE; } void CBrowseDlg::OnCancel() { ((CMainFrame*)m_pMyOwner)->BrowseDone(); DestroyWindow(); } void CBrowseDlg::PostNcDestroy() { delete this; } BOOL CBrowseDlg::Create() { return CDialog::Create(m_nID, m_pMyOwner); } void CBrowseDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBrowseDlg) DDX_Control(pDX, IDC_HIDDENLIST, m_HiddenList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBrowseDlg, CDialog) //{{AFX_MSG_MAP(CBrowseDlg) ON_WM_SIZE() ON_WM_CLOSE() ON_WM_PALETTECHANGED() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBrowseDlg message handlers BOOL CBrowseDlg::OnCommand(WPARAM wParam, LPARAM lParam) { L_INT i; // what is the command and control if((L_INT)LOWORD(wParam) == IDC_IMGLISTCTRL) { switch(HIWORD(wParam)) { case L_ILN_ITEMSEL: if(!m_bBrowsing) { CString csFile; CDemo *pTheApp = (CDemo *)AfxGetApp(); pTheApp->m_DoucumentMode = DOCUMENT_MODE_FILE; L_INT nSelCount = m_Thumb.m_pImgList->GetSelectCount(); if (nSelCount > 0) { pLILITEM pItems=NULL; pItems = (pLILITEM) GlobalAllocPtr(GHND, sizeof(LILITEM) * nSelCount); for(i=0;iGetSelectedItems(pItems); for (int i =0; i < m_HiddenList.GetCount(); i++) { CString tmpStr(_T("\\")); tmpStr += pItems[nSelCount - 1].pText; tmpStr.MakeUpper(); m_HiddenList.GetText(i, csFile); csFile.MakeUpper(); if (csFile.Find((LPCTSTR)tmpStr) != -1) break; } POSITION pos = pTheApp->GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = pTheApp->GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile((LPCTSTR)csFile); GlobalFreePtr(pItems); SetActiveWindow(); } } else m_bQuit = TRUE; return TRUE; break; case L_ILN_KEYDOWN: m_bQuit = TRUE; return TRUE; break; } return TRUE; } m_bQuit = TRUE; return CDialog::OnCommand(wParam, lParam); } BOOL CBrowseDlg::OnInitDialog() { CDialog::OnInitDialog(); CDemo * pTheApp = (CDemo *)AfxGetApp(); SetIcon(pTheApp->LoadIcon(IDR_MAINFRAME), false); // Create the ImageList Control m_ImgList.CreateControl(this->m_hWnd, IDC_IMGLISTCTRL); if(::IsWindow(m_ImgList.m_hWnd)) { CRect rcClient; GetClientRect(&rcClient); ::SetWindowPos(m_ImgList.m_hWnd, NULL, 0, 0, rcClient.Width(), rcClient.Height(), SWP_NOZORDER); ::SetFocus(m_ImgList.m_hWnd); // set some options LILSELOPTION SelOpt; m_ImgList.GetSelectionOptions((pLILSELOPTION)&SelOpt); SelOpt.uAllowSelection = ALLOWSELECTION_SINGLE; m_ImgList.SetSelectionOptions((pLILSELOPTION)&SelOpt); m_Thumb.m_pImgList = &m_ImgList; m_Thumb.m_pHiddenList = &m_HiddenList; m_Thumb.m_pbQuit = &m_bQuit; return FALSE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } else { EndDialog(-1); } return TRUE; } void CBrowseDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CRect rcClient; GetClientRect(&rcClient); ::SetWindowPos(m_ImgList.m_hWnd, NULL, 0, 0, rcClient.Width(), rcClient.Height(), SWP_NOZORDER); } ////////////// Custom LFile for browsing ////////////// LMyBrowse::LMyBrowse() { m_pImgList = NULL; m_pHiddenList = NULL; m_pbQuit = NULL; } LMyBrowse::~LMyBrowse() { } void LMyBrowse::AddLEADListItem(L_TCHAR L_FAR* pszFilename, pFILEINFO pFileInfo, LBitmapBase L_FAR* pLBitmap) { CString FileTitle; CString Temp; L_INT n; L_INT nRet; if(!m_pImgList) return; //add data to the list Temp = pszFilename; n = Temp.ReverseFind('\\'); n++; FileTitle = Temp.Right(Temp.GetLength()-n); if (m_pHiddenList) m_pHiddenList->AddString(pszFilename); LILITEM Item; Item.uStructSize = sizeof(LILITEM); Item.uMask = LILITEM_BITMAP | LILITEM_TEXT | LILITEM_DATA | LILITEM_SELECTED; Item.pBitmap = pLBitmap->GetHandle(); Item.pText = (L_TCHAR L_FAR*)(LPCTSTR)FileTitle; Item.lData = pFileInfo->PageNumber; Item.bSelected = FALSE; nRet = m_pImgList->Insert((pLILITEM)&Item); if(nRet == SUCCESS) { nRet = m_pImgList->GetItemCount(); m_pImgList->EnsureVisible(nRet - 1); } } L_INT LMyBrowse::BrowseDirCallBack(LBitmapBase L_FAR* pLBitmap, L_TCHAR L_FAR* pszFilename, pFILEINFO pFileInfo, L_INT nStatus, L_INT nPercent) { MSG msg; // are there any messages in the queue (like a button being pressed) ? while( PeekMessage(&msg,NULL, 0, 0, PM_REMOVE) ) { TranslateMessage( &msg ); /* Translates virtual key codes. */ DispatchMessage( &msg ); /* Dispatches message to window. */ } // we have a thumbnail, do something with it if(nStatus == SUCCESS) { if(m_pImgList) AddLEADListItem(pszFilename, pFileInfo, pLBitmap); } else if(nStatus == BROWSE_LOADING) { // imaging being loaded ; } if(!m_pbQuit) return ERROR_USER_ABORT; if(*m_pbQuit) return ERROR_USER_ABORT; return SUCCESS ; } ////////////// Custom LFile for browsing ////////////// void CBrowseDlg::OnClose() { if(m_bBrowsing) { m_bQuit = TRUE; return; } CDialog::OnClose(); } void CBrowseDlg::OnPaletteChanged(CWnd* pFocusWnd) { if(::IsWindow(m_ImgList.m_hWnd)) ::SendMessage(m_ImgList.m_hWnd, WM_PALETTECHANGED, (WPARAM)pFocusWnd->m_hWnd, 0); }