MFC中非模态对话框显示位置总是比预期靠下

我想使非模态对话框的左上角位置为鼠标单击的位置。但是每次对话框显示的位置都比单击位置靠下。但是如果显示模态对话框就没有问题。谁知道是怎么回事?我先在View类的OnLBu... 我想使非模态对话框的左上角位置为鼠标单击的位置。但是每次对话框显示的位置都比单击位置靠下。但是如果显示模态对话框就没有问题。谁知道是怎么回事?

我先在View类的OnLButtonDown()中添加如下代码:
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_TestDlg.m_pt=point; //m_TestDlg是对话框对应的类,m_pt用于记录当前坐标点
m_TestDlg.Create(IDD_DIALOG1,this);
m_TestDlg.ShowWindow(SW_SHOW);
CView::OnLButtonDown(nFlags, point);
}

然后在对话框类的OnInitDialog()中这样操作:
BOOL CTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
ClientToScreen(&m_pt);
SetWindowPos(&wndTop,m_pt.x,m_pt.y,100,100,SWP_NOSIZE);
return TRUE; // return TRUE unless you set the focus to a control
}
展开
 我来答
归悦欣cf
2014-03-12 · TA获得超过1442个赞
知道大有可为答主
回答量:4250
采纳率:60%
帮助的人:1248万
展开全部
在 CTestDlg::OnInitDialog()调用ClientToScreen(&m_pt);是错误的,应该在CTestView::OnLButtonDown函数里面调用
ClientToScreen(&point)之后,再调用m_TestDlg.m_pt=point;然后在OnInitDialog()函数里面就不要再进行坐标变换了
lvronglee
2014-03-11 · 超过115用户采纳过TA的回答
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:207万
展开全部
我简单重写了下
void CdddddDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
TRACE("invoke %s\n", __FUNCTION__);
m_TestDlg.m_pt=point;
m_TestDlg.ShowWindow(SW_SHOW);
CDialog::OnLButtonDown(nFlags, point);
}
只记录坐标,然后调用子对话框的ShowWindow,你的方式每次都Create好像不好
void CdddddDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_TestDlg.ShowWindow(SW_HIDE);
CDialog::OnRButtonDown(nFlags, point);
}
右键点击让他隐藏。
在小对话框中,重定义以下函数

void CMyDialog::OnShowWindow(BOOL bShow, UINT nStatus)
{
SetWindowPos(NULL, m_pt.x, m_pt.y, 100, 100, 0);
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
}
测试了下,鼠标点那在那显示。效果还行。
追问
非常感谢你的回答,虽然不是我想要的答案,但还想问一下,重定义OnShowWindow函数是怎么回事,这是个虚函数吗?
追答
多看MSDN
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式