首页 新闻 会员 周边 捐助

关于 "设置对话框属性函数"-----SetWindowLong()

0
悬赏园豆:50 [待解决问题]
有两个对话框,一大一小,想把小的嵌入到大的中,并且双击小的能够脱离大的,再双击能够还原。
具体方案是:
1.在大对话框上(即主对话框)添加一个static组框,然后通过CWnd* ps=(CWnd*)GetDlgItem(IDC_FULLSCREEN);获得一个窗口作为父窗口。
2.新建一个小对话框--CMyDlg,并将刚才获得的窗口作为一个父窗口传到该对话框的类中,在构造函数中进行保存。

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_pParent=pParent;// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
3.在主对话框类中新建一个小对话框的对象 CMyDlg* pDlg;并且在OnInitDialog()中添加如下代码:

// TODO: Add extra initialization here
CWnd* ps=(CWnd*)GetDlgItem(IDC_FULLSCREEN);//获取static框并将其转换成一个窗口指针*ps
if(ps==NULL)
{
AfxMessageBox("Error");
return FALSE;
}
if (pDlg==NULL)
{
pDlg=new CMyDlg(ps);//为pDlg窗口指针动态建立一个CMyDlg类、父窗口是ps的窗口
pDlg->Create(CMyDlg::IDD,ps);
pDlg->ShowWindow(SW_SHOWNORMAL);

}
4.在CMyDlg类中实现双击后 弹出和还原的动作,响应双击消息的映射函数代码如下:

void CMyDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
HWND hWnd =GetSafeHwnd();
if ( hWnd == NULL ) return;

if(NULL==this->GetParent())
{
LONG newStyle = ::GetWindowLong( hWnd,GWL_STYLE) & (~WS_POPUP) | WS_CHILD | WS_DISABLED;
::SetWindowLong( hWnd , GWL_STYLE, newStyle);
this->SetParent(m_pParent);
}
else
{
LONG newStyle = ::GetWindowLong( hWnd,GWL_STYLE) & (~WS_CHILD) & (~WS_DISABLED) | WS_POPUP;
::SetWindowLong( hWnd , GWL_STYLE, newStyle);
this->SetParent(NULL);
}

CDialog::OnLButtonDblClk(nFlags, point);
}

#####################################
我遇到的问题是:本程序双击小对话框只能弹出和还原一次,以后再双击就没反应啦。请教一下高手哪里出问题了?
_微笑向暖_的主页 _微笑向暖_ | 初学一级 | 园豆:152
提问于:2012-07-13 09:27
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册