スクロールバー – プログラミング – Home

通知
すべてクリア

スクロールバー


リク
 リク
(@リク)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

*hVScrollbar = CreateWindow(
TEXT(SCROLLBAR), TEXT("),
WS_CHILD | WS_VISIBLE | SB_VERT | SBS_SIZEGRIP,
620, 0, 20, 480,
hWnd, NULL, (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
NULL
);

vscroll->cbSize = sizeof(SCROLLINFO);
vscroll->fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
vscroll->nMin = 0;
vscroll->nMax = MAP_HEIGHT;
vscroll->nPage = 1;

SetScrollInfo(*hVScrollbar,SB_VERT,vscroll,TRUE);

CreateWindow関数でスクロールバーを設定したいんですが
なぜかスクロールバーが固定されずに動いたりします
これはどうしたらいいのでしょうか?


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

どういう事をすると動くのかとか、
動くと言うのはどう動く事を言っているのかとか、
情報が足りないような気がします。
開発環境も明示されていないようなので
必要な情報を提示して質問するようにしてください。
必要な情報がどんな物か分からないときは、
追加発言の所にある「使用上の注意」のリンク先を参照してください。


返信引用
リク
 リク
(@リク)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

その部分は解決できました
あと問題なのがCreateWindow関数でスクロールバーをウィンドウの端に
付けたいのですがウィンドウのサイズが変更されるとスクロールバーも大きさに
あわせて変更したいのですがウィンドウのサイズを変更すると以前設置されていた
場所にもスクロールバーが残ってしまいます。
これを解決したいのですがどうしたらいいでしょうか?

環境はVisual C++ 2005が開発環境です

case WM_SIZE:
//コントロールのサイズを
調べる
//ウィンドウのクライアントサイズを調べる
GetClientRect(hWnd,&clientsize);
//ツールバーのサイズを調べる
GetClientRect(hToolbar,&toolsize);
//ステータスバーのサイズを調べる
GetClientRect(hStatasu,&statasusize);

//縦スクロールバーの設置
setVScrollBar
(hWnd,&hVScrollbar,&vscroll,clientsize,toolsize,statasusize);

/スクロールバーの設定
void setVScrollBar(HWND hWnd,HWND *hVScrollbar,SCROLLINFO *vscroll,RECT
clientsize,RECT toolsize,RECT statasusize)
{
//スクロールバーの始点座標
int vscroll_posx = clientsize.right - 16;
int vscroll_posy = clientsize.top + (toolsize.bottom - toolsize.top);

//スクロールバーの縦のサイズ
int vscroll_height = clientsize.bottom - (toolsize.bottom -
toolsize.top + statasusize.bottom - statasusize.top);

*hVScrollbar = CreateWindow(
TEXT(SCROLLBAR), TEXT("),
WS_CHILD | WS_VISIBLE | SB_VERT,
vscroll_posx, vscroll_posy, 16, vscroll_height,
hWnd, NULL, (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
NULL
);

vscroll->cbSize = sizeof(SCROLLINFO);
vscroll->fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
vscroll->nMin = 0;
vscroll->nMax = MAP_HEIGHT;
vscroll->nPage = 1;

SetScrollInfo(*hVScrollbar,SB_CTL,vscroll,TRUE);
}


返信引用
Geo=TK3
 Geo=TK3
(@Geo=TK3)
ゲスト
結合: 19年前
投稿: 6
 

VC++ 系列をご使用ならばプロジェクトの種類も書きましょ。
SDK で作ってるか、MFC を使っているか、Windows Form アプリケーションかで回答が違
ってきますし。

# 以下はコード片から SDK で作成しているものと推測しての記述です。
# 違った場合は無視してください。

>ウィンドウのサイズが変更されるとスクロールバーも大きさに
>あわせて変更したいのですがウィンドウのサイズを変更すると
>以前設置されていた場所にもスクロールバーが残ってしまいます。

提示のコード片では WM_SIZE がくる度にスクロールバーを CreateWindow で新しく作る
上、前に作成したスクロールバーを破棄してないので、当然そういう動作をします。
例えばスクロールバーの作成は WM_CREATE で行い、WM_SIZE の時はスクロールバーのサ
イズ変更だけ行うようにしてみたらいかがでしょう。


返信引用
リク
 リク
(@リク)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

このようにWM_CREATEのメッセージでスクロールを作成して
WM_SIZEでサイズの変更しているのですが
ウィンドウを大きくしても変化しません
何かおかしいのでしょうか?
SDKで作成してます
case WM_CREATE:
InitCommonControls();

//ウィンドウのクライアントサイズを調べる
GetClientRect(hWnd,&clientsize);
//ツールバーのサイズを調べる
GetClientRect(hToolbar,&toolsize);
//ステータスバーのサイズを調べる
GetClientRect(hStatasu,&statasusize);

//縦スクロールバーの設置
setVScrollBar
(hWnd,&hVScrollbar,&vscroll,clientsize,toolsize,statasusize);

return 0;
case WM_SIZE:
//ウィンドウの再描画処理

SendMessage(hStatasu , WM_SIZE , wParam , lParam);
SendMessage(hToolbar , WM_SIZE , wParam , lParam);
SendMessage(hVScrollbar, WM_SIZE, wParam, lParam);
//コントロールのサイズを調べる

return 0;


返信引用
リク
 リク
(@リク)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

何とか解決できました
SetWindowPos関数でサイズ変更すればよかったです


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました