右键弹出一非模态窗口,点击窗口以外区域关闭,怎么实现

右键弹出一非模态窗口,点击窗口以外区域关闭,如何实现?
右键弹出一非模态窗口,点击窗口以外区域关闭,如何实现?除SetCapture外还有何其它方法?
------解决方案--------------------
本帖最后由 VisualEleven 于 2014-05-08 10:48:27 编辑
1.在主窗口头文件中声明两个成员变量CRect rect和CPopDlg* pdlg用于保存非模态窗口的尺寸和指针;
2.在右键响应函数中保存之:
        pdlg = new CPopDlg;
pdlg->Create(IDD_DIALOG1,this);
pdlg->ShowWindow(SW_SHOW);
pdlg->GetClientRect(&rect);

3.在左键响应函数中
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{

    BOOL flag = PtInRect(&rect,point);
if (flag)
{
pdlg->DestroyWindow();


CDialog::OnLButtonDown(nFlags, point);
}

------解决方案--------------------
引用:
右键弹出一非模态窗口,点击窗口以外区域关闭,如何实现?除SetCapture外还有何其它方法?


SetCapture应该是最有效的方法
------解决方案--------------------
你不是要求 “点击窗口以外区域关闭”
怎么 会 影响 “影响了其他窗口的行为呀” 其他窗口 这时要 鼠标 吗 ?
------解决方案--------------------
引用:
1.在主窗口头文件中声明两个成员变量CRect rect和CPopDlg* pdlg用于保存非模态窗口的尺寸和指针;
2.在右键响应函数中保存之:
        pdlg = new CPopDlg;
pdlg->Create(IDD_DIALOG1,this);
pdlg->ShowWindow(SW_SHOW);
pdlg->GetClientRect(&rect);

3.在左键响应函数中
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{

    BOOL flag = PtInRect(&rect,point);
if (flag)
{
pdlg->DestroyWindow();


CDialog::OnLButtonDown(nFlags, point);
}


这个貌似可行啊