禁用对话框确定按钮MFC

Gri*_*erZ 7 c++ mfc dialog

如何禁用MFC对话框确定按钮?
此代码: 导致异常" 访问冲突读取位置...... "排队的功能,在从 此时的重点是另一个控制. 什么是错的?
CWnd* fieldOK = pDlg->GetDlgItem(IDOK);
fieldOK->EnableWindow(FALSE);

ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));CWnd::EnableWindow(BOOL bEnable)winnocc.cppmfc90d.dll

感谢帮助.

[EDITED]

bool CSCalcNormCell::OnSelectionChanged( CWnd* pDlg, int type, int page, UINT ctrl_id ) 
{ 
  DDX_DataBox(pDX.get(), IDC_WORKSHOP_COMBO, ws_code); 
  if (!CInfactoryPriceAdapter::CanEditPricesForWorkshop( ws_code )) 
  { 
    CWnd* fieldOK = pDlg->GetDlgItem(IDOK); 
    fieldOK->EnableWindow(FALSE); 
  } 
  else 
  { 
    CWnd* fieldOK = pDlg->GetDlgItem(IDOK); 
    fieldOK->EnableWindow(TRUE); 
  } 
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ark 5

我不确定为什么不能做到这一点。如果我使用常规的CDialog并进行如下初始化:

BOOL CMyDialog::OnInitDialog() {
    CDialog::OnInitDialog();
    CWnd *okbtn = GetDlgItem( IDOK );
    if ( okbtn ) {
        okbtn->EnableWindow( FALSE );
    }
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

它禁用按钮就好了。也许还有其他问题吗?


duD*_*uDE 2

试试这个: http: //support.microsoft.com/kb/122489

如何禁用 MFC 对话框的默认按钮处理

尽管建议默认按钮(按钮)支持,但在某些情况下您可能希望禁用或修改标准实现。您可以按照以下步骤在 MFC 应用程序中执行此操作:

将对话框加载到 App Studio 中,并将“确定”按钮标识符从 IDOK 更改为其他内容,例如 IDC_MYOK。另外,清除“默认按钮”属性中的选中。

使用 ClassWizard 为该按钮创建名为 OnClickedMyOK 的消息处理函数。当从此按钮收到 BN_CLICKED 消息时,将执行此函数。

在 OnClickedMyOK 的代码中,调用 OnOK 函数的基类版本。这是一个例子:

void CMyDialog::OnClickedMyOK()
   {
      CDialog::OnOK();
   }
Run Code Online (Sandbox Code Playgroud)

重写对话框的 OnOK,并且在函数内不执行任何操作。这是一个例子:

void CMyDialog::OnOK()
   {
   }
Run Code Online (Sandbox Code Playgroud)

运行程序并弹出对话框。将焦点集中到“确定”按钮以外的控件上。按返回键。请注意,CDialog::OnOK() 永远不会执行。