请再帮忙-把屏幕的X坐标传到对话框的CEDIT控件中显示?我附了程序

时间:2021-09-11 05:47:44
void CMypeiView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CMypeiPeiDialog* gcpdialog;
char bufferx[3];
_itoa(point.x,bufferx,10);
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);
StdX->ReplaceSel(bufferx,FALSE);
gcpdialog->DoModal();
// theApp()->ptArray.Add(point);
CScrollView::OnLButtonDown(nFlags, point);
}
调试出错在“ASSERT(::IsWindow(m_hWnd));”当逐行调试是得不到StdX(对话框的CEdit控件的ID)的HWND,是???,真奇怪,不知道为什么?

9 个解决方案

#1


CMypeiPeiDialog* gcpdialog;
You only define a pointer,the dialog does not exist, how can you call :
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);

#2


CMypeiPeiDialog* gcpdialog;
You only define a pointer,the dialog does not exist, how can you call :
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);
at least you can 

CMypeiPeiDialog* gcpdialog;
gcpdialog=new CMypeiPeiDialog();
But you new a dialog when every left button click, this will generate too many dialogs.
You should define gcpdialog and create this dialog outside of OnLButtonDown(), such as in OnInitialUpdate() and delete it in the destructor of the view.

#3


gcpdialog没有new

#4


CMypeiPeiDialog* gcpdialog;
  只是生成了了一个类的实例,没有做任何初始化嘛;
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);
  当然就有问题了

解决:
   把以上语句放在CMypeiPeiDialog类的函数中
  

#5


TO everyone:
     我照你们的改了,还是错!!!
     CMypeiView是从CScrollView派生的

#6


CMypeiPeiDialog* gcpdialog;
  只是生成了了一个类的的指针,连实例都没有生成,更没有做任何初始化嘛;
至少得生成一个才行,
gcpdialog=new CMypeiPeiDialog;
而且这句别放在ONLButtonDOWN里面
应该放在你的app的constructor中
然后就可以*操纵了。

#7


如果你是用的view,就把new那句放在你的CMypeiView的构造式里吧

#8


你可以这样做,在你的CMypeiPeiDialog类中,对应IDC_STDX到一个CString m_strStdx变量
然后
CMypeiPeiDialog* gcpdialog = new CMypeiPeiDialog;
gcpdialog->m_strStdx.Format("%d",point.x);
gcpdialog->DoModal();
// theApp()->ptArray.Add(point);
CScrollView::OnLButtonDown(nFlags, point);

#9


多苦哇!通过classwizard直接在对话框中加入该编辑控件的变量即可,又方便!!

#1


CMypeiPeiDialog* gcpdialog;
You only define a pointer,the dialog does not exist, how can you call :
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);

#2


CMypeiPeiDialog* gcpdialog;
You only define a pointer,the dialog does not exist, how can you call :
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);
at least you can 

CMypeiPeiDialog* gcpdialog;
gcpdialog=new CMypeiPeiDialog();
But you new a dialog when every left button click, this will generate too many dialogs.
You should define gcpdialog and create this dialog outside of OnLButtonDown(), such as in OnInitialUpdate() and delete it in the destructor of the view.

#3


gcpdialog没有new

#4


CMypeiPeiDialog* gcpdialog;
  只是生成了了一个类的实例,没有做任何初始化嘛;
CEdit* StdX=(CEdit*)gcpdialog->GetDlgItem(IDC_STDX);
  当然就有问题了

解决:
   把以上语句放在CMypeiPeiDialog类的函数中
  

#5


TO everyone:
     我照你们的改了,还是错!!!
     CMypeiView是从CScrollView派生的

#6


CMypeiPeiDialog* gcpdialog;
  只是生成了了一个类的的指针,连实例都没有生成,更没有做任何初始化嘛;
至少得生成一个才行,
gcpdialog=new CMypeiPeiDialog;
而且这句别放在ONLButtonDOWN里面
应该放在你的app的constructor中
然后就可以*操纵了。

#7


如果你是用的view,就把new那句放在你的CMypeiView的构造式里吧

#8


你可以这样做,在你的CMypeiPeiDialog类中,对应IDC_STDX到一个CString m_strStdx变量
然后
CMypeiPeiDialog* gcpdialog = new CMypeiPeiDialog;
gcpdialog->m_strStdx.Format("%d",point.x);
gcpdialog->DoModal();
// theApp()->ptArray.Add(point);
CScrollView::OnLButtonDown(nFlags, point);

#9


多苦哇!通过classwizard直接在对话框中加入该编辑控件的变量即可,又方便!!