⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedlgex.cpp

📁 押下【排序输出】
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		if(m_bNewPage)
		{
			tc.pszText="新建";
			m_wndTab.InsertItem(iPage++,&tc);
		}

		tc.pszText="现存";
		m_wndTab.InsertItem(iPage++,&tc);
		
		tc.pszText="最新";
		m_wndTab.InsertItem(iPage++,&tc);
	}

	pFD->CenterWindow();
	pFD->SetWindowText(m_strCaption);

	//-----------------------------------------
	// Set dilaog icons:
	//-----------------------------------------
	if (m_hIconSmall!=NULL)
		pFD->SetIcon(m_hIconSmall,FALSE);

	if (m_hIconBig!=NULL)
		pFD->SetIcon(m_hIconBig,TRUE);

	//------------------------------------------
	// Setup parent window proc:
	//------------------------------------------
	m_wndProc=(WNDPROC)SetWindowLong(pFD->m_hWnd, GWL_WNDPROC, 
		(long)CFileDlgEx::WindowProcNew);
}
//******************************************************************************************
void CFileDlgEx::OnTabSelchange() 
{
	int nPage = m_wndTab.GetCurSel();
	if (!m_bNewPage)
	{
		nPage ++;
	}

	switch (nPage)
	{
	case 0:
		m_nPage = FileDlgExNew;
		break;

	case 1:
		m_nPage = FileDlgExOpen;
		break;

	case 2:
		m_nPage = FileDlgExRecent;
		break;

	default:
		ASSERT (FALSE);
	}

	//---------------------
	// Show/hide file list:
	//---------------------
	CWnd* pWnd = GetParent();
	ASSERT (pWnd != NULL);

	CWnd* pWndChild = pWnd->GetWindow (GW_CHILD);
	while (pWndChild != NULL)
	{
		TCHAR szClass [256];
		::GetClassName (pWndChild->GetSafeHwnd (), szClass, 255);

		CString strClass = szClass;

		if (strClass.CompareNoCase (_T("SHELLDLL_DefView")) == 0)
		{
			pWndChild->ShowWindow (m_nPage == FileDlgExOpen ? SW_SHOW : SW_HIDE);
			break;
		}

		pWndChild = pWndChild->GetNextWindow ();
	}

	//--------------------------
	// Show/hide other controls:
	//--------------------------
	for (POSITION pos = m_lstFDControls.GetHeadPosition (); pos != NULL;)
	{
		pWnd = CWnd::FromHandle (m_lstFDControls.GetNext (pos));
		ASSERT (pWnd != NULL);

		pWnd->ShowWindow(m_nPage == FileDlgExOpen ? SW_SHOW : SW_HIDE);
	}

	m_wndNewList.ShowWindow (m_nPage == FileDlgExNew ? SW_SHOW : SW_HIDE);
	m_wndRecentList.ShowWindow (m_nPage == FileDlgExRecent ? SW_SHOW : SW_HIDE);
}
//***************************************************************************************
void CFileDlgEx::OnItemDblClick ()
{
	ASSERT (m_nPage != FileDlgExOpen);

	CListCtrl& list = (m_nPage == FileDlgExRecent) ? m_wndRecentList : m_wndNewList;
	int iSelIndex = list.GetNextItem (-1, LVNI_ALL | LVNI_SELECTED);

	if (iSelIndex == -1)
	{
		return;
	}

	if (m_nPage == FileDlgExRecent)
	{
		CString strPath = list.GetItemText (iSelIndex, 1);
		CString strName = list.GetItemText (iSelIndex, 0);

		if (strPath.IsEmpty ())
		{
			m_strRecentFilePath = strName;
		}
		else
		{
			m_strRecentFilePath = strPath;
			m_strRecentFilePath += _T('\\');
			m_strRecentFilePath += strName;
		}
	}
	else
	{
		ASSERT (m_nPage == FileDlgExNew);
		m_iNewItemIndex = iSelIndex;
	}
	
	CDialog* pWnd = (CDialog*) GetParent();
	ASSERT (pWnd != NULL);

	pWnd->EndDialog (IDOK);
}
//****************************************************************************************
void CFileDlgEx::CollectControls ()
{
	CWnd* pWnd = GetParent();
	ASSERT (pWnd != NULL);

	CRect rectList (0, 0, 0, 0);

	CWnd* pWndChild = pWnd->GetWindow (GW_CHILD);
	while (pWndChild != NULL)
	{
		BOOL bIsFileList = FALSE;

		UINT uiID = pWndChild->GetDlgCtrlID();
		TCHAR szClass [256];
		::GetClassName (pWndChild->GetSafeHwnd (), szClass, 255);

		CString strClass = szClass;

		CRect rectCtl;
		pWndChild->GetClientRect (rectCtl);
		pWndChild->MapWindowPoints (pWnd, rectCtl);

		if (strClass.CompareNoCase (_T("SHELLDLL_DefView")) == 0)
		{
			rectList.left = rectCtl.left;
			rectList.right = rectCtl.right;
			rectList.bottom = rectCtl.bottom - 10;

			bIsFileList = TRUE;
		}

		if (strClass.CompareNoCase (_T("ToolbarWindow32")) == 0)
		{
			rectList.top = rectCtl.top;
		}

		if ((((strClass.CompareNoCase (_T("BUTTON")) != 0) ||
			uiID != IDOK &&
			uiID != IDCANCEL &&
			uiID != pshHelp) &&
			pWndChild->GetStyle () & WS_VISIBLE) &&
			uiID != iTabCtrlId &&
			uiID != iNewListCtrlId &&
			uiID != iRecentListCtrlId &&
			!bIsFileList)
		{
			m_lstFDControls.AddTail (pWndChild->GetSafeHwnd ());
		}

		pWndChild = pWndChild->GetNextWindow ();
	}

	m_wndNewList.MoveWindow (rectList);
	m_wndRecentList.MoveWindow (rectList);

	OnTabSelchange();
}
//**************************************************************************************
void CFileDlgEx::AddNewItem (LPCTSTR lpszName, LPCTSTR lpszExt, int iIconIndex)
{
	m_lstNewItems.AddTail(new CNewItemInfo (lpszName, lpszExt, iIconIndex));
}
//**************************************************************************************
void CFileDlgEx::SetDlgIcon (HICON hIconBig, HICON hIconSmall/* = NULL*/)
{
	m_hIconBig = hIconBig;
	m_hIconSmall = (hIconSmall == NULL) ? m_hIconBig : hIconSmall;
}
//**************************************************************************************
void CFileDlgEx::CollectRecentFiles()
{
	while(!m_FileList.IsEmpty())
		m_FileList.RemoveHead();	

	HKEY  hKey;
	LONG  hRes;
	CString path(_T("SOFTWARE\\Program of F.R.Wen\\"));
	path+=AfxGetApp()->m_pszAppName;
	// open or create register by path
	hRes=RegCreateKeyEx(HKEY_CURRENT_USER,
			path,0,NULL,
			REG_OPTION_NON_VOLATILE,
			KEY_ALL_ACCESS,
			NULL,&hKey,
			NULL);
	if(hRes==ERROR_SUCCESS) 	
	{   // if open or create success then search recently file
		CHAR  achValue[MAX_PATH]; 
		DWORD cchValue=MAX_PATH;
		BYTE bData[MAX_PATH];
		DWORD bcData=MAX_PATH;

		RegQueryInfoKey(hKey,NULL,NULL,NULL, 
			NULL,NULL,NULL,&nNum,NULL,
			NULL,NULL,NULL);

		for(DWORD i=0;i<nNum;i++)
		{
            achValue[0]='\0';
			cchValue=MAX_PATH;
			hRes=RegEnumValue(hKey,i,achValue, 
                &cchValue,NULL,NULL,bData,&bcData);
			if(hRes!=ERROR_SUCCESS){
				i--;
				continue;
			}
			CString strtemp(TEXT(bData));
			m_FileList.AddTail(strtemp);
		}		
	}
	else // if open or create fail then return directly
	{
		return;
	}
	return;
}
//**************************************************************************************
int CFileDlgEx::DoModal()
{	
	// add default filter based on AddNewItem()
	CString strAllFilter(_T(""));
	CString strFilter(m_ofn.lpstrFilter);
	for(POSITION pos=m_lstNewItems.GetHeadPosition();pos!=NULL;)
	{
		CNewItemInfo* pInfo=(CNewItemInfo*)m_lstNewItems.GetNext(pos);
		strAllFilter += pInfo->m_strFileDescription;
		strAllFilter += _T(" (*.");
		strAllFilter += pInfo->m_strExtName;
		strAllFilter += _T(")");
		strAllFilter += (TCHAR)'\0';
		strAllFilter += _T("*.");
		strAllFilter += pInfo->m_strExtName;
		strAllFilter += (TCHAR)'\0';
	}
	strAllFilter += _T("All Files (*.*)");
	strAllFilter += (TCHAR)'\0';
	strAllFilter += _T("*.*");
	strAllFilter += (TCHAR)'\0';
	strAllFilter += strFilter;
	m_ofn.lpstrFilter=strAllFilter;

	int nResult=CFileDialog::DoModal();

	// update recently file list
	if(nResult==IDOK&&GetPage()==CFileDlgEx::FileDlgExOpen)
	{
		if(m_FileList.Find(GetPathName())==NULL)
		{
			if(nNum>=MAX_NUM)
				m_FileList.RemoveHead();
			m_FileList.AddTail(GetPathName());
		}

		// write recently file to registery
		HKEY  hKey;
		LONG  hRes;
		CString path(_T("SOFTWARE\\Program of F.R.Wen\\"));
		path+=AfxGetApp()->m_pszAppName;
		// open or create register by path
		hRes=RegCreateKeyEx(HKEY_CURRENT_USER,
			path,0,NULL,
			REG_OPTION_NON_VOLATILE,
			KEY_ALL_ACCESS,
			NULL,&hKey,NULL);
		int i=0;
		POSITION pos=m_FileList.GetHeadPosition();
		while(pos!=NULL)
		{
			CString cur=m_FileList.GetNext(pos);
			CString lpSubKey;
			lpSubKey.Format("File%d",i);
			unsigned char tmp[256];
			sprintf((char *)tmp,"%s",cur);
			DWORD size=cur.GetLength()+1;
			RegSetValueEx(hKey,(LPCTSTR)lpSubKey,0,REG_SZ,tmp,size);
			i++;
		}
		RegCloseKey(hKey);
	}	
	
	return nResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -