G Kumar P Ответов: 2

EM_CHARFROMPOS всегда возвращает результат как (65535, 65535)


Точка соединения ;
::GetCursorPos(&point);

CEdit* pt = (CEdit*)GetDlgItem(IDC_SOMEID);
Типа DWORD dEditcontrol = метод SendMessage(EM_CHARFROMPOS,(параметр wparam)0,(параметр lparam)&усилителя;точка);
int CharPostrion = HIWORD(dEditcontrol);
int CharPo = LOWORD(dEditcontrol);

Что я уже пробовал:

Может ли какое-то тело подсказать, почему я получаю результат как (65535, 65535)
в Шарпострионе и Чарпро.

2 Ответов

Рейтинг:
2

Yofoo

EM_CHARFROMPOS message lParam should 4 Byte, CPoint is 8 Byte

MAKELPARAM(x, y);    //use this to replace CPoint


Рейтинг:
0

Richard MacCutchan

Скорее всего, потому, что координаты в точечной структуре находятся за пределами окна клиента. Вам нужно преобразовать их с экрана в координаты клиента. Смотрите ссылки: Функция GetCursorPos (winuser.h) - Win32 apps | Microsoft Docs[^] и Сообщение EM_CHARFROMPOS (Winuser.h) - Win32 apps | Microsoft Docs[^].


G Kumar P

Crect тогда вертолет;
Точка соединения ;
::GetCursorPos(&point);

CEdit* pt = (CEdit*)GetDlgItem(IDC_SOMEID);
pt->GetWindowRect(&rc);
pt->ScreenToClient(rc);

Типа DWORD dEditcontrol = ПТ-и GT;метод SendMessage(EM_CHARFROMPOS,(параметр wparam)0,(параметр lparam)&усилителя;точка);
int CharPostrion = HIWORD(dEditcontrol);
int CharPo = LOWORD(dEditcontrol);

Все еще получаю тот же результат, что и (65535, 65535)

Richard MacCutchan

Вы вызываете ScreenToClient по неправильным значениям, ему нужно передать точечную структуру из GetCursorPos. Видеть Класс CWnd | Microsoft Docs[^].