CWnd::OnDSCNotify

afx_msg BOOL OnDSCNotify( DSCSTATE nState, DSCREASON nReason, BOOLpBool );

返回值:如果nReason和nState所标识的操作被处理了,则返回TRUE;否则返回FALSE。

参数:
nStateDSCSTATE枚举量中的一个命名常量,列在Remarks部分。
nReasonDSCSTATE枚举量中的一个命名常量,列在Remarks部分。
pBool一个布尔型结果,指明nState和nReason代表的操作是否应当继续。

说明:
当与数据源控件相绑定的控件修改或试图修改游标时,就在响应数据源控件引发的事件时调用这个接收方通知。使用它来跟踪数据源控件产生的原因(nReason)和状态(nState)。缺省情况下允许状态和原因的任意组合。编写你自己的代码以测试对你的应用程序而言是重要的状态和原因,然后返回适当的TRUE或FALSE。
要使用OnDSCNotify,在需要接收接收方通知的类的头文件中定义一个接收映射以及接收方通知的处理函数如下:
class CMyDlg : public CDialog
{
    ...
    DECLARE_EVENTSINK_MAP()
    BOOL OnDSCNotify(DSCSTATE nState, DSCREASON nReason, BOOL* pBool);
    ...
};
然后,在你的类的实现中,定义接收映射并指定接收事件的函数如下:
BEGIN_EVENTSINK_MAP(CMyDlg, CDialog)
    ON_DSCNOTIFY(CMyDlg, IDC_RDCCTRL1, OnDSCNotify)
END_EVENTSINK_MAP()
当事件在数据源控件内发生时,通知回调函数,即你实现的OnDSCNotify将被调用。
enum DSCREASON
{
    dscNoReason = 0,
    dscClose, dscCommit, dscDelete,
    dscEdit, dscInsert, dscModify, dscMove
};
对于下面列出的每一种状态,它将被调用多次:
enum DSCSTATE
{
    dscNoState = 0,
    dscOKToDo,
    dscCancelled,
    dscSyncBefore,
    dscAboutToDo,
    dscFailedToDo,
    dscSyncAfter,
    dscDidEvent
};
多次调用使你能够以不同的次数跟踪事件。例如,由于事件通常是在响应控件对游标的修改时产生的,数据源控件需要做的第一件事情就是引发一个事件,询问是否可以真正执行这个动作;因此是dsdOKToDo状态的原因。如果监控事件(数据控件、应用程序等等)的所有客户都接收了事件,数据源控件将进入dscSyncBefore状态,此时如有必要,所有外面的数据都将被刷新。例如,如果编辑域的内容发生了变化,这个变化将被发送到游标。在这个事件之后,数据源控件将进入dscAboutToDo和dscSyncAfter状态,最后进入dscDidEvent状态。这些为你提供了从数据源空捕捉通知的更多机会。

请参阅:
CWnd::GetDSCCursor, CWnd::BindDefaultProperty, CWnd::BindProperty