Click here to Skip to main content
15,887,350 members
Articles / Web Development / HTML

A Comprehensive CE Class Library to Replace ATL and MFC

Rate me:
Please Sign up or sign in to vote.
4.48/5 (14 votes)
4 Oct 2000CPOL 279.3K   998   70  
A collection of classes for CE that do not use ATL or MFC, plus an FTP client, database viewer, and sample application that solves beam deflection equations.
#include "StdAfx.h"
#include "PropertyDlg.h"
#include "Process.h"

#include <celabel.h>
#include <aygshell.h>

extern void FormatDateTime(FILETIME ft, LPTSTR sz, SYSTEMTIME* pT);
extern OSVERSIONINFO g_osvi;

///////////////////////////////////////////////////////////////////////////////

CeFtpPage::CeFtpPage():
	CeTabPage(IDD_SITE_PROPERTIES, _T("Site"))
{
}

BOOL CeFtpPage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_LEFT;

	m_labelName.SetSpecialStyle( CeLabelEdit::LESS_UNDERLINE );
	m_labelName.ReplaceWindow(IDC_EDITNAME, m_hWnd, dwStyle);
	m_labelName.SetWindowText(m_site.m_strName);
	if (!m_site.m_strName.IsEmpty())
		m_labelName.SetReadOnly();

	m_labelIP.SetSpecialStyle( CeLabelEdit::LESS_UNDERLINE );
	m_labelIP.ReplaceWindow(IDC_EDITIP, m_hWnd, dwStyle);
	m_labelIP.SetWindowText(m_site.m_strAddress);

	m_labelUser.SetSpecialStyle( CeLabelEdit::LESS_UNDERLINE );
	m_labelUser.ReplaceWindow(IDC_EDITUSER, m_hWnd, dwStyle);
	m_labelUser.SetWindowText(m_site.m_strUser);

	m_labelPassword.SetSpecialStyle( CeLabelEdit::LESS_UNDERLINE );
	m_labelPassword.ReplaceWindow(IDC_EDITPASS, m_hWnd, dwStyle|ES_PASSWORD);
	m_labelPassword.SetWindowText(m_site.m_strPassword);

	Button_SetCheck(GetDlgItem(IDC_ANON), (m_site.m_bAnon) ? BST_CHECKED: BST_UNCHECKED);
	Button_SetCheck(GetDlgItem(IDC_PASSIVE),  (m_site.m_bPassive) ? BST_CHECKED: BST_UNCHECKED);

	m_mgr.Manage(m_labelName, AL_ADJUST_WIDTH);
	m_mgr.Manage(m_labelIP, AL_ADJUST_WIDTH);
	m_mgr.Manage(m_labelUser, AL_ADJUST_WIDTH);
	m_mgr.Manage(m_labelPassword, AL_ADJUST_WIDTH);

	return bRet;
}

void CeFtpPage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	bHandled = true;
	CeTabPage::OnSize(nType, cx, cy, bHandled);
}


BOOL CeFtpPage::OnCommand(WPARAM wParam, LPARAM lParam, bool& bHandled)
{
	BOOL bRet = CeDialog::OnCommand(wParam, lParam, bHandled);

	WORD wNotify = HIWORD(wParam);	// notification code 
	WORD wId	 = LOWORD(wParam);	// item, control, or accelerator identifier 
	HWND hwndCtl = (HWND) lParam;	// handle of control 

	bHandled = true;

	if (hwndCtl != NULL)
	{
		if (IDC_ANON == wId && BN_CLICKED == wNotify)
		{
			if (BST_CHECKED == Button_GetCheck(hwndCtl))
			{
				m_labelUser.SetWindowText(_T("anonymous"));
				m_labelPassword.SetWindowText(_T("anonymous@anon.com"));
			}
			else
			{
				m_labelUser.SetWindowText(_T(""));
				m_labelPassword.SetWindowText(_T(""));
			}
		}
	}

	return TRUE;
}


