www.pudn.com > 密聊源程序.rar > Setup.cpp


// Setup.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "secretchat.h" 
#include "Setup.h" 
#include "SecretChatDlg.h"	//主窗口类头文件 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CSetup dialog 
 
 
CSetup::CSetup(CWnd* pParent /*=NULL*/) 
	: CDialog(CSetup::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CSetup) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
} 
 
 
void CSetup::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CSetup) 
	DDX_Control(pDX, IDC_SETUPTAB, m_setupTab); 
	DDX_Control(pDX, IDC_DINGWEI, m_dingWei); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CSetup, CDialog) 
	//{{AFX_MSG_MAP(CSetup) 
	ON_NOTIFY(TCN_SELCHANGE, IDC_SETUPTAB, OnSelchangeSetuptab) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CSetup message handlers 
 
void CSetup::OnOK()  
{ 
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd(); 
	CWaitCursor WaitCursor;	//等待光标 
 
	if( !m_secretKeySetupDlg.UpdateData()) return; 
	if( !m_privateManagerDlg.UpdateData()) return; 
	if( !m_publicKeyManagerDlg.UpdateData()) return; 
	if( !m_generalDlg.UpdateData()) return; 
	 
	//设置密钥设置选项 
	CString strUser, strFriend; 
	if(m_secretKeySetupDlg.m_userIndex == -1) 
	{ 
		MessageBox( 
			"没有选择用户私钥", 
			"密聊", 
			MB_ICONINFORMATION); 
	} 
	else 
	{ 
		m_secretKeySetupDlg.m_userPrivateKey.GetLBText( 
			m_secretKeySetupDlg.m_userIndex, 
			strUser); 
		AfxGetApp()->WriteProfileString( 
			"SecretKeySetup", 
			"UserPrivateKey", 
			strUser); 
	} 
	if(m_secretKeySetupDlg.m_friendIndex == -1) 
	{ 
		MessageBox( 
			"没有选择好友公钥", 
			"密聊", 
			MB_ICONINFORMATION); 
	} 
	else 
	{ 
		m_secretKeySetupDlg.m_friendPublicKey.GetLBText( 
			m_secretKeySetupDlg.m_friendIndex, 
			strFriend); 
		AfxGetApp()->WriteProfileString( 
			"SecretKeySetup", 
			"FriendPublicKey", 
			strFriend); 
	} 
 
	//设置常规选项 
	AfxGetApp()->WriteProfileInt("General", "ArriveSound", m_generalDlg.m_arriveSound); 
	AfxGetApp()->WriteProfileInt("General", "ArriveShow", m_generalDlg.m_arriveShow); 
	AfxGetApp()->WriteProfileInt("General", "Top", m_generalDlg.m_top); 
	AfxGetApp()->WriteProfileInt("General", "Tray", m_generalDlg.m_tray); 
 
	AfxGetApp()->WriteProfileInt("General", "LANStartup", m_generalDlg.m_LANStartup); 
    CString  strIP; 
	BYTE  b1,b2,b3,b4; 
    m_generalDlg.m_LANIP.GetAddress(b1,b2,b3,b4);	//获得IP 
	m_generalDlg.m_LANIP.GetWindowText(strIP);	//获得IP 
	//AfxMessageBox(strIP); 
 //   strIP.Format( 
//		"%d.%d.%d.%d", 
//		b1,b2,b3,b4);	//把数字转换成字符 
	AfxGetApp()->WriteProfileString("General", "LANIP", strIP); 
 
	AfxGetApp()->WriteProfileInt("General", "Startup", m_generalDlg.m_startup); 
	//启动时是否自动运行 
	HKEY hkey;	//键句柄 
	if(m_generalDlg.m_startup) 
	{ 
		//启动 
		::RegOpenKeyEx( 
			HKEY_LOCAL_MACHINE/*主键*/, 
			"SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN"/*子键*/, 
			NULL, 
			KEY_ALL_ACCESS, 
			&hkey);  
		::RegSetValueEx( 
			hkey, 
			"SecretChat"/*键值*/, 
			0, 
			REG_SZ, 
			(LPBYTE)__argv[0]/*键值的数据*/, 
			256);	//把sz的数据写入到记事本键值 
		::RegCloseKey(hkey);	//关闭 
	} 
	else 
	{ 
		//关闭 
		::RegOpenKeyEx(  
			HKEY_LOCAL_MACHINE, 
			"SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", 
			NULL, 
			KEY_ALL_ACCESS, 
			&hkey); 
		::RegDeleteValue(  
			hkey, 
			"SecretChat"/*键值*/);	//删除键值 
		::RegCloseKey(hkey); 
	} 
 
	////根据注册表数据进行设置 
	pSecretChatDlg->MyUpdateData(); 
 
 
	CDialog::OnOK(); 
} 
 
