继承的控件DDX如何实现?

ilovedrv 2008-11-07 04:34:25
我做了个一个控件,大致如下:


class CMyCtl : public CStatic
{
public:
CMyCtl(const string &filename);
private:
CTreeCtrl m_tree;
};


这个控件主要是根据filename文件的内容初始化m_tree,

在CMyCtl ::OnCreate(LPCREATESTRUCT lpCreateStruct)中根据filename建立树。

我新建一个对话框工程,在其上添加一个Static静态框,然后在DoDataExchange使用使用DDX_Control映射,但是不能实现在程序启动自动初始化m_tree,这是什么原因呢?还是我写的不对啊?
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovedrv 2008-11-18
  • 打赏
  • 举报
回复
上述代码添加在WM_INITDIALOG中
ilovedrv 2008-11-18
  • 打赏
  • 举报
回复
我在codeproject看到了一个控件

http://www.codeproject.com/KB/static/zoomctrl.aspx

可以在CWnd上缩放图片,但是有个问题,在滑动其中一个滚动条时,另外一个有可能显示不正确,无论vc6或者vc7

但是,如果我把改程序中的ddx方式改为手动创建,即如下:


CWnd *pWnd = GetDlgItem(IDC_ZOOM_CTRL);
m_zoomCtrl.Create(NULL, "CScrollWnd", WS_CHILD | WS_VISIBLE |WS_HSCROLL | WS_VSCROLL,
CRect(0,0,0,0), pWnd, NULL);
CRect rc;
pWnd->GetWindowRect(&rc);
pWnd->ScreenToClient(&rc);
m_zoomCtrl.MoveWindow(&rc);


这样就可以正确显示了,不知道是什么原因
一条晚起的虫 2008-11-09
  • 打赏
  • 举报
回复
简单的方法:
仍然通过向导添加关联变量,然后将CStatic m_static改为 CMyCtl m_static;
CStatic不能用默认的ID

//如果关联没有问题的话,还是出现上述问题,那就是类实现的代码问题了。
菜牛 2008-11-09
  • 打赏
  • 举报
回复
带参数的构造函数,只有在构造函数的初始化列表中才能调用。也就是在你的C...Dlg::C...Dlg(...) : m_static(_T("filename"))这样才能实现初始化,和DDX没有关系。
Hiiishe 2008-11-07
  • 打赏
  • 举报
回复
这样是不行的。
关联控件类变量,只能与对应的控件类关联

你用树控件变量通过DDV来关联CStatic类型的控件是行不通的。另外,对话框上标识为ID_STATIC的控件是不能DataExchange的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