void CeFtpPage::OnApply()
{
	m_site.m_strName = CeString(GetDlgItem(IDC_EDITNAME));
	if (m_site.m_strName.IsEmpty() || m_site.m_strName == _T("<...>"))
		return;

	m_site.m_strAddress = CeString(GetDlgItem(IDC_EDITIP));
	if (m_site.m_strAddress == _T("<...>"))
		m_site.m_strAddress.Empty();

	m_site.m_strUser = CeString(GetDlgItem(IDC_EDITUSER));
	if (m_site.m_strUser == _T("<...>"))
		m_site.m_strUser.Empty();

	m_site.m_strPassword = CeString(GetDlgItem(IDC_EDITPASS));
	if (m_site.m_strPassword == _T("<...>"))
		m_site.m_strPassword.Empty();

	m_site.m_bAnon = (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_ANON)));
	m_site.m_bPassive = (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_PASSIVE)));

	m_site.Update();
	
	CeDialog::OnOK();
}

///////////////////////////////////////////////////////////////////////////////

extern BOOL GetShFileInfo(LPCTSTR lpszName, DWORD dwAttrib, SHFILEINFO & shinfo, int nFlags, bool bLocal);

///////////////////////////////////////////////////////////////////////////////

CeFilePage::CeFilePage():
	CeTabPage(IDD_FILE_PROPERTIES, _T("General"))
{
	m_bLocal = true;
	m_bChangedAttributes = false;
}


void CeFilePage::SetFile(CeString & strDir, WIN32_FIND_DATA & findData, bool bLocal)
{
	m_finddata = findData;
	m_bLocal = bLocal;
	m_strDirectory = strDir;

	CeString str = strDir;

	if (! (m_finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
		str += m_finddata.cFileName;

	UINT nFlags =
		SHGFI_ICON |
		SHGFI_LARGEICON |
		SHGFI_TYPENAME |	// type name (e.g., CPP File)
		SHGFI_DISPLAYNAME;	// display name (no extension)

	if (! bLocal)
		nFlags |= SHGFI_USEFILEATTRIBUTES;

	GetShFileInfo(str, m_finddata.dwFileAttributes, m_shinfo, nFlags, bLocal);
}


bool CeFilePage::IsShortcut() const
{
	return (_tcscmp(m_shinfo.szTypeName, _T("Shortcut")) == 0);
}


BOOL CeFilePage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	// get the files properties and display them
	SetDlgItemText(IDC_TYPE, m_shinfo.szTypeName);
	SetDlgItemText(IDC_NAME, m_finddata.cFileName);

	if (! m_bLocal)
		::SendMessage(GetDlgItem(IDC_NAME), EM_SETREADONLY, TRUE, 0);

	FILETIME ft = m_finddata.ftLastAccessTime;
	if (m_bLocal)
		// need to convert time to local displayable format
		FileTimeToLocalFileTime(&ft, &ft);
	TCHAR sz[64];
	FormatDateTime(ft, sz, NULL);
	SetDlgItemText(IDC_MODIFIED, sz);

	// set the file icon....
	::SendMessage(GetDlgItem(IDC_FILEICON), STM_SETIMAGE, IMAGE_ICON, (LPARAM)m_shinfo.hIcon);

#ifdef _WIN32_WCE
	CeString str;
	str.Format(_T("0x%08x"), m_finddata.dwOID);
	SetDlgItemText(IDC_OID, str);
#endif

	// Set the attributes
	Button_SetCheck(GetDlgItem(IDC_CHECK1),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 1: 0);
	Button_SetCheck(GetDlgItem(IDC_CHECK2),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) ? 1: 0);
	Button_SetCheck(GetDlgItem(IDC_CHECK4),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ? 1: 0);
	Button_SetCheck(GetDlgItem(IDC_CHECK5),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? 1: 0);
	Button_SetCheck(GetDlgItem(IDC_CHECK6),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ? 1: 0);
#ifdef _WIN32_WCE
	Button_SetCheck(GetDlgItem(IDC_CHECK3),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_INROM) ? 1: 0);
	Button_SetCheck(GetDlgItem(IDC_CHECK7),	(m_finddata.dwFileAttributes & FILE_ATTRIBUTE_ROMMODULE) ? 1: 0);
