CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

是不是动态建立的控件不能建立变量关联,内详细,在线...

楼主likunfeng(likfeng)2004-10-19 08:53:57 在 VC/MFC / 基础类 提问

问题:  
  1.在一个对话框类CDlgDlg初始化时动态建立一个Edit控件,在Resource.h中定义一个ID如下:  
  #define   IDC_BUTTON1                                           1002  
  2.  
  在话框类CDlgDlg定义公有变量  
  public:  
  CEdit   *m_pEdit;  
   
  3.对话框初始化时建立控件  
  BOOL   CDlgDlg::OnInitDialog()  
  {  
  //...  
  m_pEdit   =   new   CEdit;//added   by   likfeng  
  m_pEdit->Create(ES_MULTILINE   |   WS_CHILD   |   WS_VISIBLE   |   WS_TABSTOP   |   WS_BORDER,  
  CRect(10,10,100,30),   this,   IDC_EDIT_AUTOFILL);//added   by   likfeng  
  //...  
  }  
   
  4.此时程序运行没问题,在OnButton1()中如下代码也没有问题  
  void   CDlgDlg::OnButton1()    
  {  
  m_pEdit->SetWindowText("asfASFAS");//added   by   likfeng  
  }  
   
  5.但是要想和普通控件那样建立变量关联如下:  
  class   CDlgDlg   :   public   CDialog  
  {  
  //   Construction  
  public:  
  CDlgDlg(CWnd*   pParent   =   NULL); //   standard   constructor  
  CEdit   *m_pEdit;  
  //   Dialog   Data  
  //{{AFX_DATA(CDlgDlg)  
  enum   {   IDD   =   IDD_DLG_DIALOG   };  
  double     m_edit;//added   by   likfeng/////////////////////////  
  //}}AFX_DATA  
   
  //   ClassWizard   generated   virtual   function   overrides  
  //{{AFX_VIRTUAL(CDlgDlg)  
  protected:  
  virtual   void   DoDataExchange(CDataExchange*   pDX);//   DDX/DDV   support  
  //}}AFX_VIRTUAL  
   
  //   Implementation  
  protected:  
  HICON   m_hIcon;  
  //   Generated   message   map   functions  
  //{{AFX_MSG(CDlgDlg)  
  virtual   BOOL   OnInitDialog();  
  //......  
  //}}AFX_MSG  
  DECLARE_MESSAGE_MAP()  
  };  
  void   CDlgDlg::DoDataExchange(CDataExchange*   pDX)  
  {  
  CDialog::DoDataExchange(pDX);  
  //{{AFX_DATA_MAP(CDlgDlg)  
  DDX_Text(pDX,   IDC_EDIT_AUTOFILL,   m_edit);//added   by   likfeng  
  //}}AFX_DATA_MAP  
  }  
  CDlgDlg::CDlgDlg(CWnd*   pParent   /*=NULL*/)  
  :   CDialog(CDlgDlg::IDD,   pParent)  
  {  
  //{{AFX_DATA_INIT(CDlgDlg)  
  m_edit   =   0.0;//added   by   likfeng  
  //}}AFX_DATA_INIT  
  //   Note   that   LoadIcon   does   not   require   a   subsequent   DestroyIcon   in   Win32  
  m_hIcon   =   AfxGetApp()->LoadIcon(IDR_MAINFRAME);  
  }  
  6.出现如下Debug错误  
  Debug   Assertion   Failed!  
  OutPut出现大量  
  First-chance   exception   in   dlg.exe   (HOOKDLL.DLL):   0xC0000005:   Access   Violation.  
  显示相关文件为  
  c:\program   files\microsoft   visual   studio\vc98\mfc\src\dlgdata.cpp  
  具体出错位置如下:  
  HWND   CDataExchange::PrepareCtrl(int   nIDC)  
  {  
  ASSERT(nIDC   !=   0);  
  ASSERT(nIDC   !=   -1);   //   not   allowed  
  HWND   hWndCtrl;  
  m_pDlgWnd->GetDlgItem(nIDC,   &hWndCtrl);  
  if   (hWndCtrl   ==   NULL)  
  {  
  TRACE1("Error:   no   data   exchange   control   with   ID   0x%04X.\n",   nIDC);  
  ASSERT(FALSE);//**************此处出错  
  AfxThrowNotSupportedException();  
  }  
  m_hWndLastControl   =   hWndCtrl;  
  m_bEditLastControl   =   FALSE;   //   not   an   edit   item   by   default  
  ASSERT(hWndCtrl   !=   NULL);       //   never   return   NULL   handle  
  return   hWndCtrl;  
  }  
  ...  
  请问各位大侠  
  是不是动态建立的控件不能建立变量关联  
  如果能的话怎样做  
  不能的话有什么替代方法比较方便的读取和更改Edit的值(double类型) 问题点数:66、回复次数:7Top

1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-10-19 09:01:55 得分 16

