editinfodlg.cpp

来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C++ 代码 · 共 170 行

CPP
170
字号
// EditInfoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Ex05020.h"
#include "EditInfoDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CEditInfoDlg dialog
CEditInfoDlg::CEditInfoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CEditInfoDlg::IDD, pParent)
{
	i_strTitle = "填写信息" ;

	m_iStaticWidth  = 40;
	m_iEditWidth	= 200;
	m_iHeight		= 20;
	m_iRowSpacing	= 5;
	m_iColSpacing	= 10;
}

void CEditInfoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CEditInfoDlg, CDialog)
	//{{AFX_MSG_MAP(CEditInfoDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


BOOL CEditInfoDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	SetWindowText( i_strTitle );
	CreateControl();
	MoveDlgAndBtn();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

bool CEditInfoDlg::AddAItem(CString strName, CString strValue)
{
	CItemInfo item(strName,strValue);
	m_Items.Add(item);
	return true ;
}

CEditInfoDlg::~CEditInfoDlg()
{

}

bool CEditInfoDlg::CreateControl()
{
	int iTop = m_iRowSpacing ;
	for(int i = 0 ; i < m_Items.GetSize() ; i++ )
	{
		CItemInfo::STATE state = m_Items[i].i_state ;
		if( CItemInfo::STATE_HIDE == state)
			continue ;//此数据隐藏,不必新建
		CString strName = m_Items[i].i_strName ;
		CString	strValue= m_Items[i].i_strValue ;
		{//静态文本框
			int iLeft = 20 ;
			int iRight = iLeft +  m_iStaticWidth ;
			CRect r(iLeft,iTop,iRight,iTop+m_iHeight);
			m_Items[i].i_wndStatic.Create(strName,WS_VISIBLE | WS_CHILD | WS_GROUP,r,this);	
			m_Items[i].i_wndStatic.ShowWindow(SW_SHOW);
		}
		{//编辑框
			int iLeft = 20 + m_iStaticWidth + m_iColSpacing ;
			int iRight = iLeft +  m_iEditWidth ;
			CRect r(iLeft,iTop,iRight,iTop+m_iHeight);
			m_Items[i].i_wndEdit.Create(WS_TABSTOP | WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL ,r,this,1001+i);
			m_Items[i].i_wndEdit.SetWindowText(strValue);
			m_Items[i].i_wndEdit.ShowWindow(SW_SHOW);
			if( CItemInfo::STATE_DISABLE == state )
				m_Items[i].i_wndEdit.EnableWindow(false);
		}
		iTop = iTop + m_iHeight + m_iRowSpacing ;
	}
	
	return true ;	
}

void CEditInfoDlg::OnOK() 
{
	for(int i = 0 ; i < m_Items.GetSize() ; i++ )
	{
		if(IsWindow(m_Items[i].i_wndEdit.GetSafeHwnd()))
		{
			CString strValue ;
			m_Items[i].i_wndEdit.GetWindowText(strValue);
			m_Items[i].i_strValue = strValue ;
		}
	}	
	
	CDialog::OnOK();
}

int CEditInfoDlg::GetShowItemCount()
{
	int iCount = 0 ;
	for(int i = 0 ; i < m_Items.GetSize() ; i++ )
	{
		CItemInfo::STATE state = m_Items[i].i_state ;
		if(CItemInfo::STATE_NORMAL == state || CItemInfo::STATE_DISABLE == state )
			iCount++ ;
	}	
	return iCount ;
}

void CEditInfoDlg::SetItemsState(CItemInfo::STATE state)
{
	for(int i = 0 ; i < m_Items.GetSize() ; i++ )
		m_Items[i].i_state = state ;		
}

void CEditInfoDlg::SetAItemState(CString strName,CItemInfo::STATE state)
{
	for(int i = 0 ; i < m_Items.GetSize() ; i++ )
	{
		if(m_Items[i].i_strName == strName )
			m_Items[i].i_state = state ;		
	}
}

void CEditInfoDlg::MoveDlgAndBtn()
{
	//改变对话框大小
	int iAddHeight = (m_iHeight + m_iRowSpacing) * GetShowItemCount() - m_iRowSpacing ;
	CRect r ;
	GetWindowRect(&r);
	r.bottom += iAddHeight ;
	MoveWindow(r);

	//移动“确定”按钮的位置
	CWnd * pBtnOK = GetDlgItem(IDOK);
	if(NULL != pBtnOK)
	{
		pBtnOK->GetWindowRect(&r);
		ScreenToClient(&r);
		r.top	 += iAddHeight ;
		r.bottom += iAddHeight ;
		pBtnOK->MoveWindow(r);
	}

	//移动“取消”按钮的位置	
	CWnd * pBtnCancel = GetDlgItem(IDCANCEL);
	if(NULL != pBtnCancel)
	{
		pBtnCancel->GetWindowRect(&r);
		ScreenToClient(&r);
		r.top	 += iAddHeight ;
		r.bottom += iAddHeight ;
		pBtnCancel->MoveWindow(r);
	}
}

⌨️ 快捷键说明

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