如何通过钩子挂接WM_MOUSEHOVER和WM_NCMOUSEHOVER?

XXKKFF 2007-05-01 12:33:43
我写的代码如下:
#define WINVER 0X0500
#define _WIN32_WINNT 0X0500
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
TCHAR* szAppName = TEXT("MOUSEHOVER");
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.lpszClassName = szAppName;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;

wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
wndclass.lpfnWndProc = WndProc;
wndclass.hInstance = hInstance;

if( !RegisterClass(&wndclass) )
return 0;
hwnd = CreateWindow(
szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow( hwnd,nCmdShow );
UpdateWindow( hwnd );
while( GetMessage(&msg,NULL,0,0) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam )
{
switch( wParam )
{
case WM_MOUSEHOVER:
MessageBox( ((PMOUSEHOOKSTRUCT)lParam)->hwnd, TEXT("mousehover hooked"), TEXT("mousehover"), MB_OK);
break;
case WM_NCMOUSEHOVER:
MessageBox( ((PMOUSEHOOKSTRUCT)lParam)->hwnd, TEXT("ncmousehover hooked"), TEXT("ncmousehover"), MB_OK);
case WM_LBUTTONDOWN:
MessageBox(((PMOUSEHOOKSTRUCT)lParam)->hwnd, TEXT("lbuttondown hooked"), TEXT("lbuttondown"), MB_OK);
break;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_CREATE:
{
SetWindowsHookEx(WH_MOUSE,MouseProc,
((LPCREATESTRUCT)lParam)->hInstance,
GetCurrentThreadId());
return 0;
}
case WM_MOUSEMOVE:
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_HOVER/* | TME_NONCLIENT*/;
tme.dwHoverTime = 500;
tme.hwndTrack = hwnd;

TrackMouseEvent(&tme);

return 0;
}
case WM_MOUSEHOVER:
MessageBox(hwnd, TEXT("mousehover"), TEXT("mouseHover"), MB_OK);
return 0;
case WM_NCMOUSEHOVER:
MessageBox(hwnd,TEXT("ncmouseHover"), TEXT("ncMouseHover"), MB_OK);
return 0;
case WM_LBUTTONDOWN:
MessageBox(hwnd,TEXT("lbuttondown"), TEXT("lbuttondown"), MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam );
}

只挂接到了WM_LBUTTONDOWN,没有挂接到WM_MOUSEHOVER.怎么才能挂接这两个消息?
还有,我把TME_HOVER和TME_NONCLIENT一起用时,连在窗口过程中的WM_MOUSEHOVER也没有了.在网上搜到这个帖子http://topic.csdn.net/t/20050304/16/3825225.html,最后一个回复讲了一下.
希望大家能再讲详细一点
...全文
492 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
XXKKFF 2007-05-02
  • 打赏
  • 举报
回复
我已经调用了TrackMouseEvent,看我的代码
mopyman 2007-05-02
  • 打赏
  • 举报
回复
WM_MOUSELEAVE也是如此

----------------
/********************************
*用linux上CSDN发帖也这么爽,哈哈
********************************/
mopyman 2007-05-02
  • 打赏
  • 举报
回复
WM_MOUSEHOVER消息并不会自动产生,系统默认是不产生这个消息的,你要在WM_MOUSEMOVE里自己产生,用TRACKMOUSEEVENT.

----------------
/********************************
*用linux上CSDN发帖也这么爽,哈哈
********************************/
XXKKFF 2007-05-01
  • 打赏
  • 举报
回复
解决了一个问题.通过WH_GETMESSAGE钩到了WM_MOUSEHOVER

但是为什么WH_MOUSE不行呢?

还有为什么TME_HOVER 和TME_NONCLIENT一起用会有问题?
XXKKFF 2007-05-01
  • 打赏
  • 举报
回复
XXKKFF 2007-05-01
  • 打赏
  • 举报
回复
挂接WM_MOUSEMOVE做什么?

没看明白
Y___Y 2007-05-01
  • 打赏
  • 举报
回复
挂接WM_MOUSEMOVE看看
WM_MOUSEHOVER实际上由WM_MOUSEMOVE产生
内容概要:本文详细介绍了“电动汽车聚合可行域的内-外结合近似方法”的Matlab代码实现,旨在通过数值仿真手段对大规模电动汽车集群作为灵活资源参与电网调度的能力边界进行建模与逼近。该方法融合内部凸包构造与外部约束逼近策略,精确刻画电动汽车在充电状态、功率调节、时间维度等方面的聚合可调能力范围,形成紧致的可行域表示,为高比例电动车接入下的电力系统优化调度、需求响应、车网互动(V2G)等关键应用提供可靠的建模基础。文中强调科研应兼顾严谨逻辑与创新思维,并倡导借助YALMIP等成熟优化工具提升研究效率。完整的代码、工具包及相关案例可通过指定网盘链接和微信公众号“荔枝科研社”获取。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员,尤其适用于从事新能源并网、电动汽车调度、智能电网、综合能源系统等方向的研究生与工程技术人员。; 使用场景及目标:①研究大规模电动汽车集群的聚合建模与灵活性量化方法;②实现电动汽车聚合可行域的内-外近似算法;③支撑含高渗透率电动汽车的电力系统日前-实时协同优化调度;④学习并应用YALMIP工具进行数学规划建模与求解;⑤为需求响应、市场机制设计及V2G运营提供技术支撑。; 阅读建议:建议读者按照文档指引循序渐进学习,结合网盘提供的完整资源(包括YALMIP工具包与示例代码)进行实践调试,重点掌握内-外近似方法的数学建模逻辑、约束处理技巧及优化求解流程,并参考团队发布的其他相关案例,深化对优化算法与仿真技术在能源系统中应用的理解。
下载代码方式:https://pan.quark.cn/s/93e47adaae45 医学研究人员近期识别了若干新型病毒,经由对这些病毒的解析,揭示出它们的遗传物质序列均呈现环状形态。当前,研究人员已汇集了丰沛的病毒遗传物质与人类遗传物质样本数据,期望能迅速辨识个体是否感染了相关病毒。为便于探究,研究人员将人类遗传物质与病毒遗传物质均表述为由若干字母构成的字符串序列。继而,检测某种病毒遗传物质序列是否在患者遗传物质序列中有所显现,倘若出现,则表明该个体感染了对应病毒,反之则未感染。《病毒感染检测实验报告》是在医学研究背景下,依托软件技术基础中的编程知识完成的一个课程设计任务,其目的在于评估人体是否感染特定病毒。在此实验中,病毒遗传物质与人类遗传物质被表现为字母序列,通过比对病毒遗传物质序列是否存在于人的遗传物质序列中,从而判定感染状态。在程序构建方面,该实验所涉及的核心知识要点包括: 1. **字符串操作**:程序需处理病毒遗传物质与人类遗传物质的序列,这些序列以字符串形式呈现。字符串操作涵盖输入、输出、比较及匹配等操作,是C/C++编程的基础。 2. **线性表**:遗传物质序列可视为线性数据结构,可通过数组来表示。程序运用全局变量数组`V`和`D`存储病毒与人的遗传物质序列。 3. **栈**:在循环展开病毒遗传物质时,可能需借助栈数据结构来保存某个阶段遗传物质序列的状态,以便进行所有可能的匹配尝试。 4. **BF算法**(Brute Force,暴力搜索算法):BF算法是一种基础性的字符串匹配方法,用于在文本中搜寻模式。在此,BF算法用于在人的遗传物质序列中探寻病毒遗传物质序列的所有展开形态。 5. **文件处理**:程序需从文件《病毒感染检测输入数据...
内容概要:本文系统研究了基于粒子群PSO、灰狼GWO、鲸鱼WOA、哈里斯鹰HHO、蜣螂DBO、麻雀SSA六种智能优化算法的无人机三维路径规划方法,并通过Matlab代码实现了在复杂三维环境下的路径搜索与优化对比。研究构建了包含障碍物、威胁区域等实际地形特征的空间模型,综合考虑路径长度、飞行时间、能耗及安全性等多维度成本函数,对各算法的寻优能力、收敛速度、稳定性和全局搜索性能进行了量化评估与深入分析。通过大量仿真实验,全面比较了不同算法在多样化环境条件下的路径规划表现差异,揭示了各类算法的优势与局限性,为无人机在实际任务中的自主导航与决策提供了可靠的算法选型依据和技术支撑。; 适合人群:具备一定Matlab编程基础,从事无人机路径规划、智能优化算法研究或相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握主流群智能优化算法在三维路径规划中的建模与实现方法;② 对比分析不同算法在复杂环境下的性能优劣,服务于算法选型与改进;③ 为无人机自主导航、无人系统协同控制等应用场景提供算法验证平台。; 阅读建议:此资源以Matlab代码为核心,建议读者结合代码与算法原理进行同步学习,通过调整环境参数与成本函数权重开展仿真实验,深入理解算法行为特征,并可根据自身研究需求进行二次开发与拓展。

16,550

社区成员

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

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

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