当然可以。你就当DoDataExchange为普通函数。Top

2 楼likunfeng(likfeng)回复于 2004-10-19 09:02:44 得分 0

对于从控件面板上拖到对话框上的控件,可以手工建立其变量关联  
  为什么动态建立的控件就出错呢?  
  期盼回复Top

3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-10-19 09:03:13 得分 6

DDX_Text(pDX,   IDC_EDIT_AUTOFILL,   m_edit);//added   by   likfeng  
  =>  
  if(m_pEdit)  
  DDX_Text(pDX,   IDC_EDIT_AUTOFILL,   m_edit);//added   by   likfengTop

4 楼likunfeng(likfeng)回复于 2004-10-19 09:27:50 得分 0

to:DentistryDoctor(雅克医生(潜心修内功))    
  新建了一个对话框程序试了试  
  改了也出错  
  只要加上  
  if(m_pEdit)  
  DDX_Text(pDX,   IDC_EDIT_AUTOFILL,   m_edit_autofill);//added   by   likfeng  
  就会  
  Debug   Assertion   Failed!  
  OutPut出现大量  
  First-chance   exception   in   dlg.exe   (HOOKDLL.DLL):   0xC0000005:   Access   Violation.  
  显示相关文件为  
  c:\program   files\microsoft   visual   studio\vc98\mfc\src\dlgdata.cpp  
  具体出错位置如下:  
  HWND   CDataExchange::PrepareCtrl(int   nIDC)  
  {  
  ASSERT(nIDC   !=   0);  
  ASSERT(nIDC   !=   -1);   //   not   allowed  
  HWND   hWndCtrl;  
  m_pDlgWnd->GetDlgItem(nIDC,   &hWndCtrl);  
  if   (hWndCtrl   ==   NULL)  
  {  
  TRACE1("Error:   no   data   exchange   control   with   ID   0x%04X.\n",   nIDC);  
  ASSERT(FALSE);//**************此处出错  
  AfxThrowNotSupportedException();  
  }  
  m_hWndLastControl   =   hWndCtrl;  
  m_bEditLastControl   =   FALSE;   //   not   an   edit   item   by   default  
  ASSERT(hWndCtrl   !=   NULL);       //   never   return   NULL   handle  
  return   hWndCtrl;  
  }  
  是否和   ASSERT(FALSE);//**************此处出错   有关  
  莫非此文件损坏?  
  还是我遗漏了什么地方Top

5 楼kevin_wang(砸锅卖铁)回复于 2004-10-19 09:32:24 得分 36

问题是这样的:  
   
  DDX_Text(pDX,   IDC_EDIT_AUTOFILL,   m_edit);//added   by   likfeng  
  会在Edit建立之前先更新一下他的显示,但是那个时候这个控件还不存在,所以出现了异常  
  为了解决这个问题,可以把他的create放在dialog的OnCreate中调用。也就是对话框生成之后立即生成Edit控件,  
  int   CDlgDlg::OnCreate(LPCREATESTRUCT   lpCreateStruct)    
  {  
  if   (CDialog::OnCreate(lpCreateStruct)   ==   -1)  
  return   -1;  
   
  //   TODO:   Add   your   specialized   creation   code   here  
  m_pEdit   =   new   CEdit;//added   by   likfeng  
  m_pEdit->Create(ES_MULTILINE   |   WS_CHILD   |   WS_VISIBLE   |   WS_TABSTOP   |   WS_BORDER,  
  CRect(10,10,100,30),   this,   IDC_EDIT_AUTOFILL);//added   by   likfeng  
  return   0;  
  }  
  Top

6 楼kevin_wang(砸锅卖铁)回复于 2004-10-19 09:33:02 得分 8

请赶快揭帖!Top

7 楼likunfeng(likfeng)回复于 2004-10-19 09:42:14 得分 0

kevin_wang(砸锅卖铁)说到问题症结所在,多谢  
  也十分感谢DentistryDoctor(雅克医生(潜心修内功))  
  结贴拉Top

相关问题

  • 如何动态关联控件和变量?
  • 成员变量如何与窗口上的控件关联起来啊??
  • 怎么样创建一个和控件关联的CString类型变量?
  • .net中怎么知道与控件关联的变量是那个?
  • 控件与变量!!!!
  • 如何将一个Edit控件的输入和一个全局变量关联起来?
  • vs2003中没有MFC class wizard,如何将对话框的控件变量和类关联起来?
  • 有没有控件变量
  • 求匈牙利命名方法详细资料包括控件、变量、函数等...
  • 十万火急,我在对话框中添加了VC自带的picture控件以后,为什么不能把它和变量关联起来

关键词

  • 控件
  • ws
  • idc
  • cdlgdlg
  • autofill
  • pedit
  • likfeng
  • nidc
  • 变量
  • 建立

得分解答快速导航

  • 帖主:likunfeng
  • DentistryDoctor
  • DentistryDoctor
  • kevin_wang
  • kevin_wang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo