我的程序问题出在那里?

ren20 2001-05-10 07:31:00
一个对话框,鼠标进入对话框客户区就到屏幕上的一个位置, 离开又换一个位置。

但是我的程序为什么只能响应进入,不能响应离开。 鼠标离开,对话框为什么不换位置。
谢谢

void CRf001Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
GetWindowRect(&rect);
ClientToScreen(&point);
if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 150,SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 150, 50, SWP_SHOWWINDOW);

}
...全文
512 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
oncreate时
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, -20, 280, 20, SWP_SHOWWINDOW);
分我不要了,你放了我吧
ren20 2001-05-10
  • 打赏
  • 举报
回复
谢谢 supperlxf(嘿嘿) 

问题解决了。

我会给分的, 还有个问题,
我的程序一开始出现在屏幕中央, 怎样是它一开始就显示在最上方。 再加20分。
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
运行成功看:
POINT point;
CRect rect;
GetWindowRect(&rect);
::GetCursorPos(&point);
if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);
::MessageBox(0," "," ",0);
}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}

CDialog::OnTimer(nIDEvent);
ren20 2001-05-10
  • 打赏
  • 举报
回复
是呀, 只在对话框有效。
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
对不起是GetCaretPos();
seedundersnow 2001-05-10
  • 打赏
  • 举报
回复
我问一句,您的设置是否只在那个小框框里面有效?
ren20 2001-05-10
  • 打赏
  • 举报
回复
supperlxf(嘿嘿) 

你先试一下吧,还是不行。
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
这分挣的可真不容易
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
吐血:

void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
GetWindowRect(&rect);
// ClientToScreen(&point);
point=GetCapture();
if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}



supperlxf 2001-05-10
  • 打赏
  • 举报
回复
看我这:
void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
GetWindowRect(&rect);
// ClientToScreen(&point);
GetCapture(point)
if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}

ren20 2001-05-10
  • 打赏
  • 举报
回复
void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
GetWindowRect(&rect);
// ClientToScreen(&point);
GetCapture();

if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,160, 110, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
你最后是怎么写的?
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
我为什么要说“又”啊,嘿嘿
ren20 2001-05-10
  • 打赏
  • 举报
回复
呵呵, 我再试试
ren20 2001-05-10
  • 打赏
  • 举报
回复
还是不行呀
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
哈哈,我又写错了
ren20 2001-05-10
  • 打赏
  • 举报
回复
to supperlxf(嘿嘿) 

鼠标离开后,还是没有响应
supperlxf 2001-05-10
  • 打赏
  • 举报
回复
漏了:

void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
//GetWindowRect(&rect);
// ClientToScreen(&point);
GetCapture(.....)
if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}

supperlxf 2001-05-10
  • 打赏
  • 举报
回复
这样:
void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
GetWindowRect(&rect);
// ClientToScreen(&point);

if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}
ren20 2001-05-10
  • 打赏
  • 举报
回复
谢谢 In355Hz(好象一条狗) 

请看看,我现在改成这样。
好象只能响应else 的语句了。鼠标放上去,没有反应。

void CRf001Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CPoint point;
CRect rect;
GetWindowRect(&rect);
ClientToScreen(&point);

if (rect.PtInRect(point))
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,100, 110, 280, 100, SWP_SHOWWINDOW);

}
else
{
::SetWindowPos (GetSafeHwnd(), HWND_TOPMOST,200, 410, 250, 100, SWP_SHOWWINDOW);

}
CDialog::OnTimer(nIDEvent);
}
加载更多回复(7)

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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