
*-- To Tell The Truth --*
Cruz
MAIL
HOME
|
 |
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でステータスバーの分を差し引いた値を指定しているところ。 これをすることによって、ステータスバーがリストビューに隠れちゃったり、 リストビューの上にステータスバーが乗っちゃったりすることは解消される。 ・・・のだが、何故色変え処理つきはうまく行かないのだろう?
|
|