我有一个由 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/