控制越来越 NULL mf

Control is getting be NULL mf

提问人:Zrn-dev 提问时间:7/25/2022 最后编辑:Zrn-dev 更新时间:8/10/2022 访问量:149

问:

我有包含以下内容的类CPrinterDlg

 // CPrinterDlg.h    
 
public:
CEdit m_editRxFreq;
void print_SignalData(unsigned int freq, float wvlen);


// CPrinterDlg.cpp

void CPrinterDlg::print_SignalData(unsigned int freq, float wvlen)
{
   m_editRxFreq.SetWindowTextW(L"ddd");
}

为了访问该功能,我这样做了:MainFrm

public: 
CPrinterDlg m_PrinterDlg;
CPrinterDlg& getPrinterDlg() { return m_PrinterDlg; }

从我称之为 CSMsg''' 类的地方print_SignalData(...) is

void CSockMsg::Send_SignalData(unsigned char* msg)
{
  //..

  CMainFrame* pMain = (CMainFrame*)AfxGetApp()->GetMainWnd();
  pMain->getPrinterDlg().print_SignalData(freq, wvlen);
}

当我直接从其中一个 CPrinter 函数调用时,它运行良好。但是,当我尝试从中调用它时,它从这一点开始给了我 Debug Assertion():。 我看到m_editRxFreq是.print_SignalData(...)CSMsg::Send_SignalData(unsigned char* msg)...MFC\winocc.cpp Line: 242m_editRxFreq.SetWindowTextW(L"ddd");NULL

那么,您如何看待为什么会成为 NULL?我该如何解决这个问题??m_editRxFreq

C++ null MFC 控件 调用

评论

1赞 john 7/25/2022
CEdit是一个类,所以永远不能为 NULL,只有指针可以为 NULL。不幸的是,这里没有足够的信息来解决您的问题。特别是,首先没有关于如何赋予值的内容。m_editRxFreqm_editRxFreq
0赞 Jabberwocky 7/25/2022
“It's giving me an error”:请编辑并逐字显示错误消息。
0赞 Zrn-dev 7/26/2022
@Jabberwocky我编辑了那个,请看一下)
1赞 Jabberwocky 7/26/2022
现在,您应该仔细查看错误消息并按照其建议执行操作,即单击“重试”按钮,该按钮将在第242行打开winocc.cpp文件,这将揭示实际错误。窗口句柄可能为 NULL。可能是因为 CPrinterDlg 对话框不再打开。m_editRxFreq.m_hWnd
0赞 Zrn-dev 8/4/2022
@Jabberwocky是,为 NULL。那么,如果 CPrinterDlg 不再打开,有没有办法重新打开它?m_editRxFreq.m_hWnd

答:

0赞 Zrn-dev 8/4/2022 #1

解决!

我正在做

public: 
CPrinterDlg m_PrinterDlg;
CPrinterDlg& getPrinterDlg() { return m_PrinterDlg; }

CMainFrm.h

并实际创建和显示该 dlg

CPrinterDlg dlg;
dlg.Create(...);
dlg.ShowWindow(...);

在.CxxView::OnInitialUpdate()

这就是为什么当我打电话给它时,它给了我 NULL;pMain->getPrinterDlg().print_SignalData(freq, wvlen);

所以为了解决它,

我在课堂上创建了 CPrinterDlg,但没有在课堂上创建。dlg.Create(...)CMainFrmCxxxView