#endif
	if (! m_bLocal || (m_finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
	{
		// can't change attributes on FTP connections
		::EnableWindow(GetDlgItem(IDC_CHECK1), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK2), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK3), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK4), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK5), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK6), FALSE);
		::EnableWindow(GetDlgItem(IDC_CHECK7), FALSE);
	}

	m_mgr.Manage(GetDlgItem(IDC_NAME), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_MODIFIED), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_TYPE), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_OID),  AL_ADJUST_WIDTH);

	return bRet;
}

void CeFilePage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	bHandled = true;
	CeTabPage::OnSize(nType, cx, cy, bHandled);
}

BOOL CeFilePage::OnCommand(WPARAM wParam, LPARAM lParam, bool& bHandled)
{
	BOOL bRet = CeTabPage::OnCommand(wParam, lParam, bHandled);

	WORD wNotify = HIWORD(wParam);	// notification code 
	WORD wId	 = LOWORD(wParam);	// item, control, or accelerator identifier 
	HWND hwndCtl = (HWND) lParam;	// handle of control 

	bHandled = true;

	if (hwndCtl != NULL)
	{
		switch (wId)
		{
		case IDC_CHECK1:
		case IDC_CHECK4:
		case IDC_CHECK5:
		case IDC_CHECK6:
			if (wNotify == BN_CLICKED)
				m_bChangedAttributes = true;
		}
	}

	return bRet;
}


void CeFilePage::OnApply()
{
	CeString str;

	if (m_bChangedAttributes && m_bLocal)
	{
		str = m_strDirectory;
		if (! (m_finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
			str += m_finddata.cFileName;

		DWORD dwAttrib = ::GetFileAttributes(str);

		if (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_CHECK1)))
			dwAttrib |= FILE_ATTRIBUTE_READONLY;
		else
			dwAttrib &= ~FILE_ATTRIBUTE_READONLY;

		if (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_CHECK4)))
			dwAttrib |= FILE_ATTRIBUTE_HIDDEN;
		else
			dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;

		if (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_CHECK5)))
			dwAttrib |= FILE_ATTRIBUTE_SYSTEM;
		else
			dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;

		if (BST_CHECKED == Button_GetCheck(GetDlgItem(IDC_CHECK6)))
			dwAttrib |= FILE_ATTRIBUTE_ARCHIVE;
		else
			dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;

		if (! ::SetFileAttributes(str, dwAttrib))
		{
			DWORD dw = GetLastError();
			MessageBox(_T("Failed to change file attributes"));
		}
		else
		{
			m_finddata.dwFileAttributes = dwAttrib;
		}
	}

	str.GetWindowText(GetDlgItem(IDC_NAME));
	if (m_bLocal && _tcscmp(str, m_finddata.cFileName) != 0)
	{
		CeString strNew = m_strDirectory;
		CeString strOld = m_strDirectory;

		strNew += str;
		strOld += m_finddata.cFileName;

		if (! MoveFile(strOld, strNew))
		{
			DWORD dwErr = GetLastError();
			MessageBox(_T("Rename failed!"), _T(""), MB_OK);
		}
		else
		{
			// update the properties we changed...
			_tcscpy(m_finddata.cFileName, str);
		}
	}

	CeTabPage::OnOK();
}


///////////////////////////////////////////////////////////////////////////////

CeShortcutPage::CeShortcutPage():
	CeTabPage(IDD_SHORTCUT_PROPERTIES, _T("Shortcut"))
{
}

void CeShortcutPage::SetFile(CeString & strDir, WIN32_FIND_DATA & findData)
{
	TCHAR szTarget[MAX_PATH];

	m_finddata = findData;
	m_strDirectory = strDir;

	CeString str = m_strDirectory;
		str += m_finddata.cFileName;

	TCHAR szBuf[MAX_PATH];
	_tcscpy(szBuf, str);

	BOOL bRet;
	bRet = ::SHGetShortcutTarget(szBuf, szTarget, 128);

	//
	// This call always returns an extra character, handle it
	if (bRet)
	{
		LPTSTR lpsz = szTarget;
		for (int ii = 0; *lpsz != 0; lpsz++)
		{
			if (*lpsz == _T('"'))
				continue;

			if (_istspace(*lpsz))
				break;

			szTarget[ii] = *lpsz;
			ii++;
		}
		szTarget[ii] = 0;

		int nFlags = SHGFI_TYPENAME | SHGFI_ICON | SHGFI_LARGEICON; // | SHGFI_DISPLAYNAME;

		GetShFileInfo(szTarget, 0, m_shinfo, nFlags, TRUE);
	}
}

BOOL CeShortcutPage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	TCHAR szTarget[128];

	SetDlgItemText(IDC_TYPE, m_shinfo.szTypeName);

	CeString str = m_strDirectory;
		str += m_finddata.cFileName;

	::SHGetShortcutTarget(str, szTarget, 128);
	SetDlgItemText(IDC_TARGET, szTarget);

	m_mgr.Manage(GetDlgItem(IDC_TYPE), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_TARGET), AL_ADJUST_WIDTH);

	return bRet;
}

void CeShortcutPage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	bHandled = true;
	CeTabPage::OnSize(nType, cx, cy, bHandled);
}


void CeShortcutPage::OnApply()
{
	CeString str = m_strDirectory;
		str += m_finddata.cFileName;

	CeString strTarget( GetDlgItem(IDC_TARGET) );

	// This call always returns an extra character, handle it
	::SHCreateShortcut((LPTSTR) (LPCTSTR) str, (LPTSTR) (LPCTSTR) strTarget);
}


///////////////////////////////////////////////////////////////////////////////


CeSystemPage::CeSystemPage():
	CeTabPage(IDD_SYSTEM_PROPERTIES, _T("System"))
{
}

BOOL CeSystemPage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	m_groupVersion.Subclass(GetDlgItem(IDC_OS));
	m_groupSystem.Subclass(GetDlgItem(IDC_HW));

	ASSERT(g_osvi.dwPlatformId == VER_PLATFORM_WIN32_CE);

	CeString strTmp;
	strTmp.Format(_T("%d.%02d Build %d"),
		(int) g_osvi.dwMajorVersion,
		(int) g_osvi.dwMinorVersion,
		(int) g_osvi.dwBuildNumber);

	SetDlgItemText(IDC_VERSION, strTmp);

	SYSTEM_INFO si;
	GetSystemInfo(&si);

	switch (si.dwProcessorType)
	{
	case PROCESSOR_INTEL_386:		strTmp = _T("Intel 386"); break;
	case PROCESSOR_INTEL_486:		strTmp = _T("Intel 486"); break;
	case PROCESSOR_INTEL_PENTIUM:	strTmp = _T("Intel Pentium"); break;
	case PROCESSOR_MIPS_R4000:		strTmp = _T("MIPS R4000"); break;
	case PROCESSOR_HITACHI_SH3:		strTmp = _T("Hitachi SH3"); break;
	case PROCESSOR_HITACHI_SH4:		strTmp = _T("Hitachi SH4"); break;
	case PROCESSOR_STRONGARM:		strTmp = _T("Strong Arm"); break;
	case PROCESSOR_ARM720:			strTmp = _T("Arm 720"); break;
	case PROCESSOR_ARM820:			strTmp = _T("Arm 820"); break;
	case PROCESSOR_ARM920:			strTmp = _T("Arm 920"); break;
#ifdef PROCESSOR_ARM_7TDMI
	case PROCESSOR_ARM_7TDMI:		strTmp = _T("Arm 7TDMI"); break;
#endif
// Currently no handhelds support these...

//	case PROCESSOR_PPC_403:			strTmp = _T("PowerPC 403"); break;
//	case PROCESSOR_PPC_821:			strTmp = _T("PowerPC 821"); break;
	default:
		break;
	}

	SetDlgItemText(IDC_PROCESSOR, strTmp);

	//si.dwPageSize;
	//si.lpMinimumApplicationAddress, si.lpMaximumApplicationAddress;
	//si.dwAllocationGranularity;

	STORE_INFORMATION storeinfo;
	if (GetStoreInformation(&storeinfo))
	{
		strTmp.SetULong(storeinfo.dwFreeSize);
		SetDlgItemText(IDC_FREE, strTmp);
		strTmp.SetULong(storeinfo.dwStoreSize);
		SetDlgItemText(IDC_ALLOC, strTmp);
	}

	DWORD dwStorePages;
	DWORD dwRamPages;
	DWORD dwPageSize;
	if (GetSystemMemoryDivision(&dwStorePages, &dwRamPages, &dwPageSize))
	{
		strTmp.SetULong(dwStorePages * dwPageSize + dwRamPages * dwPageSize);
		SetDlgItemText(IDC_TOTAL, strTmp);
		strTmp.SetULong(dwRamPages * dwPageSize);
		SetDlgItemText(IDC_RAM, strTmp);
		strTmp.SetULong(dwStorePages * dwPageSize);
		SetDlgItemText(IDC_STORE, strTmp);
		strTmp.SetULong(dwPageSize);
		SetDlgItemText(IDC_PAGESIZE, strTmp);
	}

	m_mgr.Manage(m_groupVersion, AL_ADJUST_WIDTH);
	m_mgr.Manage(m_groupSystem, AL_ADJUST_WIDTH);

	m_mgr.Manage(GetDlgItem(IDC_PROCESSOR), AL_ADJUST_WIDTH);

	m_mgr.Manage(GetDlgItem(IDC_VERSION), AL_ADJUST_WIDTH);

	m_mgr.Manage(GetDlgItem(IDC_FREE), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_ALLOC), AL_ADJUST_WIDTH);

	m_mgr.Manage(GetDlgItem(IDC_TOTAL), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_RAM), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_STORE), AL_ADJUST_WIDTH);
	m_mgr.Manage(GetDlgItem(IDC_PAGESIZE), AL_ADJUST_WIDTH);

	return bRet;
}

void CeSystemPage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	bHandled = true;
	CeTabPage::OnSize(nType, cx, cy, bHandled);
}


///////////////////////////////////////////////////////////////////////////////

CeTasksPage::CeTasksPage() :
	CeTabPage(IDD_TASK_PROPERTIES, _T("Tasks"))
{
}

BOOL CeTasksPage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	HWND hList = GetDlgItem(IDC_LIST);
	ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT);

	// Add the columns for the values
	LV_COLUMN lvc;

	lvc.mask = LVCF_TEXT;
	lvc.pszText = _T("Item");
	ListView_InsertColumn(hList, 0, &lvc);
	lvc.pszText = _T("Value");
	ListView_InsertColumn(hList, 1, &lvc);

	PROCESS_DESC_LIST plist;
	if ( GetProcessList(&plist) )
	{
		WCHAR wszBuf[128];

		LV_ITEM lvi;

		for (int ii = 0; ii < plist.m_nProcesses; ii++)
		{
			lvi.mask = LVIF_TEXT | LVIF_PARAM;
			lvi.iItem = ii;
			lvi.iSubItem = 0;
			lvi.lParam = plist.m_pProcessList[ii].m_dwId;
			wsprintfW(wszBuf, L"0x%08x", plist.m_pProcessList[ii].m_dwId);
			lvi.pszText = wszBuf;
			lvi.iItem = ListView_InsertItem(hList, &lvi);

			lvi.mask = LVIF_TEXT;
			lvi.iSubItem = 1;
			lvi.pszText = plist.m_pProcessList[ii].m_bstrProcess;
			ListView_SetItem(hList, &lvi);
		}
	}

	FreeProcessList(&plist);

	ListView_SetColumnWidth(hList, 0, LVSCW_AUTOSIZE_USEHEADER);
	ListView_SetColumnWidth(hList, 1, LVSCW_AUTOSIZE_USEHEADER);

	m_mgr.Manage(hList, AL_ADJUST_SIZE);

	return bRet;
}

void CeTasksPage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	HWND hList = GetDlgItem(IDC_LIST);

	ListView_SetColumnWidth(hList, 0, LVSCW_AUTOSIZE_USEHEADER);
	ListView_SetColumnWidth(hList, 1, LVSCW_AUTOSIZE_USEHEADER);

	bHandled = true;

//	Note: skip over CeScrollDialog implementation, don't need scrolling
//  just a sized list box.
	CeDialog::OnSize(nType, cx, cy, bHandled);
}

///////////////////////////////////////////////////////////////////////////////

CeVersionPage::CeVersionPage():
	CeTabPage(IDD_VERSION_PROPERTIES, _T("Version"))
{
}


