1.Create()函数创建,该函数原型如下:

BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

lpszCaption是按钮上显示的文本;dwStyle指定按钮风格,可以是按钮风格与窗口风格的组合,取值有:

  窗口风格:

  ·WS_CHILD 子窗口,必须有
  ·WS_VISIBLE 窗口可见,一般都有
  ·WS_DISABLED 禁用窗口,创建初始状态为灰色不可用的按钮时使用
  ·WS_TABSTOP 可用Tab键选择
  ·WS_GROUP 成组,用于成组的单选按钮中的第一个按钮

  按钮风格:

  ·BS_PUSHBUTTON 下压式按钮,也即普通按钮
  ·BS_AUTORADIOBUTTON 含自动选中状态的单选按钮
  ·BS_RADIOBUTTON 单选按钮,不常用
  ·BS_AUTOCHECKBOX 含自动选中状态的复选按钮
  ·BS_CHECKBOX 复选按钮,不常用
  ·BS_AUTO3STATE 含自动选中状态的三态复选按钮
  ·BS_3STATE 三态复选按钮,不常用
 
  以上风格指定了创建的按钮类型,不能同时使用,但必须有其一。

·BS_BITMAP 按钮上将显示位图
  ·BS_DEFPUSHBUTTON 设置为默认按钮,只用于下压式按钮,一个对话框中只能指定一个默认按钮
  ·rect指定按钮的大小和位置;
  ·pParentWnd指示拥有按钮的父窗口,不能为NULL;
  ·nID指定与按钮关联的ID号,用上一步创建的ID号。

  不同控件类的Create()函数略有不同,可参考相关资料。

  例:p_MyBut->Create( "动态按钮", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );
这样,我们就在当前对话框中的(20,10)处创建了宽60,高30,按钮文字为“动态按钮”的下压式按钮。

2.动态创建一个月日历控件

  1)在头文件添加#define IDC_MCCA (WM_USER+110)

  2)在cpp文件在窗体中添加成员指针:CMonthCalCtrl *m_pCtrlMonth

  3)在窗体初始化的时候初始化控件,这里所说的窗体初始化,并不是窗体类的初始化函数,而是OnInitialUpdate()或OnInitDialog()或OnCreate()函数

  m_pCtrlMonth = new CMonthCalCtrl;
  m_pCtrlMonth->Create(WS_VISIBLE|WS_CHILD|WS_BORDER|MCS_NOTODAY,CRect(20,10,220,160),this, IDC_MCCA );
  m_pCtrlMonth->ShowWindow(SW_SHOW);
  编译运行就会显示月日历
 3.

void CCharStatisticDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCharStatisticDlg)
DDX_Text(pDX, IDC_EDIT1, m_strTxt);
DDX_Text(pDX, IDC_CH, m_strCh);
DDX_Text(pDX, IDC_EN, m_strEn);
DDX_Text(pDX, IDC_AL, m_strTotal);
//}}AFX_DATA_MAP
}

Updatedata(TRUE) 表示将控件的值赋值给成员变量,即从窗口编辑框中读入数据;
Updatedata(FALSE) 表示将成员变量的值赋值给控件,将数据从窗口显示。

DoDataExchange 函数其实是为了实现一项数据动态绑定技术
而DDX_XXX函数才是真正实现动态绑定技术的函数,函数在MFC\Include\AFXDD_.H中声明。