◀ANSI版開発トップへ
  • 3437 ステータスバーの文字がはみ出す件
    • 3440 Re:ステータスバーの文字がはみ出す件
      • 3442 Re2:ステータスバーの文字がはみ出す件
      • 3443 Re2:ステータスバーの文字がはみ出す件
        • 3445 Re3:ステータスバーの文字がはみ出す件
        • 3446 Re3:ステータスバーの文字がはみ出す件
  • [3437] ステータスバーの文字がはみ出す件 fotomo 2004年02月23日 09:30

    2002年の12月にサクラエディタのソースをダウンロードさせて
    頂き、改造して個人使用させて頂いております。

    オリジナルサクラ側で起こる現象かどうかわかりませんが、

    ・デスクトップの右クリック⇒プロパティー⇒デザイン
     から、配色を「ハイコントラスト黒(特大フォント)」
     としたときに、ステータスバーにカーソル位置などの
     文字列が入りきらずにはみ出してしまいます。

     CEditWndクラスのOnSize関数内のGetTextExtentPoint32
     関数が正しい値を返してくれないらしいのですが・・・・。

     何かいい方法はありませんでしょうか?
     教えてください。
    • [3440] Re:ステータスバーの文字がはみ出す件 yasu 2004年02月25日 20:56

      WM_GETFONTで表示しているフォントを取得して、
      hdcに選択させれば正確な値を返すと思います。
      あと、カラム幅計算用の文字列の
      "SJIS "を"Unicode"にしておいた方が良いかも。
      // CEditWnd.cpp 3283行辺り
      hdc = ::GetDC( m_hwndStatusBar );
      HFONT hFont = (HFONT)::SendMessage(m_hwndStatusBar, WM_GETFONT, 0, 0);
      if (hFont != NULL)
      {
      hFont = (HFONT)::SelectObject(hdc, hFont);
      }
      ...
      // 使用後
      if (hFont != NULL)
      {
      ::SelectObject(hdc, hFont);
      }
      ::ReleaseDC( m_hwndStatusBar, hdc );
      • [3442] Re2:ステータスバーの文字がはみ出す件 fotomo 2004年02月26日 19:25

        ▼ yasuさん
        > WM_GETFONTで表示しているフォントを取得して、
        > hdcに選択させれば正確な値を返すと思います。
        > あと、カラム幅計算用の文字列の
        > "SJIS "を"Unicode"にしておいた方が良いかも。
        > // CEditWnd.cpp 3283行辺り
        > hdc = ::GetDC( m_hwndStatusBar );
        > HFONT hFont = (HFONT)::SendMessage(m_hwndStatusBar, WM_GETFONT, 0, 0);
        > if (hFont != NULL)
        > {
        > hFont = (HFONT)::SelectObject(hdc, hFont);
        > }
        > ...
        > // 使用後
        > if (hFont != NULL)
        > {
        > ::SelectObject(hdc, hFont);
        > }
        > ::ReleaseDC( m_hwndStatusBar, hdc );
        ありがとうございます。
        早速試してみます。
        m(_ _)m;
      • [3443] Re2:ステータスバーの文字がはみ出す件 げんた 2004年02月28日 13:29

        >WM_GETFONTで表示しているフォントを取得して、
        >hdcに選択させれば正確な値を返すと思います。
        普通の環境で試してみましたが,逆にどのセルも最後1文字ずつ足りなくなってしまいました.
        (´Д⊂グスン なんでだろう?
        • [3445] Re3:ステータスバーの文字がはみ出す件 yasu 2004年02月28日 22:42

          #投稿許可サイズオーバーが出たので本文は別口で

          --- ssrc_2004-02-15\sakura_core\CEditWnd.cpp Sun Feb 15 14:32:43 2004
          +++ CEditWnd.cpp Sat Feb 28 20:07:44 2004
          @@ -3272,22 +3272,31 @@
          // From Here
          int nStArr[8];
          // 2003.08.26 Moca CR0LF0廃止に従い、適当に調整
          - const char* pszLabel[7] = { "", "99999行 9999列", "CRLF ", "FFFFFFFF", "SJIS ", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん
          + // 2004-02-28 yasu 文字列を出力時の書式に合わせる
          + const char* pszLabel[7] = { "", "999999 行 99999 列", "CRLF", "0000", "Unicode", "REC", "上書" }; //Oct. 30, 2000 JEPRO 千万行も要らん
          int nStArrNum = 7;
          // To Here
          - int nAllWidth;
          + int nAllWidth = rc.right - rc.left;
          + int nSbxWidth = ::GetSystemMetrics(SM_CXVSCROLL) + ::GetSystemMetrics(SM_CXEDGE); // サイズボックスの幅
          + int nBdrWidth = ::GetSystemMetrics(SM_CXSIZEFRAME) + ::GetSystemMetrics(SM_CXEDGE) * 2; // 境界の幅
          SIZE sz;
          HDC hdc;
          int i;
          - nAllWidth = rc.right - rc.left;
          + // 2004-02-28 yasu
          + // 正確な幅を計算するために、表示フォントを取得してhdcに選択させる。
          hdc = ::GetDC( m_hwndStatusBar );
          + HFONT hFont = (HFONT)::SendMessage(m_hwndStatusBar, WM_GETFONT, 0, 0);
          + if (hFont != NULL)
          + {
          + hFont = (HFONT)::SelectObject(hdc, hFont);
          + }
          nStArr[nStArrNum - 1] = nAllWidth;
          if( wParam != SIZE_MAXIMIZED ){
          - nStArr[nStArrNum - 1] -= 17; // 2003.08.26 Moca Lunaで「挿入」が「挿」になるので、16を17にした
          + nStArr[nStArrNum - 1] -= nSbxWidth;
          }
          for( i = nStArrNum - 1; i > 0; i-- ){
          ::GetTextExtentPoint32( hdc, pszLabel[i], lstrlen( pszLabel[i] ), &sz );
          - nStArr[i - 1] = nStArr[i] - ( sz.cx + ::GetSystemMetrics( SM_CXEDGE ) + 1 ); // 2003.08.26 Moca Luna向けに+1 してみる
          + nStArr[i - 1] = nStArr[i] - ( sz.cx + nBdrWidth );
          }

          // Nov. 8, 2003 genta
          @@ -3301,6 +3310,10 @@
          // nStArr[0] += 16;

          ::SendMessage( m_hwndStatusBar, SB_SETPARTS, nStArrNum, (LPARAM) (LPINT)nStArr );
          + if (hFont != NULL)
          + {
          + ::SelectObject(hdc, hFont);
          + }
          ::ReleaseDC( m_hwndStatusBar, hdc );


        • [3446] Re3:ステータスバーの文字がはみ出す件 yasu 2004年02月28日 22:45

          ▼ げんたさん
          > 普通の環境で試してみましたが,逆にどのセルも最後1文字ずつ足りなくなってしまいました.
          > (´Д⊂グスン なんでだろう?

          『行桁』の部分は出力時の書式が"%6d 行 %5d 桁"になってるため、
          今の文字列で正確な幅を出すと、はみ出るみたいです。
          計算用文字列を変更すれば正しく表示されると思います。
          他の部分はサイズボックスや境界部分の幅が影響してると思われるので、
          GetSystemMetrics()で正確な幅を計算すれば切れないはずです。

          上の差分で、うちではうまく表示されてます。(等幅フォントも可)
          Win2kSP4で確認。XPでは未確認。