www.pudn.com > afdialer_src.rar > Page5.cpp


/////////////////////////////////////////////////////////////////////// 
// If this program works, it was written by Alexander Fedorov. 
// If not, I don't know who wrote it. 
// mailto:lamer2000@hotmail.com 
// Home Page: http://members.xoom.com/lamer2000/ 
// This file is part of Alexf Dialer. 
// This program is free software; you can redistribute it and/or modify 
// it under the terms of the GNU General Public License as published by 
// the Free Software Foundation; either version 2 of the License, or 
// (at your option) any later version. 
/////////////////////////////////////////////////////////////////////// 
 
// Page5.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "Afd.h" 
#include "Page5.h" 
#include  
#include "imapi.h" 
#include "ModulVer.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
CString GetVersionInfo(PSTR pszFileName) 
{ 
	CString sss; 
	DWORD cbVerInfo, dummy; 
	// How big is the version info? 
	cbVerInfo = GetFileVersionInfoSize(pszFileName, &dummy); 
	if (!cbVerInfo) return sss; 
	// Allocate space to hold the info 
	PBYTE pVerInfo = new BYTE[cbVerInfo]; 
	if (!pVerInfo) return sss; 
	if (!GetFileVersionInfo(pszFileName, 0, cbVerInfo, pVerInfo)) 
	return sss; 
	char * predefResStrings[] = 
	{ 
		"CompanyName", 
		"FileDescription", 
		"FileVersion", 
		"InternalName", 
		"LegalCopyright", 
		"OriginalFilename", 
		"ProductName", 
		"ProductVersion", 
		0 
	}; 
	for (unsigned i=0; predefResStrings[i]; i++) 
	{ 
		char szQueryStr[ 0x100 ]; 
		wsprintf(szQueryStr, "\\StringFileInfo\\040904b0\\%s", 
		predefResStrings[i]); 
		PSTR pszVerRetVal; 
		UINT cbReturn; 
		BOOL fFound; 
		fFound = VerQueryValue(pVerInfo, szQueryStr, 
		(LPVOID *)&pszVerRetVal, &cbReturn); 
		if (fFound) 
		{ 
			if (i != 0) sss += " "; 
			sss += predefResStrings[i]; 
			sss += " "; 
			sss += pszVerRetVal; 
		} 
	} 
	delete []pVerInfo; 
	return sss; 
}  
 
///////////////////////////////////////////////////////////////////////////// 
// CPage5 p roperty page 
 
IMPLEMENT_DYNCREATE(CPage5, CPropertyPage) 
 
CPage5::CPage5() : CPropertyPage(CPage5::IDD) 
{ 
	//{{AFX_DATA_INIT(CPage5) 
	m_sMail = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
CPage5::~CPage5() 
{ 
} 
 
void CPage5::DoDataExchange(CDataExchange* pDX) 
{ 
	CPropertyPage::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CPage5) 
	DDX_Control(pDX, IDC_STATIC_SRC, m_hlSrc); 
	DDX_Control(pDX, IDC_FACE_FRAME, m_wnsFace); 
	DDX_Control(pDX, IDC_STATIC_HOMEPAGE2, m_hlMailList); 
	DDX_Control(pDX, IDC_STATIC_VERSION, m_stVersion); 
	DDX_Control(pDX, IDC_STATIC_MAIL, m_stMail); 
	DDX_Control(pDX, IDC_STATIC_HOMEPAGE, m_stHomePage); 
	DDX_Text(pDX, IDC_EDIT_MAIL, m_sMail); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CPage5, CPropertyPage) 
	//{{AFX_MSG_MAP(CPage5) 
	ON_WM_DESTROY() 
	ON_WM_PAINT() 
	ON_BN_CLICKED(IDC_BUTTON_MAIL, OnButtonMail) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPage5 message handlers 
 
CString GetSysVer() 
{ 
	CString sss; 
	OSVERSIONINFOEX osvi; 
	BOOL bOsVersionInfoEx; 
	// Try calling GetVersionEx using the OSVERSIONINFOEX structure, 
	// which is supported on Windows 2000. 
	// If that fails, try using the OSVERSIONINFO structure. 
	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 
	if( !(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi))) 
	{ 
		// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. 
		osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); 
		if (!GetVersionEx((OSVERSIONINFO*) &osvi)) return sss; 
	} 
	switch (osvi.dwPlatformId) 
	{ 
	case VER_PLATFORM_WIN32_NT: 
		// Test for the product. 
		if (4 >= osvi.dwMajorVersion) sss += "WinNT/"; 
		if (5 == osvi.dwMajorVersion) sss += "Win2k/"; 
		// Test for workstation versus server. 
		/* 
		if(bOsVersionInfoEx) 
		{ 
            if (osvi.wProductType == VER_NT_WORKSTATION) 
				sss += "WStat/"; 
            if (osvi.wProductType == VER_NT_SERVER) 
				sss += "Serv/"; 
		} 
		else 
		*/ 
		{ 
            HKEY hKey; 
            char szProductType[80]; 
            DWORD dwBufLen; 
            RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_QUERY_VALUE, &hKey); 
            RegQueryValueEx(hKey, "ProductType", NULL, NULL, (LPBYTE) szProductType, &dwBufLen); 
            RegCloseKey(hKey); 
            if (0 == lstrcmpi("WINNT", szProductType)) sss += "WStat/"; 
            if (0 == lstrcmpi("SERVERNT", szProductType)) sss += "Serv/"; 
		} 
        break; 
	case VER_PLATFORM_WIN32_WINDOWS: 
		if ((osvi.dwMajorVersion > 4) || ((osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0))) 
			sss += "Win98/"; 
		else sss += "Win95/"; 
		break; 
	case VER_PLATFORM_WIN32s: 
		sss += "Win32s/"; 
		break; 
	} 
	// Display version, service pack (if any), and build number. 
	sss += osvi.szCSDVersion; 
	sss += "/"; 
	sss += L2S(osvi.dwMajorVersion); 
	sss += "."; 
	sss += L2S(osvi.dwMinorVersion); 
	sss += "."; 
	sss += L2S(osvi.dwBuildNumber & 0xFFFF); 
	return sss; 
} 
 
