关于子类化问题 关于子类化问题

我有一个继承自CMDIFrameWnd的MDI1的主窗口类.
我在MDI1上继承了MDI2.
在MDI1中有一个Crebar m_rebar.对象.
我想改变MDI2中m_rebar的显示效果.想用子类化SubclassWindow方法.
我在Crebar 上继承了Crebar1类.
int MDI1::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_ReBar.Create(this,0,WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN |CBRS_TOP);//建立ReBar.
....
}
int MDI2::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (MDI1::OnCreate(lpCreateStruct) == -1)
return -1;
...
m_OmsRebar.SubclassWindow(m_ReBar.m_hWnd); //出错
...
}

请问应该如何使用 SubclassWindow 方法
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
hxzmm 的方法试了能通过:
可是m_OmsRebar这个对象我在其他地方使用了.
出错了.
看来使用SubclassWindow是有条件的.
hxzmm 2009-03-24
  • 打赏
  • 举报
回复
HWND hWnd = m_ReBar.Detach();
m_OmsRebar.SubclassWindow(hWnd);
一个窗口句柄不能被Attach两次!
sys0009 2009-03-24
  • 打赏
  • 举报
回复
这样貌似不行吧
SubclassWindow的参数是NULL吧?
hust_terry 2009-03-24
  • 打赏
  • 举报
回复
SubclassWindow是MFC对子类化的简化
例:实现一个拖动的button,并在对话框中方便使用,假设对话框中安置了一个普通按钮IDOK。
1.从CButton派生一个CMyButton,实现拖动功能
2.得到句柄hOK=GetDlgItem(IDOK)->m_hWnd
3.定义变量
CMyButton b;
b.SubclassWindow(hOK);
子类化就是改变一个已创建窗口的行为,即改变窗口函数,SubclassWindow是MFC对此目的进行的简化。
上述方法的好处在于:你可以用普通控件布置对话框。
另外,UnsubclassWindow是必须的善后步骤。

15,979

社区成员

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

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