关于C++MFC获取鼠标消息的问题

关于C++MFC获取鼠标消息的问题,第1张

对话框坐标可以使用GetWindowRect获取。

鼠标坐标一般在OnMouseMove里面通过参数获取。

这个最好有具体需求描述,因为获取方式很多,用于不同的窗口和不同的需要。

动态创建的和通过拖控件的CListCtrl一样,通过添加LVN_ITEMCHANGED消息响应,可以实现当前选中行的信息。如果是动态创建,IDC_LIST1是你动态创建的ListCtrl的ID。

ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnLvnItemchangedList1)

// 用全局键盘钩子。要写一个DLL库。代码如下:

#include <windowsh>

#pragma data_seg("HookData")

HHOOK g_hHook = NULL;

HINSTANCE g_hInstDLL = NULL;

#pragma data_seg()

#pragma comment(linker,"/SECTION:HookData,RWS")

BOOL APIENTRY DllMain(HINSTANCE hInstDLL

DWORD fdwReason,

LPVOID lpvReserved)

{

g_hInstDLL = hInstDLL;

return TRUE;

}

// 回调函数

LRESULT WINAPI HookProc(int nCode, WPARAM wParam, LPARAM lParam)

{

// 请在这里添加消息处理代码

// 将事件传递到下一个钩子

return CallNextHookEx(g_hHook, nCode, wParam, lParam);

}

// 安装钩子

extern "C" __declspec(dllexport) VOID InstallHook()

{

g_hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, _hInstDLL, 0);

}

// 卸载钩子

extern "C" __declspec(dllexport) DWORD KillHook(void)

{

UnhookWindowsHookEx(g_hHook);

}

/ Copyrights (C) 2010 夺魂狼剑 All rights reserved /

可以在程序中使用LoadLibrary()函数来动态加载这个DLL库,并用GetProcAddress()来找到DLL中的导出函数。

希望能对你有所帮助。

--------------------------------------------------------------------------------------------

HookProc是回调函数,每当捕获到键盘消息,就被自动调用,消息参数wParam是对应的虚拟键代码,可以把它强制转换为ASCII字符,lParam可以判断Ctrl、Alt、Shift等控制键。

每当键盘被按下,就会产生一个WM_KEYDOWN消息,如果被按下的是字母键,还会产生WM_CHAR消息。释放键盘,会产生WM_KEYUP消息。你可以根据实际需要进行捕获。

你不用截获这个消息,你只要定时判断任务栏窗口是否隐藏就好了。如果你一定要通过截获消息判断的话,你就要用windows hook机制了,不过不推荐,因为hook涉及dll注入,有可能会被报毒。

1重载PreTranslateMessage函数

2实现如下代码

BOOL

CMouseDlg::PreTranslateMessage(MSG

pMsg)

{

//

TODO:

Add

your

specialized

code

here

and/or

call

the

base

class

if(pMsg->hwnd

==

GetDlgItem(IDC_BUTTON1)->GetSafeHwnd()

&&

pMsg->message

==

WM_MOUSEMOVE)

{

CString

windowText;

GetDlgItem(IDC_BUTTON1)->GetWindowText(windowText);

//得到按钮文本

GetDlgItem(IDC_STATIC1)->SetWindowText(windowText);

//显示到静态文本框

}else

if(pMsg->hwnd

==

GetDlgItem(IDC_BUTTON2)->GetSafeHwnd()

&&

pMsg->message

==

WM_MOUSEMOVE)

{

CString

windowText;

GetDlgItem(IDC_BUTTON2)->GetWindowText(windowText);

GetDlgItem(IDC_STATIC1)->SetWindowText(windowText);

}

return

CDialog::PreTranslateMessage(pMsg);

}

添加WM_KEYDOWN 消息,在OnKeyDown里面根据键判断回车键,获取按键, 获取文本,可以利用CEditView本身的函数,比如先利用GetEditCtrl

获得该编辑控件 ,然后调用编辑控件的函数获得文本内容。

以上就是关于关于C++/MFC获取鼠标消息的问题全部的内容,包括:关于C++/MFC获取鼠标消息的问题、mfc 动态创建的 CListCtrl 如何获取选中行的信息 要响应什么消息、VC/MFC如何实现后台捕捉键盘消息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9739358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存