BOOL CeVersionPage::OnInitDialog()
{
	BOOL bRet = CeTabPage::OnInitDialog();

	SetDlgItemText(IDC_VERSION, m_pVersion->m_wszFileVersion);
	SetDlgItemText(IDC_DESC, m_pVersion->m_wszFileDescription);
	SetDlgItemText(IDC_COPYRIGHT, m_pVersion->m_wszFileCopyright);

	HWND hList = GetDlgItem(IDC_LIST);

	// Add the columns for the values
	LV_COLUMN lvc;

	lvc.mask = LVCF_TEXT;
	lvc.pszText = _T("Item");
	ListView_InsertColumn(hList, 0, &lvc);
	lvc.pszText = _T("Value");
	ListView_InsertColumn(hList, 1, &lvc);

	LV_ITEM lvi;

	// Add the Values
	lvi.mask = LVIF_TEXT;
	lvi.iItem = 0;
	lvi.iSubItem = 0;
	lvi.pszText = _T("Company Name");
	ListView_InsertItem(hList, &lvi);

	lvi.pszText = m_pVersion->m_wszCompanyName;
	lvi.iSubItem = 1;
	ListView_SetItem(hList, &lvi);
//
	lvi.mask = LVIF_TEXT;
	lvi.iItem = 1;
	lvi.iSubItem = 0;
	lvi.pszText = _T("Internal Name");
	ListView_InsertItem(hList, &lvi);

	lvi.pszText = m_pVersion->m_wszInternalName;
	lvi.iSubItem = 1;
	ListView_SetItem(hList, &lvi);

//
	lvi.mask = LVIF_TEXT;
	lvi.iItem = 2;
	lvi.iSubItem = 0;
	lvi.pszText = _T("Original name");
	ListView_InsertItem(hList, &lvi);

	lvi.pszText = m_pVersion->m_wszOriginalFilename;
	lvi.iSubItem = 1;
	ListView_SetItem(hList, &lvi);
//
	lvi.mask = LVIF_TEXT;
	lvi.iItem = 3;
	lvi.iSubItem = 0;
	lvi.pszText = _T("Product Name");
	ListView_InsertItem(hList, &lvi);

	lvi.pszText = m_pVersion->m_wszProductName;
	lvi.iSubItem = 1;
	ListView_SetItem(hList, &lvi);
//
	lvi.mask = LVIF_TEXT;
	lvi.iItem = 4;
	lvi.iSubItem = 0;
	lvi.pszText = _T("Product Version");
	ListView_InsertItem(hList, &lvi);

	lvi.pszText = m_pVersion->m_wszProductVerion;
	lvi.iSubItem = 1;
	ListView_SetItem(hList, &lvi);

	ListView_SetColumnWidth(hList, 0, LVSCW_AUTOSIZE_USEHEADER);
	ListView_SetColumnWidth(hList, 1, LVSCW_AUTOSIZE_USEHEADER);

	m_mgr.Manage(hList, AL_ADJUST_SIZE);

	return bRet;
}

void CeVersionPage::OnSize( UINT nType, int cx, int cy, bool& bHandled )
{
	m_mgr.OnSize(nType, cx, cy);

	bHandled = true;
	CeTabPage::OnSize(nType, cx, cy, bHandled);
}


///////////////////////////////////////////////////////////////////////////////

CePropertyDlg::CePropertyDlg():
	m_pageFtp(),
	m_pageFile(),
	m_pageShortcut(),
	m_pageSystem()
{
	m_bGeneral = false;
}

CePropertyDlg::~CePropertyDlg()
{
}

void CePropertyDlg::AddFtpSiteProperty(CeFtpSite& site)
{
	m_pageFtp.SetFtp(site);
	m_sheet.AddPage(&m_pageFtp);
}

