关于自己创建的控件的父类。

caozoe 2010-07-02 04:51:36
先说下我的结构。
CMyMonthCalCtrl : public CMonthCalCtrl

class CMyDatetimePick : public CStatic。 CMyDatetimePick 内包括一个 CMyMonthCalCtrl * m_pMyMonthCal;
左键点击时:
{
m_pMonthCal = new CMyMonthCalCtrl;
m_pMonthCal->CreateEx(0, MONTHCAL_CLASS, NULL, WS_POPUP|WS_BORDER, rc, this, 0);
}

在对话框CMyDlg画一个CMyDatetimePick 。点击出现 CMyDatetimePick

在 CMyDatetimePick 的按键相应中,为什么 GetParent() 是 CMyDlg 呢?

======================================

如果 m_pMonthCal->CreateEx(0, MONTHCAL_CLASS, NULL, WS_POPUP|WS_BORDER, rc, this->GetParent() , 0);
在 CMyDatetimePick 的按键相应中, GetParent() 还是 CMyDlg 。

怎么样能 为 CMyDatetimePick ?




...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
caozoe 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cnzdgs 的回复:]
先提一下窗口和控件的概念:在Windows系统中,两者都是Window。通常所说的“控件”指的是具有WS_CHILD风格的Window,这种Window显示在其父窗口的客户区内,随父窗口一起移动;而“窗口”指的是不具有WS_CHILD风格的Window,这种Window不受其父窗口的客户区限制,不随父窗口一起移动。

因为你创建控件时指定的风格为WS_POPUP|WS_BORDER,这表示要创……
[/Quote]

嗯,我也受教了。

由于CMyDatetimePick比较小,弹出的日期控件比较大。如果不受父窗口的客户端限制,就设置成弹出窗口。但是这样又无法通过父窗口找到想要的控件。

考虑在 CMyMonthCalCtrl 控件添加一个指针。这样就可以使两者联系。
cnzdgs 2010-07-03
  • 打赏
  • 举报
回复
先提一下窗口和控件的概念:在Windows系统中,两者都是Window。通常所说的“控件”指的是具有WS_CHILD风格的Window,这种Window显示在其父窗口的客户区内,随父窗口一起移动;而“窗口”指的是不具有WS_CHILD风格的Window,这种Window不受其父窗口的客户区限制,不随父窗口一起移动。

因为你创建控件时指定的风格为WS_POPUP|WS_BORDER,这表示要创建的是一个弹出窗口,而不是一个控件。控件的父窗口可以是“窗口”,也可以是控件;而“窗口”父窗口只能是“窗口”,不能是控件,所以你指定父窗口为this是无效的,(因为CMyDatetimePick是控件)。
向立天 2010-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cnzdgs 的回复:]
先提一下窗口和控件的概念:在Windows系统中,两者都是Window。通常所说的“控件”指的是具有WS_CHILD风格的Window,这种Window显示在其父窗口的客户区内,随父窗口一起移动;而“窗口”指的是不具有WS_CHILD风格的Window,这种Window不受其父窗口的客户区限制,不随父窗口一起移动。

因为你创建控件时指定的风格为WS_POPUP|WS_BORDER,这表示要创……
[/Quote]
受教
caozoe 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tttyd 的回复:]
没看明白题目
你所谓的点击,是在什么时候创建CMyMonthCalCtrl子窗口
[/Quote]

class CMyMonthCalCtrl : public CMonthCalCtrl

class CMyDatetimePick : public CStatic。 CMyDatetimePick 内包括一个 CMyMonthCalCtrl * m_pMyMonthCal;
点击CMyDatetimePick 时,弹出一个CMyMonthCalCtrl
{
m_pMonthCal = new CMyMonthCalCtrl;
m_pMonthCal->CreateEx(0, MONTHCAL_CLASS, NULL, WS_POPUP|WS_BORDER, rc, this, 0);
}

在对话框CMyDlg画一个CMyDatetimePick 。点击CMyDatetimePick 弹出 CMyMonthCalCtrl

再选择日期。断点在 CMyMonthCalCtrl的按键事件中,查看到 this->GetParent() 是 CMyDlg .
就是 说 CMyMonthCalCtrl的父类不是CStatic,是CDialog。

======================================

如果 m_pMonthCal->CreateEx(0, MONTHCAL_CLASS, NULL, WS_POPUP|WS_BORDER, rc, this->GetParent() , 0);
在 CMyDatetimePick 的按键相应中, GetParent() 还是 CMyDlg 。

怎么样能 为 CMyDatetimePick ?


这样修改,能看明白了没?
雪影 2010-07-02
  • 打赏
  • 举报
回复
没看明白题目
你所谓的点击,是在什么时候创建CMyMonthCalCtrl子窗口

15,979

社区成员

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

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