MFC:スクロールバーのつまみをドラッグしたときの奇妙な動作

user180574

スクロールバーを使用して、多くの行を含む大きなデータを表示します(背景については、前の質問:MFC:スクロールのOnInitialUpdate()の時間コストを削減する方法を参照してください)。

スクロール機能は、(1)矢印ボタンをクリックする、(2)スクロールシャフトをクリックする、または(3)マウスホイールを回転させる場合に正常に機能します。コンテンツは正しく上下に移動します。しかし、スクロールサムをドラッグすると、距離が非常に小さい場合を除いて、実際には期待どおりに動作しません。

少し前にドラッグすると、後ろにジャンプしたり、最初までジャンプしたりすることがあります。マウスを離しても止まることはなく、親指を最後のレコードまでドラッグすることもできません。

よく見ると、「GetClipBox(...)」は正しいデータを返さないようです。たとえば、最後までドラッグすると、この関数はrect.topがゼロに等しいことを返します。描画するレコードのセットを計算するために戻り値に依存しているため、残りは台無しになっています。

最小限の再現可能な例は、https//138.197.210.223/test/My.tar.gzからアクセスできますテストするときは、親指を最後までドラッグして効果を高めます。

コンスタンティンジョルジウ

これは、WM_VSCROLLメッセージの16ビット制限によるものです実際には、制限は32767であり、ドキュメントに記載されている65535ではありません。かなり前のプロジェクトで同じ問題がありました。

回避策はWM_VSCROLLGetScrollInfo()代わりに関数によって返される32ビット値を使用するようにメッセージ処理を変更することですオーバーライドOnVScroll()(クラスビューに移動し、ビューを選択してWM_VSCROLLメッセージハンドラーを追加します):

void CMyView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // Workaround the 16-bit limitation
    if (nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK)
    {
        SCROLLINFO si;
        si.cbSize = sizeof(si);
        si.fMask = SIF_ALL;
        ::GetScrollInfo(m_hWnd, SB_VERT, &si);
        // Set nPos to the 32-bit value
        nPos = si.nTrackPos;
    }
    CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}

これで問題が解決するはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

FineUloaderを使用してスケーリングされたファイルをアップロードするときの奇妙な動作

分類Dev

リソースダイアログで別のコントロールとオーバーラップする動的に作成されたコントロールを配置すると、奇妙な動作が発生します

分類Dev

カスタムシグナルハンドラーを配置しているときにPython2でsys.stdinを読み取るときの奇妙なブロッキング動作

分類Dev

forループスポーン(バックグラウンド)スレッドでの奇妙な動作

分類Dev

メソッドをオーバーライドしようとするときの奇妙なEclipseの動作

分類Dev

奇妙な表示の問題:奇妙な動作と以前のカーネルにロールバックできない

分類Dev

奇妙な表示の問題:奇妙な動作と以前のカーネルにロールバックできない

分類Dev

gnomeアラートスタイリングをオーバーライドするときの奇妙な動作?

分類Dev

別のスレッドの空のループにタスクが追加されたときの奇妙な動作

分類Dev

2 ノードの ZooKeeper クラスター - 1 つのノードがプログラムによってダウンした場合の奇妙な動作

分類Dev

プログラムを起動したときに、ルックアンドフィールが非常に奇妙に見えるのはなぜですか?

分類Dev

バックグラウンド作業:単一のバックグラウンドスレッドを使用しますか、それともループごとに1つのスレッドを起動しますか?

分類Dev

カード スタイルのサイドバーを非表示にしようとしたときの奇妙な動作

分類Dev

トライブロックの巻き戻し中にデストラクタをスローすると、この奇妙な動作の原因は何ですか?

分類Dev

ジオロケーションは、特定のコルドババージョンのバックグラウンドで異なる動作をしますか?

分類Dev

ブートストラップdivの折りたたみと展開の奇妙な動作をどのように処理できますか

分類Dev

nvidia361ドライバーをインストールした後の奇妙な動作

分類Dev

ターミナルで動作しているときにスタックトレースなしで「ローカルホストのサーバーTomcatv7.0サーバーを起動できませんでした」

分類Dev

グローバル変数が別のファイルに追加されたときの奇妙な動作

分類Dev

