Закрытие диалога фактически отменяет его.Поскольку вы отключили функцию close в обработчике OnCancel, ничего не произойдет.
Чтобы отключить только ESC, вам необходимо предварительно обработать сообщения клавиатуры:
BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
switch ( pMsg->message )
{
case WM_KEYDOWN:
switch( pMsg->wParam )
{
case VK_ESCAPE:
case VK_CANCEL: return true;
}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}