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
} 展开
我先在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
} 展开
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
我简单重写了下
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
}
测试了下,鼠标点那在那显示。效果还行。
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询