シリアル化されたフィールドにプッシュすると、sidekiqの奇妙な動作がメーラーでjidを返しました

分類Dev

forループ内の単語としてのバックティックは、奇妙な動作を引き起こします

分類Dev

クラス内のオーバーロードされたI / O演算子の奇妙な動作

分類Dev

cプログラムでfreeを使用したときの奇妙な動作

分類Dev

jQueryのスムーズスクロールを使用したナビゲーションは奇妙な動作を引き起こします

分類Dev

ブートストラップモーダル、スクローラーの奇妙な動作でドラッグ可能なJquery

分類Dev

ワイルドカードを使用して文字列を読み取るときの奇妙なbashの動作

分類Dev

バージョン2.0にアップグレードした後、ドットネットテストタスクが「MSB1008:1つのプロジェクトのみを指定できます」というエラーで失敗する

分類Dev

Shiftキーとマウスを使用した奇妙なスクロール動作

分類Dev

Shiftキーとマウスを使用した奇妙なスクロール動作

Related 関連記事

  1. 1

    FineUloaderを使用してスケーリングされたファイルをアップロードするときの奇妙な動作

  2. 2

    リソースダイアログで別のコントロールとオーバーラップする動的に作成されたコントロールを配置すると、奇妙な動作が発生します

  3. 3

    カスタムシグナルハンドラーを配置しているときにPython2でsys.stdinを読み取るときの奇妙なブロッキング動作

  4. 4

    forループスポーン(バックグラウンド)スレッドでの奇妙な動作

  5. 5

    メソッドをオーバーライドしようとするときの奇妙なEclipseの動作

  6. 6

    奇妙な表示の問題:奇妙な動作と以前のカーネルにロールバックできない

  7. 7

    奇妙な表示の問題:奇妙な動作と以前のカーネルにロールバックできない

  8. 8

    gnomeアラートスタイリングをオーバーライドするときの奇妙な動作?

  9. 9

    別のスレッドの空のループにタスクが追加されたときの奇妙な動作

  10. 10

    2 ノードの ZooKeeper クラスター - 1 つのノードがプログラムによってダウンした場合の奇妙な動作

  11. 11

    プログラムを起動したときに、ルックアンドフィールが非常に奇妙に見えるのはなぜですか?

  12. 12

    バックグラウンド作業:単一のバックグラウンドスレッドを使用しますか、それともループごとに1つのスレッドを起動しますか?

  13. 13

    カード スタイルのサイドバーを非表示にしようとしたときの奇妙な動作

  14. 14

    トライブロックの巻き戻し中にデストラクタをスローすると、この奇妙な動作の原因は何ですか?

  15. 15

    ジオロケーションは、特定のコルドババージョンのバックグラウンドで異なる動作をしますか?

  16. 16

    ブートストラップdivの折りたたみと展開の奇妙な動作をどのように処理できますか

  17. 17

    nvidia361ドライバーをインストールした後の奇妙な動作

  18. 18

    ターミナルで動作しているときにスタックトレースなしで「ローカルホストのサーバーTomcatv7.0サーバーを起動できませんでした」

  19. 19

    グローバル変数が別のファイルに追加されたときの奇妙な動作

  20. 20

    シリアル化されたフィールドにプッシュすると、sidekiqの奇妙な動作がメーラーでjidを返しました

  21. 21

    forループ内の単語としてのバックティックは、奇妙な動作を引き起こします

  22. 22

    クラス内のオーバーロードされたI / O演算子の奇妙な動作

  23. 23

    cプログラムでfreeを使用したときの奇妙な動作

  24. 24

    jQueryのスムーズスクロールを使用したナビゲーションは奇妙な動作を引き起こします

  25. 25

    ブートストラップモーダル、スクローラーの奇妙な動作でドラッグ可能なJquery

  26. 26

    ワイルドカードを使用して文字列を読み取るときの奇妙なbashの動作

  27. 27

    バージョン2.0にアップグレードした後、ドットネットテストタスクが「MSB1008:1つのプロジェクトのみを指定できます」というエラーで失敗する

  28. 28

    Shiftキーとマウスを使用した奇妙なスクロール動作

  29. 29

    Shiftキーとマウスを使用した奇妙なスクロール動作

ホットタグ

アーカイブ