◀ANSI版開発トップへ
  • 1214 タイトルバーの再描画の抑制
    • 1216 Re:タイトルバーの再描画の抑制
      • 1217 Re:タイトルバーの再描画の抑制
      • 1218 Re:タイトルバーの再描画の抑制
        • 1219 Re:タイトルバーの再描画の抑制
  • [1214] タイトルバーの再描画の抑制 gae 2002年01月19日 00:41

    しばらくぶりです。
    久しぶりにソースをダウンロードしてビルドしてみました。
    CPrintPreviewクラスがプロジェクトに入ってないらしく、
    自分で追加してビルドを完了させました。
    それはおいといて、


    キーを入力する度にタイトルバーが再描画されてしまい鬱陶しいので、
    どなたか修正して反映していただけないでしょうか?

    void CEditDoc::SetParentCaption( BOOL bKillFocus )

    ここで、GetWindowTextで現在のウィンドウタイトルを取得し、
    文字列の内容が同一ならSetWindowTextをしないだけです。
    これだけで、キー入力ごとに発生する負荷がかなり減りました。
    (ほんとはもっとまともなやり方で解決したいですが、とりあえず)

    あと、タイトルバーにバージョン番号表示は要らないと思いましたがどうでしょうか?
    バージョンダイアログで確認できますし、
    バージョン番号表示がなくなれば見た目スッキリして良いと思いました。

    よろしくお願い致します。
    • [1216] Re:タイトルバーの再描画の抑制 やざき 2002年01月19日 11:05

      ▼ gaeさん
      > しばらくぶりです。
      > 久しぶりにソースをダウンロードしてビルドしてみました。
      > CPrintPreviewクラスがプロジェクトに入ってないらしく、
      > 自分で追加してビルドを完了させました。
      > それはおいといて、
      >
      >
      > キーを入力する度にタイトルバーが再描画されてしまい鬱陶しいので、
      > どなたか修正して反映していただけないでしょうか?
      >
      > void CEditDoc::SetParentCaption( BOOL bKillFocus )
      >
      > ここで、GetWindowTextで現在のウィンドウタイトルを取得し、
      > 文字列の内容が同一ならSetWindowTextをしないだけです。
      > これだけで、キー入力ごとに発生する負荷がかなり減りました。
      > (ほんとはもっとまともなやり方で解決したいですが、とりあえず)
      >
      > あと、タイトルバーにバージョン番号表示は要らないと思いましたがどうでしょうか?
      > バージョンダイアログで確認できますし、
      > バージョン番号表示がなくなれば見た目スッキリして良いと思いました。
      >
      > よろしくお願い致します。

      はじめましてです。

      char pszNowCaption[1024];
      ::GetWindowText( m_hWnd, pszNowCaption, sizeof( pszNowCaption ) );
      して、
      if (strcmp(pszCap, pszNowCaption) != 0){
      ::SetWindowText( hwnd, pszCap );
      }
      でしょうか?
      手元だとあまり違いがわからなかったので念のため。

      • [1217] Re:タイトルバーの再描画の抑制 gae 2002年01月19日 12:28

        > char pszNowCaption[1024];
        > ::GetWindowText( m_hWnd, pszNowCaption, sizeof( pszNowCaption ) );
        > して、
        > if (strcmp(pszCap, pszNowCaption) != 0){
        > ::SetWindowText( hwnd, pszCap );
        > }
        > でしょうか?
        > 手元だとあまり違いがわからなかったので念のため。

        これでいいと思います。

        遅いマシンでキーリピートを最速にして
        押しっぱなしにしてみてください。
        かなりの速度差がわかるはずです。

        # また、WindowsXPではフォントのレンダリングが遅くなっているので
        # この差が大きいというのも
      • [1218] Re:タイトルバーの再描画の抑制 みく 2002年01月19日 13:03

        >タイトル: Re:タイトルバーの再描画の抑制
        >発言者: やざき
        >char pszNowCaption[1024];
        >::GetWindowText( m_hWnd, pszNowCaption, sizeof( pszNowCaption ) );
        >して、
        >if (strcmp(pszCap, pszNowCaption) != 0){
        > ::SetWindowText( hwnd, pszCap );
        >}
        >でしょうか?
        >手元だとあまり違いがわからなかったので念のため。

        タイトルバーは画面に一個だから、どっかのクラスに持たせておけば
        毎回GetWindowText()しなくてよいので、もっと速くならないだろうか。
        #m_hWnd と hwnd ってどう違うんだろう。
        • [1219] Re:タイトルバーの再描画の抑制 げんた 2002年01月19日 14:11

          ▼みくさん
          >タイトルバーは画面に一個だから、どっかのクラスに持たせておけば
          本質的にはそういう問題ではなくて,書き換えるべきタイミングをきちんと管理することが重要でしょう.

          毎回書き換えに行くのは,たぶん(更新) というのを入れるかどうかを見たいのだと思いますので,
          * CEditDoc::m_bIsModified への直接アクセスをアクセスクラス経由に置き換える
          * アクセスクラスでIsModifiedが変更されたかどうかをチェックして,変更があった場合のみSetParentCaptionを呼び出す.
          とすべきだと思います.