MFC“内存分配违规”

时间:2016-03-23 15:54:09

标签: c++ visual-c++ mfc

我在对话框中创建了一个复选框,并尝试访问其条件是否已选中。这是我的代码:

CButton *m_ctlCheckBlack = (CButton *)GetDlgItem(IDC_BLACK);

int chkBoxBlack = m_ctlCheckBlack->GetCheck();

当我浏览此代码时,会弹出一个异常说:

Exception thrown at 0x0FA45564 (mfc140d.dll) in braille_obr.exe: 0xC0000005:      
Access violation reading location 0x00000020.

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

使用GetDlgItem的理由很少。在资源编辑器中,右键单击按钮并添加“添加变量”。 它将默认为控件。给它起个名字。您将在对话框类中获得一个成员:

myButtonName.GetChecked( );

现在应该是安全的:

{{1}}

因为它将被创建并正确地进行子类化。

答案 1 :(得分:0)

也许,我怀疑当Button尚未构建时它试图获得按钮的状态。

int chkBoxBlack = m_ctlCheckBlack != NULL ? m_ctlCheckBlack->GetCheck() : 0;

或者,您是否尝试从外部对话操作? 如果是这样,你最好尝试这样做。

■CButton *m_ctlCheckBlack = (CButton *)yourdlg.GetDlgItem(IDC_BLACK);

■FindWindowEx(yourdlg.GetSafeHwnd(), NULL, NULL, "(your button caption)");