初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2001年07月19日(木)
多機能(?)リストビューにステータスバー取り付け

できません!


悩んだ、調べた、試した。
結果、できないんだな。これが・・・。

私の作っているリストビュー画面は、行毎に文字色が変わるという
(ちょっと)多機能もの。
こいつにステータスバーを取り付けようと、いろいろイロイロ四苦八苦
してみたところ、縦スクロールを行うと、ステータスバーが流れる。
(というか・・・崩れると言うか)
おまけに横スクロールバーは初期画面では表示されないし、
表示が出たと思ったら、ステータスバーに重ね表示されているし。
縦スクロールの下側▼マークは、ステータスバーに隠れているし。

要するに使えないって事。

ちなみに、色変え処理をしていないシンプルなリストビューには
ステータスバーをつけることが可能です。
(試した)

ソースはこちら・・・

+++++++++++++++

 case WM_CREATE:
  // コモンコントロール初期化
  INITCOMMONCONTROLSEX iccex;
  iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  iccex.dwICC = ICC_LISTVIEW_CLASSES | ICC_BAR_CLASSES;
  InitCommonControlsEx(&iccex);

  // リストビュー作成
  hList = CreateWindowEx(0,
      WC_LISTVIEW, "",
      WS_CHILD | WS_VISIBLE | LVS_REPORT,
      0, 0, 0, 0,
      hWnd,
      (HMENU)ID_LISTVIEW,
      hInst,
      NULL);

  // リストビューの初期設定(一行選択&グリッド)
  dwStyle = ListView_GetExtendedListViewStyle(hList);
  dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
  ListView_SetExtendedListViewStyle(hList, dwStyle);

  // ステータスバーの表示
  hStatus = CreateStatusWindow(
    WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | CCS_BOTTOM | SBARS_SIZEGRIP,
"", hWnd, ID_STATUSWIN);
  break;
 case WM_SIZE:
  {
   int cx = LOWORD(lp);
   int cy = HIWORD(lp);
   int cyStatusbar;
   RECT rc;

   // ステータスバーのリサイズ
   SendMessage(hStatus, WM_SIZE, 0, 0);
   GetWindowRect(hStatus, &rc);
   cyStatusbar = rc.bottom - rc.top;
   // リストビューのリサイズ
   MoveWindow(hList, 0, 0, cx, cy - cyStatusbar, TRUE);
  }
  break;

ポイントはWM_SIZEの所でリサイズし、リストビューのMoveWindowでステータスバーの分を差し引いた値を指定しているところ。
これをすることによって、ステータスバーがリストビューに隠れちゃったり、
リストビューの上にステータスバーが乗っちゃったりすることは解消される。
・・・のだが、何故色変え処理つきはうまく行かないのだろう?