void CePropertyDlg::AddFileProperty(CeString & strDir, WIN32_FIND_DATA & fd, bool bLocal)
{
	m_bGeneral = true;

	m_pageFile.SetFile(strDir, fd, bLocal);
	m_sheet.AddPage(&m_pageFile);

	DWORD dwVersion = g_osvi.dwMajorVersion * 100 + g_osvi.dwMinorVersion;

	// shortcuts are broken prior to version 2.10 version of Windows CE shell
	// don't allow shortcut tracing prior to that version
	if (bLocal && m_pageFile.IsShortcut() && dwVersion >= 210)
	{
		m_pageShortcut.SetFile(strDir, fd);
		m_sheet.AddPage(&m_pageShortcut);
	}

	// done if this is a directory
	if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		return;

	// find the extension
	LPCTSTR lpsz = _tcsrchr(fd.cFileName, _T('.'));
	if (lpsz)
	{
		// test for version type files
		if (_tcsicmp(lpsz, L".EXE") == 0 || _tcsicmp(lpsz, L".DLL") == 0 ||
			_tcsicmp(lpsz, L".OCX") == 0 || _tcsicmp(lpsz, L".CPL") == 0)
		{
			CeString str = strDir;
			str += _T('\\');
			str += fd.cFileName;

			CeResource res;
			if (! res.Load(str))
				return;

			DWORD	dwSize;
			HRSRC	hRes = res.FindResource(1, RT_VERSION);
			if (hRes)
			{
				LPVOID	pVoid = res.LoadResource(hRes, dwSize);
				m_pageVersion.m_pVersion = new CeVersionInfo;

				if (pVoid && m_pageVersion.m_pVersion->Load((BYTE*) pVoid))
					m_sheet.AddPage(&m_pageVersion);
			}
		}
	}
}


void CePropertyDlg::AddSystemProperty()
{
	m_sheet.AddPage(&m_pageSystem);
}


void CePropertyDlg::AddTaskProperty()
{
	m_sheet.AddPage(&m_pageTask);
}


BOOL CePropertyDlg::OnInitDialog()
{
	BOOL bRet = CeDialog::OnInitDialog();

	// Fix the child sizes
	HWND hWnd = GetDlgItem(IDC_TABSHEET);
	HFONT hFont = (HFONT) ::SendMessage(hWnd, WM_GETFONT, 0, 0);

	RECT rc;
	::GetWindowRect(hWnd, &rc);
	ScreenToClient(&rc);

	// kill the old window
	::DestroyWindow(hWnd);

	// spread out the border of the tab control so the border
	// isn't visible
	rc.left -= 1;
	rc.right += 2;
	rc.bottom += 3;
	m_sheet.Create(WS_CHILD|WS_VISIBLE, rc, m_hWnd, 12);
	m_sheet.SetFont( hFont, TRUE );

	m_mgr.Manage(m_sheet, AL_ADJUST_SIZE);

#ifdef _WIN32_WCE_POCKETPC
	// Create a Done button and size it.  
	SHINITDLGINFO shidi;
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg = m_hWnd;

	if (! m_bGeneral)
		shidi.dwFlags |= SHIDIF_SIPDOWN;

	SHInitDialog(&shidi);
#endif

	return bRet;
}


void CePropertyDlg::OnSize(UINT nType, int cx, int cy, bool& bHandled)
{
	m_mgr.OnSize(nType, cx, cy);
	CeDialog::OnSize(nType, cx, cy, bHandled);
}


void CePropertyDlg::OnSettingChange( WORD wFlag, LPCTSTR pszSection, bool& bHandled )
{
#if defined(_WIN32_WCE_POCKETPC)
	static SHACTIVATEINFO s_saiDlgBox;

	s_saiDlgBox.cbSize = sizeof s_saiDlgBox;
	SHHandleWMSettingChange(m_hWnd, wFlag, (long) pszSection, &s_saiDlgBox);
	bHandled = true;

#endif
}


void CePropertyDlg::OnTimer( UINT nTimer, bool& bHandled )
{
}


LRESULT CePropertyDlg::OnMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
{
	switch (uMsg)
	{
	case WM_SETFONT:
		m_sheet.SetFont((HFONT) wParam, LOWORD(lParam));
		break;
	}

	return 0;
}


void CePropertyDlg::OnOK()
{
	m_sheet.Apply();

	CeDialog::OnOK();
}


void CePropertyDlg::OnCancel()
{
	m_sheet.Reset();

	CeDialog::OnCancel();
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions