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

📄 superwordsdlg.cpp

📁 同学通讯录系统,利用MFC编写,利用了数据库的技术
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SuperWordsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SuperWords.h"
#include "SuperWordsDlg.h"
#include "CreateCardDialog.h"
#include "FindDlg.h"
#include "BookDatas.h"
#include "PropertyDlg.h"
#include "UserDlg.h"
#include "WorldDialog.h"
#include "SendMail.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSuperWordsDlg dialog

CSuperWordsDlg::CSuperWordsDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSuperWordsDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSuperWordsDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSuperWordsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSuperWordsDlg)
	DDX_Control(pDX, IDC_LIST_DATA, m_list);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSuperWordsDlg, CDialog)
	//{{AFX_MSG_MAP(CSuperWordsDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BUTTON_MEMBER, OnButtonMember)
	ON_BN_CLICKED(IDC_BUTTON_FIND, OnButtonFind)
	ON_BN_CLICKED(IDC_BUTTON_EMAIL, OnButtonEmail)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_PROPERTY, OnButtonProperty)
	ON_COMMAND(IDC_EMAIL, OnEmail)
	ON_BN_CLICKED(IDC_BUTTON_SYSTEM, OnButtonSystem)
	ON_COMMAND(IDC_NOTES, OnNotes)
	ON_COMMAND(IDC_ABOUT, OnAbout)
	ON_COMMAND(IDC_FONT_COLOR, OnFontColor)
	ON_COMMAND(IDC_BACK_COLOR, OnBackColor)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSuperWordsDlg message handlers

BOOL CSuperWordsDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here

	m_btnCreateMember.SubclassDlgItem(IDC_BUTTON_MEMBER, this);
	m_btnCreateMember.SetIcon(IDI_ICON13); 
	
	m_btnEmail.SubclassDlgItem(IDC_BUTTON_EMAIL, this);
	m_btnEmail.SetIcon(IDI_ICON17); 
	
	m_btnProperty.SubclassDlgItem(IDC_BUTTON_PROPERTY, this);
	m_btnProperty.SetIcon(IDI_ICON6); 
	
	m_btnDelete.SubclassDlgItem(IDC_BUTTON_DELETE, this);
	m_btnDelete.SetIcon(IDI_ICON7); 
	
	m_btnFind.SubclassDlgItem(IDC_BUTTON_FIND, this);
    m_btnFind.SetIcon(IDI_ICON13); 

	m_btnNote.SubclassDlgItem(IDC_BUTTON_SYSTEM, this);
    m_btnNote.SetIcon(IDI_ICON19); 
	m_list.SetBkColor(RGB(0,128,128));
	m_list.SetTextBkColor(RGB(0,128,128));
	m_list.SetTextColor(RGB(255,255,0));

	m_list.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | 
		LVS_EX_HEADERDRAGDROP );
	TCHAR szBuf[20];
	LV_COLUMN lvc;
	
	int i;
	for ( i = 0; i < 9; i++ )
	{
		lvc.cx       = 48+14*i;
		switch(i)
		{
			case 0:
				wsprintf(szBuf, _T("姓名"));
				lvc.cx = 100;
				break;
			case 1:
				wsprintf(szBuf, _T("EMAIL") );
				lvc.cx = 200;
				break;
			case 2:
				wsprintf(szBuf, _T("OICQ") );
				lvc.cx = 100;
				break;
			case 3:
				wsprintf(szBuf, _T("手机号码") );
				lvc.cx = 100;
				break;
			case 4:
				wsprintf(szBuf, _T("电话号码") );
				break;
			case 5:
				wsprintf(szBuf, _T("生日") );
				break;
			case 6:
				wsprintf(szBuf, _T("工作单位") );
				lvc.cx = 200;
				break;
			case 7:
				wsprintf(szBuf, _T("个人主页") );
				lvc.cx = 200;
				break;
			case 8:
				wsprintf(szBuf, _T("备注") );
				lvc.cx = 200;
				break;

		}
		lvc.mask     = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
		lvc.fmt      = LVCFMT_LEFT;
		lvc.pszText  =szBuf;
		lvc.iSubItem = i;         
		//lvc.cx       = 48+14*i;
		m_list.InsertColumn( i, &lvc );
	}	
	m_pDB=NULL;
	OpenDatabase();

	RefreshData();

	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSuperWordsDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSuperWordsDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSuperWordsDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