void CSetup::OnCancel()  
{ 
	// TODO: Add extra cleanup here 
	 
	CDialog::OnCancel(); 
} 
 
BOOL CSetup::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	//添加选项卡 
    TC_ITEM tItem; 
    tItem.mask = TCIF_TEXT; 
    tItem.pszText = "密钥设置"; 
    tItem.cchTextMax = strlen( tItem.pszText);      
    m_setupTab.InsertItem( 0, &tItem);	//添加选项 
  
	tItem.pszText="私钥管理"; 
	tItem.cchTextMax = strlen( tItem.pszText); 
    m_setupTab.InsertItem( 1, &tItem);	//添加选项 
 
	tItem.pszText="公钥管理"; 
	tItem.cchTextMax = strlen( tItem.pszText); 
    m_setupTab.InsertItem( 2, &tItem);	//添加选项 
 
	tItem.pszText="常规"; 
	tItem.cchTextMax = strlen( tItem.pszText); 
    m_setupTab.InsertItem( 3, &tItem);	//添加选项 
 
	tItem.pszText="关于"; 
	tItem.cchTextMax = strlen( tItem.pszText); 
    m_setupTab.InsertItem( 4, &tItem);	//添加选项 
 
	CRect rect; 
	m_dingWei.GetWindowRect( &rect); 
	ScreenToClient( &rect); 
 
	m_secretKeySetupDlg.Create(IDD_SECRETKEYSETUP,this); 
	m_privateManagerDlg.Create(IDD_PRIVATEMANAGER,this); 
	m_publicKeyManagerDlg.Create(IDD_PUBLICKEYMANAGER,this); 
	m_generalDlg.Create(IDD_GENERAL,this); 
	m_aboutDlg.Create(IDD_ABOUTBOX,this); 
 
	m_secretKeySetupDlg.MoveWindow( &rect); 
	m_privateManagerDlg.MoveWindow( &rect); 
	m_publicKeyManagerDlg.MoveWindow( &rect); 
	m_generalDlg.MoveWindow( &rect); 
	m_aboutDlg.MoveWindow( &rect); 
 
	ShowTabWindow(0);	//更新下拉列表 
	ShowTabWindow(m_index);	//每次显示前都要设置m_index的值 
 
	//当没有私钥时提示生成 
 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CSetup::OnSelchangeSetuptab(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	ShowTabWindow( m_setupTab.GetCurSel() ); 
 
	*pResult = 0; 
} 
 
