Проблемы с трек -сидвентомC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблемы с трек -сидвентом

Сообщение Anonymous »

У меня есть кнопка подклассов, которую я пытаюсь подчеркнуть, когда курсор мыши над ней. Тем не менее, я не могу получить функцию TrackMouseeVent () для правильной работы. Вот код, который создает подкласс: < /p>

Код: Выделить всё

hBtn = CreateWindow(L"button", L"", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, 0, 0, 0, 0, hWnd, HMENU(400), hInst, NULL);
SetWindowSubclass(hBtn[0], subSIproc, 400, 0);
< /code>
Вот процедура подкласса: < /p>
LRESULT CALLBACK subSIproc(HWND hButton, UINT iMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uId, DWORD_PTR dwRefData){
int     HIflag=0;

switch(iMsg)
{
case WM_MOUSEMOVE:
{
TRACKMOUSEEVENT me{};
me.cbSize = sizeof(TRACKMOUSEEVENT);
me.dwFlags = TME_HOVER | TME_LEAVE;
me.hwndTrack = hButton;
me.dwHoverTime = HOVER_DEFAULT;
TrackMouseEvent(&me);
HIflag = 1;
RedrawWindow(hButton, NULL, NULL, RDW_INVALIDATE);
}

case WM_MOUSEHOVER:
{
HIflag = 2;
RedrawWindow(hButton, NULL, NULL, RDW_INVALIDATE);
}

case WM_MOUSELEAVE:
{
TRACKMOUSEEVENT me{};
me.cbSize = sizeof(TRACKMOUSEEVENT);
me.dwFlags = TME_HOVER | TME_LEAVE | TME_CANCEL;
me.hwndTrack = hButton;
me.dwHoverTime = HOVER_DEFAULT;
TrackMouseEvent(&me);
HIflag = 3;
RedrawWindow(hButton, NULL, NULL, RDW_INVALIDATE);
}

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hButton, &ps);
if(HIflag==0)  FillRect(hdc, &ps.rcPaint, CreateSolidBrush(0x007F7F7F));
if(HIflag==1)  FillRect(hdc, &ps.rcPaint, CreateSolidBrush(0x00FF0000));
if(HIflag==2)  FillRect(hdc, &ps.rcPaint, CreateSolidBrush(0x000000FF));
if(HIflag==3)  FillRect(hdc, &ps.rcPaint, CreateSolidBrush(0x0000FF00));
EndPaint(hButton, &ps);
}
}
return DefSubclassProc(hButton, iMsg, wParam, lParam);
}
< /code>
переменная "hiflag" имеет четыре возможных значения, чтобы определить, какие сообщения принимаются, и когда --- '0' (grey) без полученных сообщений; '1' (синий) для wm_mousemove 
'2' (красный) для wm_mousehover и '3' для wm_mouseleave Кнопка остается серым, пока я не перемещаю курсор на кнопку. В этот момент он становится зеленым (указывая на «wm_mouseleave»). Он должен покраснеть (для "wm_mousehover") и не становиться зеленым, пока я не отодвинул курсор от кнопки. Кнопка теперь остается зеленой, где бы я ни двигал курсор.
Кто -нибудь знает, что я делаю не так?>

Подробнее здесь: https://stackoverflow.com/questions/653 ... t-problems
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»