
作成手順
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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
TabControlとToolBarの背景色変更
-
スピンボタンを右クリックして...
-
Excel VBAでのMultipageの選択
-
コモンダイアログコントロール...
-
ActiveXコントロールを.NETにイ...
-
Tabコントロールに貼り付けたダ...
-
複数列リストコントロールについて
-
フォームでPDFを表示させた...
-
ラジオボタンのグループ化の方法
-
ダイアログとリストコントロー...
-
.NETでチャートにスクロールバ...
-
警告表示を非表示にしたい
-
アイテムを点滅させる
-
DateTimePickerでに年月までし...
-
連続で印刷すると画像が更新さ...
-
ダイアログを継承したダイアロ...
-
WS_TABSTOPが機能するコントロ...
-
MFCのプロジェクト作成時にコモ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
ActiveXコントロールを.NETにイ...
-
DateTimePickerでに年月までし...
-
コモンダイアログコントロール...
-
フォームでPDFを表示させた...
-
EXCELVBA リストボックスで選択...
-
CEdit の内容が変わった時にメ...
-
regsvr32でActiveX登録を行ったocx
-
アイテムを点滅させる
-
TabControlとToolBarの背景色変更
-
VisualStudio MFC変数が追加で...
-
空のリストビューで1行おきに...
-
連続で印刷すると画像が更新さ...
-
VBAでリストボックス内で↑↓の操...
-
エクセル - リストボックスのマ...
-
MFC・ダイアログベースで、ダイ...
-
ワードのドロップダウンリスト
-
MFCのプロジェクト作成時にコモ...
おすすめ情報