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 + -
显示快捷键?