BOOL CSuperWordsDlg::InitODBCEnvironment(char *szPathName)
{
	TCHAR	szDesc[2048];
	LPCSTR	lpszDriver;
	HMODULE hmodule;
	int		nLen;
	int ch='\\';
    CString szTemp,szTemp1;
	szTemp.Empty();
	szTemp1.Empty();
	szTemp = szPathName;
	int result = szTemp.ReverseFind(ch);
    szTemp1 = szTemp.Left(result);

	// check if the driver is install and construct the create description string
	if (hmodule = ::LoadLibrary(_T("odbcjt32.dll")))
	{
		_stprintf(szDesc, _T("DSN=%s+ DESCRIPTION=%s+ DBQ=%s+ DEFAULTDIR=%s++ "), 
				  DSNNAME, DSNNAME, szPathName, szTemp1);

		lpszDriver = "Microsoft Access Driver (*.mdb)\0";
		::FreeLibrary(hmodule);
	}
	else
	{
		::MessageBox(NULL, _T("找不到ODBC驱动程序,请安装\nMicrosoft Access Driver"), 
					 _T("错误信息"), MB_OK | MB_ICONERROR);

		return FALSE;
	}

	nLen = _tcslen(szDesc);
	for (int i=0; i<nLen; i++)
	{
		if (szDesc[i] == _T('+'))
			szDesc[i] = 0;
	}

	// create the odbc data source
	if (!::SQLConfigDataSource(NULL, ODBC_ADD_DSN, lpszDriver, (LPCSTR)szDesc))
	{
		::MessageBox(NULL, _T("创建ODBC数据源失败"), _T("错误信息"), MB_OK | MB_ICONERROR);
		return FALSE;
	}

	return TRUE;

}

BOOL CSuperWordsDlg::CloseODBCEnvironment(char *szPathName)
{
	TCHAR szDesc[MAX_PATH];
	LPCSTR lpszDriver;
	int nLen, i;
	int ch='\\';
    CString szTemp,szTemp1;
	szTemp.Empty();
	szTemp1.Empty();
	szTemp = szPathName;
	int result = szTemp.ReverseFind(ch);
    szTemp1 = szTemp.Left(result);
	_stprintf(szDesc, _T("DSN=%s+ DESCRIPTION=%s+ DBQ=%s++ "), DSNNAME, DSNNAME,szTemp1);
		
	lpszDriver = "Microsoft Access Driver (*.mdb)\0";

	nLen = _tcslen(szDesc);
	for (i=0; i<nLen; i++)
	{
		if (szDesc[i] == _T('+'))
			szDesc[i] = 0;
	}
	BOOL bRes=::SQLConfigDataSource(NULL, ODBC_REMOVE_DSN, lpszDriver, (LPCSTR)szDesc);
	if(!bRes)
		return FALSE;
	return TRUE;

}

void CSuperWordsDlg::OpenDatabase()
{
	TCHAR szTempPath[1024];
	TCHAR szBuffer[400];
    memset(szBuffer,0,sizeof(szBuffer));
	memset(szTempPath,0,sizeof(szTempPath));
CSuperWordsApp *pApp = (CSuperWordsApp *)AfxGetApp();
	if(::GetModuleFileName(NULL,szBuffer,MAX_PATH)!=0)
	{
		pApp->GetCurDir(szBuffer,szTempPath);
	}
    
	lstrcat(szTempPath,"BookData.mdb");
	if(!InitODBCEnvironment(szTempPath))
		 return;
	 memset(m_szPathName,0,sizeof(m_szPathName));
	 lstrcpy(m_szPathName,szTempPath);
	 //open the database and init it
	 OpenInitDatabase(DSNNAME);

}

void CSuperWordsDlg::CloseDatabase()
{
	if(m_dataRecset != NULL)
	{
		if(m_dataRecset->IsOpen ())
			m_dataRecset->Close ();
		delete m_dataRecset;
		m_dataRecset = NULL;
	}
	closeDatabase(&m_pDB);
	CloseODBCEnvironment(m_szPathName);

}

void CSuperWordsDlg::OpenInitDatabase(CString szDatabase)
{
	openDatabase(&m_pDB,szDatabase,TRUE);
	try
	{
		m_dataRecset = new CBookDatas(m_pDB);
		m_dataRecset->Open (CRecordset::snapshot,"Select * from BookData");
	}
	catch(CException* e)
	{
		e->ReportError ();
		e->Delete ();
		if(m_dataRecset != NULL)
		{
			if(m_dataRecset->IsOpen ())
				m_dataRecset->Close ();
			delete m_dataRecset;
			m_dataRecset = NULL;
		}
		closeDatabase(&m_pDB);
	}


}

int CSuperWordsDlg::openDatabase(CDatabase **ppDatabase, CString fileName, BOOL bReportNoOpen)
{
	// initialize success indicator
	int nReturnCode = 1;

	// close and delete if necessary
	if (*ppDatabase != NULL)
	{
		if ((*ppDatabase)->IsOpen())
			closeDatabase(ppDatabase);
		delete *ppDatabase;
	}

	// construct new database
	*ppDatabase = new CDatabase;

	// failed to allocate
	if (ppDatabase == NULL)
		return -1; // fatal error

	// now open the database object with error checking
	try
	{
		(*ppDatabase)->Open(fileName,FALSE,FALSE,"ODBC;");

⌨️ 快捷键说明

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