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

📄 addresslistdlg.cpp

📁 VisualC高级编程技术精粹.rar
💻 CPP
字号:
// AddressListDlg.cpp : implementation file
//

#include "stdafx.h"
#include "AddressListDll.h"
#include "AddressListDlg.h"
#include <afxtempl.h>

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

#define SAVE_FILE_FOLDER _T("C:\\WINDOWS\\system32\\MySaveFile")
#define ADDRESSLIST_FILE_PATH _T("C:\\WINDOWS\\system32\\MySaveFile\\AddressList.ini")
/////////////////////////////////////////////////////////////////////////////
// CAddressListDlg dialog


CAddressListDlg::CAddressListDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAddressListDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddressListDlg)
	m_csName = _T("");
	m_csTelephone = _T("");
	m_csAddress = _T("");
	//}}AFX_DATA_INIT

	m_nWidth = 0;
	m_nHeight = 0;
	m_bIsLookOver = FALSE;
	m_bExtend = FALSE;
}


void CAddressListDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddressListDlg)
	DDX_Control(pDX, IDC_ADDRESSLIST_LISTCRTL, m_addresslist);
	DDX_Text(pDX, IDC_EDIT_NAME, m_csName);
	DDX_Text(pDX, IDC_EDIT_TELEPHONE, m_csTelephone);
	DDX_Text(pDX, IDC_EDIT_ADDRESS, m_csAddress);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAddressListDlg, CDialog)
	//{{AFX_MSG_MAP(CAddressListDlg)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_LOOKOVER, OnButtonLookover)
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddressListDlg message handlers
BOOL CAddressListDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_CommonListCtrl.InitListCtrl( &m_addresslist);

    // Set value for list control
    // Read file
    if ( !myFile.Open(ADDRESSLIST_FILE_PATH, CFile::modeRead|CFile::typeText, NULL) )
	{
        AfxMessageBox( _T("^_^   尊敬的用户,你第一次使用该系统,你的通讯录里还没有好友的信息;\r\n      请先添加好友的信息!") );
		m_bExtend = TRUE;
		return FALSE;
    }
    
    CString csBuf = "";
    CStringArray aCsPersonInfo;
    while ( myFile.ReadString(csBuf) )
	{     
        aCsPersonInfo.RemoveAll();

        int nResult = SplitString( csBuf, "|", aCsPersonInfo );
        PersonInfo_t stPersonInfo;
       
        stPersonInfo.csName = aCsPersonInfo.GetAt(0);
	    stPersonInfo.csTelephone = aCsPersonInfo.GetAt(1);
	    stPersonInfo.csAddress = aCsPersonInfo.GetAt(2);        
	    
	    m_CommonListCtrl.SetListCtrlText( &m_addresslist, stPersonInfo );
	}

	myFile.Close();
    
	// Extend/shrink Dialog 
	FlexDialog();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CAddressListDlg::OnButtonAdd() 
{
	UpdateData( TRUE );

	if ( m_csName.IsEmpty() )
	{
		AfxMessageBox( "姓名不能为空!" );
		return;
	}

	if ( m_csTelephone.IsEmpty() )
	{
		AfxMessageBox( "电话不能为空!" );
		return;
	}

	if ( m_csAddress.IsEmpty() )
	{
		AfxMessageBox( "地址不能为空!" );
		return;
	}

	PersonInfo_t stPersonInfo;
	stPersonInfo.csName = m_csName;
	stPersonInfo.csTelephone = m_csTelephone;
	stPersonInfo.csAddress = m_csAddress;
	
	// Set value for list control
	m_CommonListCtrl.SetListCtrlText( &m_addresslist, stPersonInfo );

    // Create MySaveFile folder.
	CFileFind finder;
	BOOL bFindMySaveFolder = finder.FindFile( SAVE_FILE_FOLDER );
    if ( !bFindMySaveFolder )
    {
        BOOL bSuccCreate = CreateDirectory( SAVE_FILE_FOLDER, NULL ) ;
        if ( !bSuccCreate )
        {
            AfxMessageBox( _T("^_^ 创建文件夹失败!") );
            return;
        }
    }
	
	// Create AddressList.ini file.
	// Open  AddressList.ini file.
    if ( !myFile.Open( ADDRESSLIST_FILE_PATH, CFile::modeCreate|CFile::modeWrite|
         CFile::typeText|CFile::modeNoTruncate, &Fe) )
    {
        AfxMessageBox( _T("^_^ 打开文件失败!") );
		return;		
	}

	myFile.SeekToEnd();  
    CString csPersonInfo = m_csName;
    csPersonInfo += "|";
    csPersonInfo += m_csTelephone;
    csPersonInfo += "|";
    csPersonInfo += m_csAddress;
    csPersonInfo += "\r\n";

    // Write file
	myFile.WriteString( csPersonInfo );		
    
    // Close file
	myFile.Close();

	// Clear editbox
	m_csName = _T("");
	m_csTelephone = _T("");
	m_csAddress = _T("");
	UpdateData( FALSE );}

