質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Q&A

解決済

2回答

630閲覧

MFC スクロールバーの処理でエラー

RyuL

総合スコア24

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

0グッド

0クリップ

投稿2022/11/08 02:50

MFCのダイアログモードでアプリケーションの制作をしているのですが、スクロールバーの処理でエラーが発生している様で、上手く機能しません。
言語はC++です。

スクロールバーはリソースエディタでスクロールバーのコントロールを置き、ダイアログのクラスウィザードからWM_VSCROLLのイベントを追加し、それで追加された下記のOnVScrollのメソッドの中にコードを記述しました。
他に特に変わったことはしていないはずです。

ソースコード

C++

1void CXXXXXDlg::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar *pScrollBar ) 2{ 3 // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 4 int e = pScrollBar->SetScrollPos(10); 5 int error_code = GetLastError(); 6 CDialogEx::OnVScroll( nSBCode, nPos, pScrollBar ); 7} 8

上記のコードはとりあえずスクロールバーが操作できるかを確かめる為に書いたものです。
(最初はもっときちんとしたのをネット上にあったサンプルを参考に書いたのですが、それがまず上手くいかなかったので、原因究明として上記のようなシンプルなコードを書きました)

上記のコードでスクロールバーを操作したら、とりあえずバーの位置が10になるかと思うのですが、バーを動かしてもすぐに初期の位置に戻り処理の反映が出来ませんでした。
そこでブレイクポイントを使用して調べてみたことろ、引数のpScrollBarはNULLでは無く何かの値(たぶんスクロールバーコントロールのハンドル)が入っており、nSBCodeにはSB_THUMBTRACKやSB_THUMBPOSITIONなど、スクロールバーを操作した時の動作が正しく入っていました。
ただし、nPosはどんな操作をしても常に0が入ってました。(SB_THUMBPOSITIONとSB_THUMBTRACK時は、その時の位置が入っているらしいですが、それも0でした)

また、SetScrollPosの戻り値が0でして、エラーが起きた時は0が返って来るとの事なので、エラーが起きていると思われます。
ただ、GetLastErrorで取得した値は5だったのですが、これの意味は調べてもよく分かりませんでした。

このエラーの原因、また修正方法を教えていただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ダイアログの初期処理時にスクロールバーの初期設定をしたら、無事にスクロールバーを動かすことが出来ました。
(参考にしたネット上のどのサイトにも初期設定をしているのが見当たらなかったので、逆になぜ私が作成している方は初期設定が必要なのかわからず、未だに完全に納得は出来ていませんが…)

何はともあれば問題は解決しましたので、ご教授して頂いた方には誠にお礼申し上げます。

投稿2022/11/10 01:12

RyuL

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

GetLastErrorで取得した値は5

5」 の意味は「Access Denied」 (アクセスが拒否されました)になります。
恐らくスクロールバーの有効範囲外を指している為ではないかと思います。

こちらにスクロールバーのサンプルがありましたので、参考にしてみて下さい。
■ MFCでスクロールバーを使用する。
https://www.paveway.info/entry/2019/02/04/mfc_scrollbar

あと、GetLastError API で取得できる戻り値ですが FormatMessage API で書式化が行えます。
■ エラーコードを日本語文章で表示する(FormatMessage)
http://yamatyuu.net/computer/program/sdk/base/errmsg1/index.html

投稿2022/11/08 13:30

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問