CString GetWindowsVersion() 
{ 
	OSVERSIONINFO osv; 
	osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 
	CString WindowsPlatform; 
	if (GetVersionEx(&osv)) 
	{ 
		// note: szCSDVersion =  service pack  release   
		CString ServiceRelease = osv.szCSDVersion; 
		switch(osv.dwPlatformId) 
		{ 
		case VER_PLATFORM_WIN32s: //Win32s on Windows 3.1. 
			WindowsPlatform = "Microsoft® Windows 3.1(TM)"; 
			break; 
		case VER_PLATFORM_WIN32_WINDOWS: //WIN32 on 95 or 98 
			//determine if Win95 or Win98 
			if (0 == osv.dwMinorVersion) 
			{ 
				WindowsPlatform = "Microsoft® Windows 95(TM) " + ServiceRelease; 
			} 
			else 
			{ 
				WindowsPlatform = "Microsoft® Windows 98(TM) " + ServiceRelease; 
			} 
			break; 
		case VER_PLATFORM_WIN32_NT: //Win32 on Windows NT. 
			WindowsPlatform = "Microsoft® Windows NT(TM) "  + ServiceRelease; 
			break; 
		default: 
			WindowsPlatform = "Failed to get correct Operating System."; 
		} 
		//end switch 
	} 
	//end if 
	return WindowsPlatform; 
} 
 
