[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:04438] 時計の表示幅



亀井さん、こんにちは。
日沼です。

ずいぶんひさしぶりの投稿でなんですが、ステータスバー右下の時計表示部分
の幅を動的に決定してほしいです。Windows 2000でデフォルトのTahomaフォント
が使われていると時計の数字の右端1ピクセルくらい欠けたり、Fixedフォント
が使われているときは逆にステータスバーの幅が広がりすぎてしまいますんで。

具体的には、toplev.ccの
Clock::size()
Clock::timer()
あたりで、

  GetLocalTime (&st);
  sprintf (b, "%02d/%02d %02d:%02d",
           st.wMonth, st.wDay, st.wHour, st.wMinute);
  .
  .
  strcpy (lbuf, b);
  GetTextExtentPoint32 (hdc, lbuf, lstrlen(lbuf), &sz);
  GetClientRect (hwnd, &br);
  int sbw = GetSystemMetrics (SM_CXVSCROLL)   /*サイズ変更ボックスの幅くらい*/
           +GetSystemMetrics (SM_CXSIZEFRAME);/*ステータスバーのセパレータの影の幅くらい*/
  int w[] = {br.right - sz.cx - sbw, -1};
  SendMessage (hwnd, SB_SETPARTS, 2, LPARAM (w));
  SendMessage (hwnd, SB_SETTEXT, 1, LPARAM (lbuf));

という感じでしょうか。
自分のところでいろいろやって無事動くことは確認できたんですが、
size()がほとんど意味をなさなくなったり、timer()がごっそり変わって
汚くなったり、timer()がどれくらいの頻度で呼ばれるのかは調べてなくて
すごく遅くなる気もしたりして、怖いです。

/// 日沼 諭史                     @DTI /
// HINUMA SATOSHI        Tokyo, Japan //
/ InternetMail: hinu@xxxxxxxxxxxxxxx ///

Index Home