如何让静态控件响应鼠标消息
1个回答
展开全部
然后更改其NOTIFY属性
最后就能添加事件了
有两种方法:一是直接添加控件的BN_CLICKED或BN_DOUBLECLICKED消息响应函数,或重载PreTranslateMessage函数,在函数内部判断消息类型及位置。
你没有作我说的“作一个这个控件的类,加上ON_WM_MOUSEMOVE的message handler就可以了,”步骤如下:
1。载左面class view 下选择add class--MFC class. 例如class name 叫CTest, base class选CStatic
2。右击新生成的class,选add message handler,选ON_WM_MOUSEMOVE.在其中加你想添加的程序。
3。将你的CSTatic 控件的ID改成任何不叫IDC_STTAIC的名字。
4。在class wizard里给你的CStatic控件加variable,选control variable,类用你刚生成的CTest。
以下方法可用,但是控件不能响应鼠标点击消息和移动消息,只响应滚轮消息:
原理:通过确定鼠标位置,当鼠标位于静态控件区域内,执行鼠标响应函数
为一个静态控件Static响应鼠标事件的方法:
1.定义一个坐标变量 RECT m_pRectLink_Static;
2.在OnInitDialog()中添加如下代码:
//将静态主菜单的屏幕坐标存放在m_pRectLink_ ...中
GetDlgItem(IDC_STATIC - GetWindowRect(&m_pRectLink_Static);
//将屏幕坐标转换为客户坐标
ScreenToClient(&m_pRectLink_Static);
3.利用类向导,添加鼠标响应消息,如WM_LBUTTONDOWN,编辑函数如下:
void CRosePojieDlg::OnLButtonDown(UINT nFlags, CPoint point){//判断鼠标是否落在静态控件的矩形区域内
if (point.x(m_pRectLink_Static.left) &&
point.x<(m_pRectLink_Static.right)&&
point.y(m_pRectLink_Static.top) &&
point.y<(m_pRectLink_Static.bottom)){AfxMessageBox("你按下了鼠标"); //要执行的语句}}如果想缩小或扩大选区,只需在m_pRectLink_Static.left等上加减数字。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询