リストボックスのスムーススクロールを無効にしたい

リストボックスで...

  • システムでリストボックスのスムーススクロールが有効になっている(SystemParameterInfo()のSPI_GETLISTBOXSMOOTHSCROLLINGがTRUE)
  • リストボックスがLBS_OWNERDRAWVARIABLEのとき

この条件を満たしているとき、PageDownキーや、スクロールバーでSB_PAGEDOWNが発生するタイミングで、本来のスクロール方向と逆向きにスクロールされてしまう現象があって困る。ぶっちゃけありえない理解不能な解決方法を発見。正しい方法がみつかるまでこれで対処。

// サブクラス化したListBoxのウィンドウプロシージャで。
switch(message) {
case WM_VSCROLL:
  SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE));
  return CallWindowProc(aho, hWnd, message, wParam, lParam);
}