MFC实现STATIC TEXT控件的鼠标事件解决方案
2010-03-18 14:21
447 查看
研究了N久才解决的一个问题,看来要想很好地驾驭MFC没这么容易~~ 以下是我解决问题的例子
//添加头文件 MyStatic.h
#ifndef
MYSTATIC_H
#define MYSTATIC_H
#pragma on
ce
#include
"afxwin.h"
// 自定义消息
#define WM_STATICMOUSE
WM_USER+5
#define WM_STATICLBUTTONDOWN WM_USER+4
class CMyStatic :
public CStatic
{
public:
CMyStatic(void);
~CMyStatic(void);
DECLARE_MESSAGE_MAP()
afx_msg void OnMouseMove(UINT
nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT
nFlags, CPoint point);
};
#endif
//添加
实现文件 MyStatic.cpp
#include "StdAfx.h"
#include
"MyStatic.h"
CMyStatic::CMyStatic(void)
{
}
CMyStatic::~CMyStatic(void)
{
}
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void
CMyStatic::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this->GetParent() !=NULL)
GetParent()->SendMessage(WM_STATICMOUSE);
CStatic::OnMouseMove(nFlags,
point);
}
void CMyStatic::OnLButtonDown(UINT
nFlags, CPoint point)
{
if(this->GetParent()
!=NULL)
GetParent()->SendMessage(WM_STATICLBUTTONDOWN);
CStatic::OnLButtonDown(nFlags,point);
}
//对话框头文件
ChartDlg.h
// ChartDlg.h : 头文件
//
#include "OpenGL.h"
#include
"MyEdit.h"
#include "MyStatic.h"
#pragma once
//
CChartDlg 对话框
class CChartDlg : public CDialog
{
public:
.
.
.
CMyStatic
m_mystatic;
.
.
.
afx_msg LRESULT OnStaticMouseMove(WPARAM
wParam, LPARAM lParam);
afx_msg LRESULT OnStaticLButtonDown(WPARAM
wParam, LPARAM lParam);
};
//对话框实现文件 ChartDlg.cpp
//
ChartDlg.cpp : 实现文件
//
#include "stdafx.h"
#include
"Chart.h"
#include "ChartDlg.h"
#ifdef _DEBUG
#define
new DEBUG_NEW
#endif
.
.
.
BEGIN_MESSAGE_MAP(CChartDlg,
CDialog)
.
.
.
ON_MESSAGE(WM_STATICMOUSE, OnStaticMouseMove)
ON_MESSAGE(WM_STATICLBUTTONDOWN, OnStaticLButtonDown)
.
.
.
END_MESSAGE_MAP()
.
.
.
BOOL CChartDlg::OnInitDialog(){
m_mystatic.SubclassDlgItem(IDC_OPENGL,this);
//IDC_OPENGL是static text的id
}
LRESULT CChartDlg::OnStaticMouseMove(WPARAM
wParam, LPARAM lParam)
{
//先得到当前鼠标坐标
CPoint point;
GetCursorPos(&point);
//然后得到static控件rect。
CRect rect;
::GetClientRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&rect);
//然后把当前鼠标坐标转为相对于rect的坐标。
::ScreenToClient(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&point);
if(rect.PtInRect(point))
{
CString strPos;
strPos.Format(L"%d:%d", point.x, point.y);
GetDlgItem(IDC_STATIC2)->SetWindowTextW(strPos);
}
return TRUE;
}
LRESULT CChartDlg::OnStaticLButtonDown(WPARAM
wParam, LPARAM lParam)
{
// MessageBox(L"wokao");
//先得到当前鼠标坐标
CPoint point;
GetCursorPos(&point);
//
然后得到static控件rect。
CRect rect;
::GetClientRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&rect);
//然后把当前鼠标坐标转为相对于rect的坐标。
::ScreenToClient(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&point);
if(rect.PtInRect(point))
{
CString strPos;
strPos.Format(L"%d:%d", point.x, point.y);
MessageBox(strPos);
}
return TRUE;
}
//添加头文件 MyStatic.h
#ifndef
MYSTATIC_H
#define MYSTATIC_H
#pragma on
ce
#include
"afxwin.h"
// 自定义消息
#define WM_STATICMOUSE
WM_USER+5
#define WM_STATICLBUTTONDOWN WM_USER+4
class CMyStatic :
public CStatic
{
public:
CMyStatic(void);
~CMyStatic(void);
DECLARE_MESSAGE_MAP()
afx_msg void OnMouseMove(UINT
nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT
nFlags, CPoint point);
};
#endif
//添加
实现文件 MyStatic.cpp
#include "StdAfx.h"
#include
"MyStatic.h"
CMyStatic::CMyStatic(void)
{
}
CMyStatic::~CMyStatic(void)
{
}
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void
CMyStatic::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this->GetParent() !=NULL)
GetParent()->SendMessage(WM_STATICMOUSE);
CStatic::OnMouseMove(nFlags,
point);
}
void CMyStatic::OnLButtonDown(UINT
nFlags, CPoint point)
{
if(this->GetParent()
!=NULL)
GetParent()->SendMessage(WM_STATICLBUTTONDOWN);
CStatic::OnLButtonDown(nFlags,point);
}
//对话框头文件
ChartDlg.h
// ChartDlg.h : 头文件
//
#include "OpenGL.h"
#include
"MyEdit.h"
#include "MyStatic.h"
#pragma once
//
CChartDlg 对话框
class CChartDlg : public CDialog
{
public:
.
.
.
CMyStatic
m_mystatic;
.
.
.
afx_msg LRESULT OnStaticMouseMove(WPARAM
wParam, LPARAM lParam);
afx_msg LRESULT OnStaticLButtonDown(WPARAM
wParam, LPARAM lParam);
};
//对话框实现文件 ChartDlg.cpp
//
ChartDlg.cpp : 实现文件
//
#include "stdafx.h"
#include
"Chart.h"
#include "ChartDlg.h"
#ifdef _DEBUG
#define
new DEBUG_NEW
#endif
.
.
.
BEGIN_MESSAGE_MAP(CChartDlg,
CDialog)
.
.
.
ON_MESSAGE(WM_STATICMOUSE, OnStaticMouseMove)
ON_MESSAGE(WM_STATICLBUTTONDOWN, OnStaticLButtonDown)
.
.
.
END_MESSAGE_MAP()
.
.
.
BOOL CChartDlg::OnInitDialog(){
m_mystatic.SubclassDlgItem(IDC_OPENGL,this);
//IDC_OPENGL是static text的id
}
LRESULT CChartDlg::OnStaticMouseMove(WPARAM
wParam, LPARAM lParam)
{
//先得到当前鼠标坐标
CPoint point;
GetCursorPos(&point);
//然后得到static控件rect。
CRect rect;
::GetClientRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&rect);
//然后把当前鼠标坐标转为相对于rect的坐标。
::ScreenToClient(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&point);
if(rect.PtInRect(point))
{
CString strPos;
strPos.Format(L"%d:%d", point.x, point.y);
GetDlgItem(IDC_STATIC2)->SetWindowTextW(strPos);
}
return TRUE;
}
LRESULT CChartDlg::OnStaticLButtonDown(WPARAM
wParam, LPARAM lParam)
{
// MessageBox(L"wokao");
//先得到当前鼠标坐标
CPoint point;
GetCursorPos(&point);
//
然后得到static控件rect。
CRect rect;
::GetClientRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&rect);
//然后把当前鼠标坐标转为相对于rect的坐标。
::ScreenToClient(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),
&point);
if(rect.PtInRect(point))
{
CString strPos;
strPos.Format(L"%d:%d", point.x, point.y);
MessageBox(strPos);
}
return TRUE;
}
相关文章推荐
- MFC 鼠标定位于控件上动态弹出通知的实现方法
- 通过监听Windows消息实现控件的键盘和鼠标事件路由
- 用鼠标左击事件实现移动WinForm中控件
- MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件
- 继承MFC控件后怎么响应鼠标单双击事件
- C++实现WebBrowser控件中对鼠标点击事件的监听,并获取所点击标签的超链接
- MFC动态创建控件并响应事件代码实现过程
- 我的YUV播放器MFC小笔记:右键菜单事件和非标题实现鼠标拖动
- 【框架-MFC】MFC 在捕获控件外(窗口外)鼠标事件
- mfc picture控件响应鼠标右键事件
- 解决方案:c#鼠标离开到子控件也触发MouseLeave事件的解决方法
- Silverlight实用窍门系列:12.继承于某些固定控件(以Grid为例)的鼠标左键双击事件的实现【附带实例源码】
- MFC实现背景透明,控件不透明的对话框,且点击图片有事件响应
- 12.继承于某些固定控件(以Grid为例)的鼠标左键双击事件的实现
- ASP.NET基础教程-DataGrid表格控件-利用ItemDataBound事件实现鼠标移动到控件的某一行时改变该行的背景色
- MFC/VC中怎样实现slider滑块控件鼠标点击那里,就刚好落到点击位置
- MFC按钮控件Button按下和弹起事件实现示例
- DevExpress NavBarControl控件鼠标左键单击Group实现Expanded(NavBarGroup触发展开或者折叠事件?)
- ArcEngine中实现axMapControl控件鼠标左击右击响应不同事件
- MFC:为STATIC控件添加鼠标移动事件(VS2010)