
作成手順
1) IDC_SCROLLBAR1として、リソースエディタで適当な位置に配置
2) 右クリック 「変数の追加」で、コントロール変数の追加
CForm1View に、 CScrollBar m_sbHorz; として、追加される
3) CForm1View::InitialUpdate() で、
// スクロールバーの設定
this->m_sbHorz.SetParent(this);
HWND hWndSb;
GetDlgItem(IDC_SCROLLBAR1, &hWndSb);
::ShowWindow( hWndSb, SW_SHOW );
CRect rectSb;
::GetClientRect( hWndSb, &rectSb );
4) CForm1View::OnDraw() で、
HWND hWndSb;
GetDlgItem(IDC_SCROLLBAR1, &hWndSb);
::SetScrollRange( hWndSb, SB_CTL, this->m_ScMinVal, this->m_ScMaxVal, FALSE );
::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE );
::ShowWindow( hWndSb, SW_SHOW );
※ m_ScMinVal: 最小値、m_ScMaxVal = 最大値、m_ScPos=現在値 の変数
5) CFomr1View::OnSize()で、
// FormViewのScrollBarを表示させない
SetScrollSizes( MM_TEXT, CSize(cx,cy) );
CWnd::OnSize(nType, cx, cy );
// スクロールバーの位置調整
HWND hWndSb;
GetDlgItem(IDC_SCROLLBAR1, &hWndSb);
::GetClientRect( hWndSb, &rect );
::MoveWindow( hWndSb, 0, cy, cx, rect.Height(), FALSE );
::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE );
6) CFomr1View::OnHScroll() で、
HWND hWndSb;
GetDlgItem(IDC_SCROLLBAR1, &hWndSb);
::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE );
とやると、スクロールバーが表示されません。
何かアドバイスいただけませんか?
また、今、スクロールバーの表示位置調整や、ScrollPosのセットなんかを
Win32API関数使ってますが、MFCで(というか、CScrollBar m_sbHorz; を使って)
できないものなのでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
スクロールバーを何処の設置したいのでしょう?
フォームビューの下端であれば
CFornView::OnSizeにおいて
if ( m_sbHoriz.m_hWnd ) {
CRect rc;
m_szHorz.GetWindowRect( &rc );
m_szHorz.MoveWindow( 0, cy - rc.Height(), cx, rc.Height());
}
といった具合に コントロールのハンドルをチェックして APIを使いましょう
m_szHrzは CFormView::OnInitialUpdate()などでコントロールとリソースが結合されたあとならビュークラスの中で使えますよ
OnSizeはコントロールが初期化される前のビュークラスの生成時にも呼ばれるのでハンドルのチェックが必要です
WinAPIで行っているほとんどの関数はCScrollBarクラスにあると思います
引数の HWNDを省力した形の引数をとると思います
できました!
ありがとうございます。とっても助かりました。
最下端に配置したかったのですが、私のコードでは、スクロールバーの上端が、Viewの最下端になってしまっていたようですね。
ご指南にしたがって修正したところ、目的の動作ができました。
また、MFC化の方法も理解したので、これから移植を進めたいと思います。
また何かありましたらよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスでコントロール...
-
ワードのドロップダウンリスト
-
エクセルのコントロールツール...
-
DateTimePickerでに年月までし...
-
コントロールの書式設定で、“コ...
-
TabControlとToolBarの背景色変更
-
Win32のリストコントロールで縦...
-
Tabコントロールに貼り付けたダ...
-
エクセル - リストボックスのマ...
-
C#でChartコントロールを...
-
タブコントロールに貼り付けら...
-
VC++でツリーコントロールの文...
-
皆さん、おはようございます♪ ...
-
マインクラフト(pc版)で座標...
-
パソコン関連)何度消してもま...
-
DellノートPC購入で悩んでいま...
-
一定時刻になると、外付けハー...
-
VBA TEXTBOXテキストボックスの...
-
VB.netでSTLファイルの分離
-
helloworld
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
ActiveXコントロールを.NETにイ...
-
DateTimePickerでに年月までし...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
CEdit の内容が変わった時にメ...
-
エクセル - リストボックスのマ...
-
regsvr32でActiveX登録を行ったocx
-
アイテムを点滅させる
-
プロパティシートのタブの名前...
-
警告表示を非表示にしたい
-
TabControlとToolBarの背景色変更
-
EXCELVBA リストボックスで選択...
-
空のリストビューで1行おきに...
-
C#.NETでのCOMコンポーネント作...
-
スクロールバーを点滅させない方法
-
連続で印刷すると画像が更新さ...
-
Accessのタブコントロールを2...
おすすめ情報