在MFC中我们常常要把一些变量于控件对应起来! 并通过UpdateDate来实调用DoDataExchange(CDataExchange* pDX)实现变量信息交换!
如:
DDX_Text(pDX, IDC_STATICCOUNT, m_sCount); --> value对应
把控件ID为IDC_STATICCOUNT的控件与m_sCount变量对应起,
用UpdateDate(TRUE)来把IDC_STATICCOUNT控件数据写到m_sCount;
用UpdateDate(FALSE)把m_sCount数据读写到IDC_STATICCOUNT控件;
DDX_Control(pDX, IDC_BSTARTTIME, m_cStartTime);有尽有-->control
把控件ID为IDC_BSTARTTIME的控件与m_sCount变量对应起,如BUTTON。
此时我们可以通过m_cStartTime控件变量改变对应控件状态!
m_cStartTime.EnableWindow(FALSE); 可以改变控件是否可用!如果没有control对应,
那么我们可以使用等价语句:GetDlgItem(IDC_BSTARTTIME)->EnableWindow(TRUE);
所以使用控件变量将很大的方便我们写P!
2 关于mouse按键的判断
当我们在开发程式的时候,都要有个交互的过程,那么这里一要用的mouse,然而我们如何发现个健被按下呢!
{
// TODO: 在此添加消息处理程序代码和/ 或调用默认值
if (nFlags & MK_LBUTTON)
{
}
CDialog::OnMouseMove(nFlags, point);
}
些是我们可以通过nFlag来断定那个健被按下!
nFlag是一个UINT的变量,它的每一个bit都代表一定的意思!
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down
MK_MBUTTON Set if the middle mouse button is down
MK_RBUTTON Set if the right mouse button is down
MK_SHIFT Set if the SHIFT key is down.
我们只要用nFlag & MK_KEYBUTTON, 如果非0这个健就被按下了, 我们不作
if ((nFlag & MK_KEYBUTTON) == MK_KEYBUTTON), 这样可以使其更加的简捷!实际上用&标记来简化if语句,这样可以置位,可以得到一个正值,否则是0
还有一点要注意,在onKeyDown中,WM_KEYDOWN事件只经你传递大写字母,而shift,caps loc是通过分开代码健被传,如果要区分大小写,你必须判断其是否被按下!