gpt4 book ai didi

c++ - 在 createddialog 创建的窗口中捕获 OnMouseMove 消息以进行编辑控件?

转载 作者:行者123 更新时间:2023-12-02 10:35:52 24 4
gpt4 key购买 nike

我有一个由 CreateDialog() 创建的对话窗口.

在对话窗口中有一个由CreateDialog() 自动创建的文本编辑控件。打电话,但我似乎听不到 OnMouseMove它的消息 - 只有它的父窗口(控件,而不是对话框)。 CreateDialog()只允许您为主对话框(不是子对象,如编辑控件)设置过程函数,如果我捕获 OnMouseMove那里的消息,它们只会触发主对话框本身上的鼠标移动(任何没有控件的地方,例如按钮,文本编辑框等)。

没有使用 CreateWindowEx() 手动创建窗口(以及所有子对象),有没有办法捕捉 OnMouseMove与特定文本编辑控件通过其 ID 关联的消息还是什么?我已通过 GetDlgItem() 检索到它的句柄.

我最终要完成的是阅读鼠标光标下方的文本并在单词被识别/匹配时显示相关的工具提示,如果您有任何想法,我绝对愿意接受其他选择!

这是基本代码:

使用 DBG_DLG 创建对话框定义控件的模板

hDbg = CreateDialog(hCurInst, TEXT("DBG_DLG"), 0, DbgDlgProc);
DBG_DLG模板在项目的 .rc 中定义文件。我找不到在此处粘贴该代码的简单方法,但它有一个特定的文本编辑控件,我试图用 ID 捕获 ID_OP_ED .

来自 DbgDlgProc()的相关代码这不起作用,并且只捕获与主对话框相关的消息,而不是控件本身。将鼠标悬停在控件上不会导致此例程捕获任何消息。

BOOL CALLBACK DbgDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{

switch(message)
{
case WM_INITDIALOG:

return TRUE;
case WM_MOUSEMOVE:
OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), (DWORD)wParam);
return FALSE;

最佳答案

一旦你有了子文本编辑的 HWND(来自 GetDlgItem() ),你可以直接子类化它,使用 SetWindowLongPtr()或更好SetWindowSubclass() .您的子类将接收所有直接发送到控件的消息。

有关详细信息,请参阅 MSDN:

Subclassing Controls

关于c++ - 在 createddialog 创建的窗口中捕获 OnMouseMove 消息以进行编辑控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60355560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com