BOOL CPage5::InitPropertyPage() 
{ 
	m_Bitmap.LoadMappedBitmap(IDB_BGROUND5); 
	m_stVersion.SetColours(	RGB(0x00, 0x00, 0x80), RGB(0x80, 0x00, 0x80), RGB(0x00, 0x00, 0xFF)); 
	m_stMail.SetColours(	RGB(0x00, 0x00, 0x80), RGB(0x80, 0x00, 0x80), RGB(0x00, 0x00, 0xFF)); 
	m_stHomePage.SetColours(RGB(0x00, 0x00, 0x80), RGB(0x80, 0x00, 0x80), RGB(0x00, 0x00, 0xFF)); 
	m_hlMailList.SetColours(RGB(0x00, 0x00, 0x80), RGB(0x80, 0x00, 0x80), RGB(0x00, 0x00, 0xFF)); 
	m_hlSrc.SetColours(RGB(0x00, 0x00, 0x80), RGB(0x80, 0x00, 0x80), RGB(0x00, 0x00, 0xFF)); 
	m_sDefaultLetter = "Please do not remove this line! Program Version: "; 
	m_sDefaultLetter += __DATE__; 
	m_sDefaultLetter += " OS: " + GetSysVer(); 
	{ 
		CModuleVersion ver; 
		m_sDefaultLetter += " RAS Version: "; 
		if (ver.GetFileVersionInfo("Rasapi32.dll")) 
		{ 
			m_sDefaultLetter += L2S(HIWORD(ver.dwFileVersionMS)) + "."; 
			m_sDefaultLetter += L2S(LOWORD(ver.dwFileVersionMS)) + "."; 
			m_sDefaultLetter += L2S(HIWORD(ver.dwFileVersionLS)) + "."; 
			m_sDefaultLetter += L2S(LOWORD(ver.dwFileVersionLS)); 
		} 
		else 
		m_sDefaultLetter += "error"; 
	} 
	{ 
		CModuleVersion ver; 
		m_sDefaultLetter += " Crypt32.dll Version: "; 
		if (ver.GetDLLVersionInfo("crypt32.dll")) 
		{ 
			m_sDefaultLetter += L2S(HIWORD(ver.dwFileVersionMS)) + "."; 
			m_sDefaultLetter += L2S(LOWORD(ver.dwFileVersionMS)) + "."; 
			m_sDefaultLetter += L2S(HIWORD(ver.dwFileVersionLS)) + "."; 
			m_sDefaultLetter += L2S(LOWORD(ver.dwFileVersionLS)); 
		} 
		else 
		m_sDefaultLetter += "error"; 
	} 
	m_sDefaultLetter += "\r\n"; 
	m_sMail = m_sDefaultLetter; 
// version 
	CString sss; sss.LoadString(IDS_LAST_UPDATES); sss += __DATE__; 
	m_stVersion.SetWindowText(sss); 
	m_stVersion.SetURL(_T("http://members.xoom.com/lamer2000/afd.zip")); 
// 
	m_stHomePage.SetURL(_T("http://members.xoom.com/lamer2000/")); 
	m_stMail.SetURL(_T("mailto:lamer2000@hotmail.com")); 
	sss.LoadString(IDS_SRC_INFO); 
	m_hlSrc.SetWindowText(sss); 
	m_hlSrc.SetURL(_T("http://members.xoom.com/lamer2000/msvc/")); 
// 
	sss.LoadString(IDS_JOIN_MAIL_LIST); 
	m_hlMailList.SetWindowText(sss); 
	m_hlMailList.SetURL(_T("http://members.xoom.com/lamer2000/afd/")); 
// midi 
	LPVOID lpv; 
	HRSRC res; 
	HANDLE resh; 
	FILE *fil; 
	CString dir; 
	GetTempPath(MAX_PATH, dir.GetBuffer(MAX_PATH + 1)); 
	dir.ReleaseBuffer(); 
	dir.MakeReverse(); 
	if (0 == dir.Find("\\")) dir = dir.Mid(1, dir.GetLength()); 
	dir.MakeReverse(); 
	dir += "\\tmp666.mid"; 
	HINSTANCE hInst = AfxGetResourceHandle(); 
	res = ::FindResource(hInst, MAKEINTRESOURCE(IDR_MIDIFILE1), "MIDIFILE"); 
	resh = LoadResource(hInst, res); 
	lpv = LockResource(resh); 
	fil = fopen(dir,"wb"); 
	fwrite(lpv,SizeofResource(AfxGetResourceHandle(), res),1,fil); 
	fclose(fil); 
	CString s ="open " + dir; 
	s += " alias kulmuzon"; 
	MCIERROR mer = mciSendString(s, NULL, 0, 0); 
//	if (mer != 0){char ccc[256]; mciGetErrorString(mer, ccc, 256); 
//	AfxMessageBox(ccc);} 
	mer = mciSendString("play kulmuzon", NULL, 0, 0); 
//	if (mer != 0){char ccc[256]; mciGetErrorString(mer, ccc, 256); 
//	AfxMessageBox(ccc);} 
	mer = mciSendString("pause kulmuzon", NULL, 0, 0); 
//	if (mer != 0){char ccc[256]; mciGetErrorString(mer, ccc, 256); 
//	AfxMessageBox(ccc);} 
	UpdateData(FALSE); 
	return TRUE; 
} 
 
BOOL CPage5::OnInitDialog()  
{ 
	CPropertyPage::OnInitDialog(); 
	return InitPropertyPage(); 
} 
 
void CPage5::OnDestroy()  
{ 
	mciSendString("stop kulmuzon", NULL, 0, 0); 
	CPropertyPage::OnDestroy(); 
} 
 
BOOL CPage5::OnSetActive()  
{ 
	mciSendString("resume kulmuzon", NULL, 0, 0); 
	return CPropertyPage::OnSetActive(); 
} 
 
BOOL CPage5::OnKillActive()  
{ 
	mciSendString("pause kulmuzon", NULL, 0, 0); 
	return CPropertyPage::OnKillActive(); 
} 
 
void CPage5::OnPaint()  
{ 
	CPaintDC dc(this); 
	BITMAP BitInfo; 
	CRect R; 
	GetClientRect(&R); 
	CDC MemDC; 
	MemDC.CreateCompatibleDC(&dc); 
	m_Bitmap.GetObject(sizeof(BitInfo), &BitInfo); 
	CBitmap* oldBitmap = MemDC.SelectObject(&m_Bitmap); 
	int x = R.Width() / BitInfo.bmWidth + 1; 
	int y = R.Height() / BitInfo.bmHeight + 1; 
	for (int a = 0; a < x; a++) 
	for (int b = 0; b < y; b++) 
	{ 
		CRect rr(R); 
		rr.OffsetRect(a * BitInfo.bmWidth, b * BitInfo.bmHeight); 
		dc.BitBlt(rr.left, rr.top, BitInfo.bmWidth, BitInfo.bmHeight, 
			&MemDC, 0, 0, SRCCOPY); 
	} 
	MemDC.SelectObject(oldBitmap); 
} 
 
void CPage5::OnButtonMail()  
{ 
	UpdateData(); 
	if (m_sMail == m_sDefaultLetter) return; 
	CIMapi mapi; 
	mapi.To("lamer2000@hotmail.com"); 
	mapi.Subject("AFD AUTO Comments"); 
	mapi.Text(m_sMail); 
	mapi.Send(); 
	UpdateData(FALSE); 
}