CWnd::Detach()和Attach()的问题

lijinfenghust 2008-01-24 02:58:24
我在以下代码中写:

BOOL CMyDlg::OnInitInstance()
{
...
RECT rc;
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton btn;
btn.Create(_T("btn"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rc,this ,100);
HWND hd=btnn.GetSafeHwnd();
btnn.Detach();

return TRUE;
}

结果报错,请问是为什么
另外 我在CMyDlg中加私有变量 CButton btnn;


BOOL CMyDlg::OnInitInstance()
{
...
RECT rc;
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton btn;
btn.Create(_T("btn"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rc,this ,100);//100是控件ID
HWND hd=btnn.GetSafeHwnd();
btnn.Detach();//btnn是局部变量 到下面的括号将要析构
btn.Attach(hd);
btn.ShowWindow(SW_NORMAL);//这句不管加上还是不加上 都不显示按钮 为什么?
//怎样才能显示这个窗口

return TRUE;
}

请问怎样才能显示窗口 在线,急!
...全文
199 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujianhei 2008-01-29
  • 打赏
  • 举报
回复
可以使用detach和attach实现,其实UnsubclassWindow()和SubclassWindow()也正是使用了detach和attach只是首先将断裂的消息链恢复再detach,之后attach再接管消息链,你跟到UnsubclassWindow()和SubclassWindow()函数中就可以看到了。
lijinfenghust 2008-01-29
  • 打赏
  • 举报
回复
to yxz_lp:对话框窗口上不会显示按钮
to zhoujianhai:达到预期效果 但是 不知道能否用detach和attach实现?
lijinfenghust 2008-01-29
  • 打赏
  • 举报
回复
谢谢你们帮助 马上结帖!
zhoujianhei 2008-01-28
  • 打赏
  • 举报
回复
      RECT   rc; 
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton tmpbtn;
tmpbtn.Create(_T("btn"),WS_CHILD ¦WS_VISIBLE ¦BS_PUSHBUTTON,rc,this ,100);//100是控件ID
HWND hd=tmpbtn.GetSafeHwnd();
tmpbtn.UnsubclassWindow();
// tmpbtn.Detach();//btnn是局部变量 到下面的括号将要析构
m_btn.SubclassWindow(hd);

// m_btn.Attach(hd);
// m_btn.ShowWindow(SW_NORMAL);//这句不管加上还是不加上 都不显示按钮 为什么?
//怎样才能显示这个窗口
yxz_lp 2008-01-28
  • 打赏
  • 举报
回复

BOOL CMyDlg::OnInitInstance()
{
...
RECT rc;
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton tmpbtn;
tmpbtn.Create(_T("btn"),WS_CHILD ¦WS_VISIBLE ¦BS_PUSHBUTTON,rc,this ,100);//100是控件ID
if(NULL!= m_btn.GetSafeHwnd())//确保m_btn为成员变量,而且为空。
m_btn.Detach();
m_btn.Attach(tmpbtn.Detach());
m_btn.ShowWindow(SW_NORMAL);//这句不管加上还是不加上 都不显示按钮 为什么?
//怎样才能显示这个窗口

return TRUE;
}
zhoujianhei 2008-01-24
  • 打赏
  • 举报
回复
消息链断裂
cnzdgs 2008-01-24
  • 打赏
  • 举报
回复
UpdateWindow
lijinfenghust 2008-01-24
  • 打赏
  • 举报
回复
BOOL CMyDlg::OnInitInstance()
{
...
RECT rc;
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton tmpbtn;
tmpbtn.Create(_T("btn"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rc,this ,100);
tmpbtn.Detach();
return TRUE;
}



结果报错(一个断言失败),请问是为什么
另外 我在CMyDlg中加私有变量 CButton m_btn;

C/C++ code

BOOL CMyDlg::OnInitInstance()
{
...
RECT rc;
rc.bottom=150;
rc.left=100;
rc.right=150;
rc.top=100;
CButton tmpbtn;
tmpbtn.Create(_T("btn"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rc,this ,100);//100是控件ID
HWND hd=tmpbtn.GetSafeHwnd();
tmpbtn.Detach();//btnn是局部变量 到下面的括号将要析构
m_btn.Attach(hd);
m_btn.ShowWindow(SW_NORMAL);//这句不管加上还是不加上 都不显示按钮 为什么?
//怎样才能显示这个窗口

return TRUE;
}

上面的发错了 不好意思
zhoujianhei 2008-01-24
  • 打赏
  • 举报
回复
CButton btn;
设为成员变量
lijinfenghust 2008-01-24
  • 打赏
  • 举报
回复
只想知道这2个函数的用法 希望知道的不吝赐教
zhoujianhei 2008-01-24
  • 打赏
  • 举报
回复
你想干嘛?

15,978

社区成员

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

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