Search code examples
c++nullmfccontrolscall

Control is getting be NULL mf


I have CPrinterDlg class which contains

 // 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");
}

In order to access that function I did in MainFrm like this:

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

And from where I am calling print_SignalData(...) is CSMsg``` class

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

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

When I call print_SignalData(...) from one of the CPrinter function directly, it's working well. But, When I try to call it from CSMsg::Send_SignalData(unsigned char* msg) it's giving me Debug Assertion(...MFC\winocc.cpp Line: 242) from this point:m_editRxFreq.SetWindowTextW(L"ddd");. And I see that m_editRxFreq is NULL.

So, how do you think why m_editRxFreq is getting be NULL? and how can I solve this problem??


Solution

  • Solved!

    I was doing

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

    in CMainFrm.h,

    and actually Creating and Showing that dlg

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

    was in CxxView::OnInitialUpdate().

    That's why when I called pMain->getPrinterDlg().print_SignalData(freq, wvlen); it was giving me NULL;

    So in order to solve it,

    I created CPrinterDlg dlg.Create(...) in CMainFrm class but not in CxxxView class.