void CAddressListDlg::OnButtonLookover() 
{
	m_bIsLookOver = TRUE;
	CString csLookOver = _T("");
	GetDlgItemText( IDC_BUTTON_LOOKOVER,csLookOver );
	
	if( m_bIsLookOver == TRUE &&  csLookOver == _T("查看>>") )	
	{ 									
		if ( m_bExtend == TRUE )
		{
			AfxMessageBox( _T("^_^ 信息列表已经打开了,点击查看没有意义!") );
			return;
		}

		// Change button caption
		SetDlgItemText( IDC_BUTTON_LOOKOVER, _T("<<隐藏") );

		// Extend dialog
		SizeWindow( m_nReducedHeight, false );				
	}
	else						
	{ 
		// Change button caption
		SetDlgItemText( IDC_BUTTON_LOOKOVER, _T("查看>>") );

		// Shrink dialog
		SizeWindow( m_nReducedHeight,true );	
	} 
	
	//UpdateWindow(); 
	
}

void CAddressListDlg::FlexDialog()
{
	CRect dlgRect, Rect1, Rect2,desktopRect; 

	GetWindowRect( dlgRect );
	GetDesktopWindow()->GetWindowRect( desktopRect ); 
	//MoveWindow(0,0, (desktopRect.Width())/2, (desktopRect.Height())/2 );
	m_nWidth = dlgRect.Width(); 
	m_nHeight = dlgRect.Height(); 
	m_dx = 8;											  
	m_dy = 8;											  
	::SetTimer( this->m_hWnd, 1, 3, NULL ); 							     		
	
	GetDlgItem(IDC_ADDRESSLIST_LISTCRTL)->GetWindowRect( Rect1 ); 
	GetDlgItem(IDC_TEMP)->GetWindowRect( Rect2 ); 
	m_nReducedHeight = int( Rect1.Height()+(Rect1.top -Rect2.bottom)/0.9 ); 
	dlgRect.bottom -= int( Rect1.Height()+(Rect1.top -Rect2.bottom)/0.9 ); 

	return;
}

void CAddressListDlg::SizeWindow(int nReduceHeight, bool bExtend)
{
	CRect rect;

	GetWindowRect(&rect);

	if(bExtend)
	{
		for (int i= 0; i < nReduceHeight; i++)
		{
			rect.bottom--;
			MoveWindow(&rect);
		}
	}
	else
	{
		for (int i= 0; i < nReduceHeight; i++)
		{
			rect.bottom++;
			MoveWindow(&rect);
		}
	}

	return;
}

void CAddressListDlg::OnButtonCancel() 
{
	CDialog::OnCancel();	
}

void CAddressListDlg::OnTimer(UINT nIDEvent) 
{
	CRect dlgRect,desktopRect;

	GetWindowRect( dlgRect );
	GetDesktopWindow()->GetWindowRect( desktopRect );

	if( 1 == nIDEvent )              
	{	
		MoveWindow( (-m_dx+desktopRect.Width() - dlgRect.Width())/2,(-m_dy+desktopRect.Height() - dlgRect.Height())/2 , 		        
		           +m_dx+dlgRect.Width(),m_nHeight-m_nReducedHeight ); 

		if( dlgRect.Width() >= m_nWidth ) 
		{
			m_dx = 0; 
		}

		if( dlgRect.Height() >= m_nHeight )
		{
			m_dy = 0; 		
		}
	}
	
	if( (dlgRect.Width() >= m_nWidth) ) 
	{
		::KillTimer( this->m_hWnd, 1 ); 
	}
	
	CDialog::OnTimer( nIDEvent );
}

int CAddressListDlg::SplitString(const CString &csInput, const CString &csDelimiter, CStringArray &aResults)
{
    int nPos = -1;
    int nNewPos = -1;	
    int nInputSize = csInput.GetLength();
    int nDelimiterSize = csDelimiter.GetLength();
    int nNumFound = 0;
    CString csDstString;

    CArray<int, int> aPositions;

    nNewPos = csInput.Find(csDelimiter, 0);

    if( nNewPos < 0 ) 
    {
        aResults.Add( csInput );
        return 0; 
    }

    while( nNewPos > nPos )
    {
        nNumFound++;
        aPositions.Add( nNewPos );
        nPos = nNewPos;
        nNewPos = csInput.Find( csDelimiter, nPos+nDelimiterSize );
    }

    for( int i=0; i <= aPositions.GetSize(); i++ )
    {

        if( i == 0 )
        {
            csDstString = csInput.Mid( i, aPositions[i] );
        }
        else
        {
            int nOffset = aPositions[i-1] + nDelimiterSize;
            if( nOffset < nInputSize )
            {
                if( i == aPositions.GetSize() )
                {
                    csDstString = csInput.Mid(nOffset);
                }
                else if( i > 0 )
                {
                    csDstString = csInput.Mid( aPositions[i-1] + nDelimiterSize, aPositions[i] - aPositions[i-1] - nDelimiterSize );
                }
                else
                {
                    // Doing nothing.
                }    
            }
        }

        if( csDstString.GetLength() >= 0 )
        {
            aResults.Add( csDstString );
        }
    }

    return nNumFound;
}

⌨️ 快捷键说明

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