void CSetup::ShowTabWindow(int index)	 
{ 
	CSecretChatDlg * pSecretChatDlg = (CSecretChatDlg *)AfxGetMainWnd(); 
	switch(index) 
	{	 
	case 0:  
		m_secretKeySetupDlg.ShowWindow( SW_SHOW); 
		m_privateManagerDlg.ShowWindow( SW_HIDE); 
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE); 
		m_generalDlg.ShowWindow( SW_HIDE); 
		m_aboutDlg.ShowWindow( SW_HIDE); 
		//设置窗口图标 
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE); 
 
		/*删除下拉列表中的所有字符*/ 
		m_secretKeySetupDlg.m_userPrivateKey.ResetContent(); 
		//添加指定目录的文件到下拉列表,并选择指定的项 
		m_secretKeySetupDlg.m_userPrivateKey.Dir( 
			DDL_DIRECTORY,  
			pSecretChatDlg->m_appName + "\\user\\*.sk"); 
 
		//m_secretKeySetupDlg.m_userPrivateKey.SetCurSel(0);	//如果只有一个项就选它 
		m_secretKeySetupDlg.m_userPrivateKey.SelectString( 
			-1, 
			AfxGetApp()->GetProfileString("SecretKeySetup", "UserPrivateKey")); 
 
		m_secretKeySetupDlg.m_friendPublicKey.ResetContent(); 
		m_secretKeySetupDlg.m_friendPublicKey.Dir( 
			DDL_DIRECTORY,  
			pSecretChatDlg->m_appName + "\\friend\\*.pk"); 
		m_secretKeySetupDlg.m_friendPublicKey.SelectString( 
			-1, 
			AfxGetApp()->GetProfileString("SecretKeySetup", "FriendPublicKey")); 
 
		SetWindowText("设置 - 密钥设置"); 
		break; 
	case 1: 
		m_secretKeySetupDlg.ShowWindow( SW_HIDE); 
		m_privateManagerDlg.ShowWindow( SW_SHOW); 
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE); 
		m_generalDlg.ShowWindow( SW_HIDE); 
		m_aboutDlg.ShowWindow( SW_HIDE); 
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE); 
 
		//删除全部列表 
		m_privateManagerDlg.m_userList.ResetContent(); 
		//把指定目录的sk文件全部添加到列表 
		m_privateManagerDlg.m_userList.Dir( 
			DDL_DIRECTORY,  
			pSecretChatDlg->m_appName + "\\user\\*.sk"); 
		//选择列表中的某个字符 
		m_privateManagerDlg.m_userList.SelectString( 
			-1, 
			AfxGetApp()->GetProfileString("SecretKeySetup", "UserPrivateKey")); 
 
		SetWindowText("设置 - 私钥管理");			 
		break; 
	case 2:   
		m_secretKeySetupDlg.ShowWindow( SW_HIDE); 
		m_privateManagerDlg.ShowWindow( SW_HIDE); 
		m_publicKeyManagerDlg.ShowWindow( SW_SHOW); 
		m_generalDlg.ShowWindow( SW_HIDE); 
		m_aboutDlg.ShowWindow( SW_HIDE); 
		SetIcon(AfxGetApp()->LoadIcon(IDI_IDIOGRAPH), FALSE); 
		//删除全部列表 
		m_publicKeyManagerDlg.m_friendList.ResetContent(); 
		//把指定目录的sk文件全部添加到列表 
		m_publicKeyManagerDlg.m_friendList.Dir( 
			DDL_DIRECTORY,  
			pSecretChatDlg->m_appName + "\\friend\\*.pk"); 
		//选择列表中的某个字符 
		m_publicKeyManagerDlg.m_friendList.SelectString( 
			-1, 
			AfxGetApp()->GetProfileString("SecretKeySetup", "FriendPublicKey")); 
 
		SetWindowText("设置 - 公钥管理"); 
		break; 
	case 3: 
		m_secretKeySetupDlg.ShowWindow( SW_HIDE); 
		m_privateManagerDlg.ShowWindow( SW_HIDE); 
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE); 
		m_generalDlg.ShowWindow( SW_SHOW); 
		m_aboutDlg.ShowWindow( SW_HIDE); 
		SetIcon(AfxGetApp()->LoadIcon(IDI_SETUP), FALSE); 
 
		SetWindowText("设置 - 常规"); 
		break; 
	case 4: 
		m_secretKeySetupDlg.ShowWindow( SW_HIDE); 
		m_privateManagerDlg.ShowWindow( SW_HIDE); 
		m_publicKeyManagerDlg.ShowWindow( SW_HIDE); 
		m_generalDlg.ShowWindow( SW_HIDE); 
		m_aboutDlg.ShowWindow( SW_SHOW); 
		SetIcon(AfxGetApp()->LoadIcon(IDI_SETUP), FALSE); 
 
		SetWindowText("设置 - 关于"); 
		break; 
	} 
 
	m_setupTab.SetCurSel(index);	//设置选项的显示索引 
}