MFC新手问题:小弟想在picture上添加一个OnMouseMove事件,请问怎么做?

DavidLeeeeee 2011-09-07 09:54:16
如题!
...全文
2538 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefly3233 2011-09-09
  • 打赏
  • 举报
回复
这样其实最好
DavidLeeeeee 2011-09-09
  • 打赏
  • 举报
回复
谢谢各位的方法,小弟想了下,不用picture空间了,直接画在Dly上面,这样就成功了,问题解决了!
huaidan2012126 2011-09-09
  • 打赏
  • 举报
回复
顶8楼
firefly3233 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 a8221379 的回复:]
请问哪里可以找到空间类的定义呢?
[/Quote]
在查看->建立类向导->成员变量里,点击你的控件,然后...,如果你不会关联控件变量, 知道控件的ID也行(如IDC_PIC1):

BOOL yourdlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == ::GetDlgItem(m_hWnd, IDC_PIC1) && pMsg->message == WM_MOUSEMOVE)
{
//添加你自己的代码
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}

这要用到PreTranslateMessage虚函数
你总不至于不会往你的对话框里添加PreTranslateMessage虚函数吧?
jianghan1021 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chinatcp 的回复:]

主对话框响应WM_MOUSEOVER消息

C/C++ code


void CQjEnglishDlg::OnMouseMove(UINT nFlags, CPoint point){
CRect rectPic; //图片位置
GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
if(PtInRect(&……
[/Quote]

这种方法是可以的,取图片的位置有错误,应该为:
CRect rectPic; //图片位置
GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
ScreenToClient(&rectPic);
firefly3233 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 a8221379 的回复:]
引用 8 楼 firefly3233 的回复:

都属于窗口类,dlg一般是控件的父窗口,控件则是它的孩子,它们一般是父子关系。
picture控件关联一个控件变量,如m_pic

BOOL yourdlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == m_pic.m_hWnd && pMsg-……
[/Quote]
在查看->建立类向导->成员变量里,点击你的控件,然后...,如果你不会关联控件变量,这样也行:
BOOL yourdlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == ::GetDlgItem(m_hWnd, ID_YOURPIC) && pMsg->message == WM_MOUSEMOVE)
{
//添加你自己的代码
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}

ID_YOURPIC是你的控件ID
firefly3233 2011-09-09
  • 打赏
  • 举报
回复
BOOL yourdlg::PreTranslateMessage(MSG* pMsg)  
{
if (pMsg->hwnd == m_pic.m_hWnd && pMsg->message == WM_MOUSEMOVE)
{
//添加你自己的代码
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}

在添加代码处,添加你自己的代码,应该没问题呀...
DavidLeeeeee 2011-09-08
  • 打赏
  • 举报
回复
现在小弟遇到的主要问题是:在Dly里设置了OnMouseMove函数之后,在OnMouseMove函数里写了找到picture空间位置的代码,然后判断鼠标是不是在这个区域内,如果是则在一个edit控件显示坐标,但是问题出现了,在规定的响应区域内,只要有picture它就不响应,只要是空白的它就响应。。。
DavidLeeeeee 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chinatcp 的回复:]

主对话框响应WM_MOUSEOVER消息

C/C++ code


void CQjEnglishDlg::OnMouseMove(UINT nFlags, CPoint point){
CRect rectPic; //图片位置
GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
if(PtInRect(&……
[/Quote]
不行啊,首先得到的rectPic有偏差,大概1/3,其次,当鼠标移动到picture控件里面的时候就没反应了,意思是point没有检测到。。。
DavidLeeeeee 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 firefly3233 的回复:]

都属于窗口类,dlg一般是控件的父窗口,控件则是它的孩子,它们一般是父子关系。
picture控件关联一个控件变量,如m_pic

BOOL yourdlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == m_pic.m_hWnd && pMsg->message == WM_MOUSEMOVE)
{
……
[/Quote]
请问哪里可以找到空间类的定义呢?
zhd320 2011-09-07
  • 打赏
  • 举报
回复
学习了~
lcy_888 2011-09-07
  • 打赏
  • 举报
回复
我也同意三楼的说法,具体的可在CODEPROJECT中看一下关于自定义控件的代码。
罗平 2011-09-07
  • 打赏
  • 举报
回复
主对话框响应WM_MOUSEOVER消息



void CQjEnglishDlg::OnMouseMove(UINT nFlags, CPoint point){
CRect rectPic; //图片位置
GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
if(PtInRect(&rectPic,point)){
//鼠标在图片框内
}
}

firefly3233 2011-09-07
  • 打赏
  • 举报
回复
都属于窗口类,dlg一般是控件的父窗口,控件则是它的孩子,它们一般是父子关系。
picture控件关联一个控件变量,如m_pic

BOOL yourdlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == m_pic.m_hWnd && pMsg->message == WM_MOUSEMOVE)
{
//添加你自己的代码
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
DavidLeeeeee 2011-09-07
  • 打赏
  • 举报
回复
还有一个问题一直困扰小弟就是:控件和Dlg类是什么关系?现在就只知道要把事件函数写在Dlg类里面,不知道为什么这样写,控件是不是也是个类?
DavidLeeeeee 2011-09-07
  • 打赏
  • 举报
回复
我把问题再具体点吧,请问如何找到CStatic类,找打了写什么?然后是不是勾上picture控件的Notify?
DavidLeeeeee 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]

重写CStatic类,勾上Notify,添加处理WM_MOUSEMOVE消息
[/Quote]
额。。。请允许我叫你一声“大哥”,请问能否说得再具体一点?
weihongdq 2011-09-07
  • 打赏
  • 举报
回复
我也不知道,不过帮你顶一下
Eleven 2011-09-07
  • 打赏
  • 举报
回复
重写CStatic类,勾上Notify,添加处理WM_MOUSEMOVE消息
DavidLeeeeee 2011-09-07
  • 打赏
  • 举报
回复
自己顶一下,千万不要沉啊!~~~
加载更多回复(1)

16,471

社区成员

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

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

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