Понадобилась прокрутка текста внутри RichEdit элемента, даже в том случае, если оно не в фокусе. Долго думать не пришлось, все довольно тривиально:
LRESULT CALLBACK mainDlgProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { .. .. case WM_MOUSEWHEEL: { // catch MOUSE WHEEL message POINT pos; GetCursorPos(&pos); if (WindowFromPoint(pos) == GetDlgItem(hwnd, IDC_RICHEDIT1)) { // process message, if cursor over our richedit control // get Delta int zDelta = GET_WHEEL_DELTA_WPARAM(wparam); if (zDelta > 0) // scroll up SendDlgItemMessage(hwnd, IDC_RICHEDIT1,WM_VSCROLL,SB_LINEUP,0L); else // scroll down SendDlgItemMessage(hwnd, IDC_RICHEDIT1,WM_VSCROLL,SB_LINEDOWN,0L); return 1L; } break; } .. ..
Грубо говоря, перехватываем сообщение WM_MOUSEWHEEL, каждый раз когда мы крутим колесико мыши, срабатывает вышеприведенный кусок кода. В нем мы определяем позицию курсора мыши в момент получения сообщения, сравниваем хэндл окна под ним с хэндлом нашего целевого RichEdit элемента. Если они совпадают, то начинаем смотреть в какую сторону это самое колесико крутилось. От себя — прокручиваем вверх, к себе — прокручиваем вниз.