我在CRich Edit 里设置了文本链接,WM_SETCUSOR是鼠标放到链接上的事件,但是我想捕获鼠标离开文本链接的事件,怎么办,谢谢

xixuanfong 2008-07-29 10:34:30
急,大侠帮忙指点
...全文
128 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanshao27 2008-08-04
  • 打赏
  • 举报
回复
参考一下
//此文件是纯 WIN32 SDK 编写,不需要MFC等支持。可在DOS模式下编译。

//FileName: MouseLevel.c
#include <windows.h>#include <commctrl.h> //必须导入此头文件
#ifndef APP_NAME#define APP_NAME TEXT("My MouseHover test")#endif
const int SUCCEED =0;
ATOM RegisterFormClass(HINSTANCE);BOOL InitInstance(HINSTANCE,int);LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){ MSG msg; RegisterFormClass(hInstance); if(!InitInstance(hInstance,iCmdShow)) return FALSE; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return SUCCEED;}
ATOM RegisterFormClass(HINSTANCE hInstance){ WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wcex.hCursor = LoadCursor(NULL,IDC_ARROW); wcex.hIcon = LoadIcon(hInstance,IDI_APPLICATION); wcex.hIconSm = LoadIcon(NULL,IDI_APPLICATION); wcex.hInstance = hInstance; wcex.lpfnWndProc = WndProc; wcex.lpszClassName = APP_NAME; wcex.lpszMenuName = NULL; wcex.style = CS_HREDRAW | CS_VREDRAW; return RegisterClassEx(&wcex);}
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow){ HWND hWnd; hWnd = CreateWindowEx(WS_EX_APPWINDOW, APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd,iCmdShow); UpdateWindow(hWnd); return TRUE;}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg) { case WM_MOUSELEAVE: MessageBox(hWnd,TEXT("MouseLeave!"),TEXT("MouseLeave"),0); break; case WM_MOUSEHOVER: MessageBox(hWnd,TEXT("MouseHover"),TEXT("MouseHover"),0); break; case WM_NCMOUSELEAVE: MessageBox(hWnd,TEXT("MouseNClient!"),TEXT("MouseNClient!"),0); break; case WM_MOUSEMOVE: //因为 TRACKMOUSEEVENT 只发送一次消息,且随着其它消息产生而失效,所以在此消息中调用函数。
TRACKMOUSEEVENT trmouse; trmouse.cbSize = sizeof(TRACKMOUSEEVENT); trmouse.dwFlags = TME_LEAVE | TME_HOVER | TME_NONCLIENT; trmouse.dwHoverTime = 2000; trmouse.hwndTrack = hWnd; if(!_TrackMouseEvent(&trmouse)) return FALSE; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd,uMsg,wParam,lParam); break; } return SUCCEED;}
cnzdgs 2008-08-03
  • 打赏
  • 举报
回复
直接用lParam参数就可以,LOWORD(lParam)是x坐标,HIWORD(lParam)是y坐标,都是相对于目标控件客户区的。
如果用GetCursorPos得到的是相对于整个屏幕的,还需要再ScreenToClient转换为RichEdit控件的客户区坐标才行。
xixuanfong 2008-08-03
  • 打赏
  • 举报
回复
人呢
xixuanfong 2008-08-01
  • 打赏
  • 举报
回复
CPoint ptCursor;
GetCursorPos(&ptCursor);

int iposChar = m_RichEditTest.CharFromPos(ptCursor);

是这样用么
xixuanfong 2008-08-01
  • 打赏
  • 举报
回复
可是我把鼠标放到链接字符串的位置上时,返回的也是最后一个字符的索引啊,怎么回事呢,谢谢
cnzdgs 2008-08-01
  • 打赏
  • 举报
回复
当指定点超出控件中的最后一个字符时,CharFromPos的返回值是最后一个字符的索引,需要自己处理一下。
xixuanfong 2008-08-01
  • 打赏
  • 举报
回复
ENLINK里我保存了chrg.cpMin和chrg.cpMax(在鼠标移动到我指定的链接上后)

但是我在PreTranslateMessage函数里得到的字符索引是一个固定的值啊,用CharFromPos得到字符索引能直接和cpMin、cpMax比较么
cnzdgs 2008-08-01
  • 打赏
  • 举报
回复
哪里有问题?
xixuanfong 2008-08-01
  • 打赏
  • 举报
回复
不行啊
cnzdgs 2008-07-30
  • 打赏
  • 举报
回复
我刚刚试了一下,无法直接获得鼠标从链接上移开的消息。你可以这样试试,在响应EN_LINK通知时把链接的字符索引范围记录下来;另外重载主窗口的PreTranslateMessage函数,在函数中判断发给RichEdit的WM_MOUSEMOVE消息,用CharFromPos获取鼠标指向的字符索引,判断如果超出了EN_LINK通知的索引范围,就表示鼠标从链接上移开了,清除索引范围记录,然后做自己的处理。
xixuanfong 2008-07-30
  • 打赏
  • 举报
回复
能给个例子么
xixuanfong 2008-07-30
  • 打赏
  • 举报
回复
WM_SETCURSOR 我用了啊,这个是鼠标放到链接上响应的事件啊

我想要知道什么时候鼠标离开链接
cnzdgs 2008-07-29
  • 打赏
  • 举报
回复
我搞错了,当成控件了。
你响应WM_SETCURSOR消息就可以了,当控件是RichEdit、nHitTest是HTTOP时设置指针,其它情况恢复指针。
xixuanfong 2008-07-29
  • 打赏
  • 举报
回复
WM_MOUSELEAVE我试过了不行的,其他两个我明天再看看

我是指捕获鼠标离开文本链接的事件,我是响应的EN_LINK消息,在这个消息里面怎么捕获呢
cnzdgs 2008-07-29
  • 打赏
  • 举报
回复
TrackMouseEvent,WM_MOUSEHOVER、WM_MOUSELEAVE。
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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