プロジェクト用の優れたユーザー インターフェイスを作成したいと考えています。ウィンドウを作成し、インターフェイス機能のメイン ウィンドウである子ウィンドウを作成します。だから...私はそれらの2つのウィンドウを持っています.子ウィンドウにスクロールバーを追加したいと思います. Scrollbar クラスを作成しました。
class Scrollbar
{
public:
HINSTANCE hInstance;
HWND hwnd;
SCROLLINFO si;
Scrollbar(HWND Scroll_hwnd, HINSTANCE hInstance, HWND hwnd, SCROLLINFO si, RECT Child_rect, int iHThumb);
SCROLLINFO Initialise(SCROLLINFO si, RECT rect);
~Scrollbar();
};
コンストラクターには、基本的に CreateWindow 関数があります。
Scroll_hwnd = CreateWindow(
L"SCROLLBAR",
(LPCWSTR)NULL,
WS_CHILD | WS_VISIBLE | SBS_HORZ | SBS_BOTTOMALIGN,
Child_rect.left,Child_rect.top,Child_rect.right-iHThumb,Child_rect.bottom,
hwnd,
NULL,
hInstance,
NULL);
SetScrollRange( Scroll_hwnd, SB_CTL, 0, 10, FALSE);
スクロールが作成されますが、どうにかしてそれを処理したいので、子ウィンドウの CALLBACK 関数で次のようにします。
case WM_HSCROLL:
{
GetScrollInfo( hwnd, SB_VERT, &si );
int position = si.nPos;
switch( LOWORD( wParam ) )
{
case SB_LINELEFT:
if( position > 0 )
{
position--;
}
break;
case SB_LINERIGHT:
if( position < 10 )
{
position++;
}
break;
ZeroMemory( & si, sizeof( si ) );
si.cbSize = sizeof( SCROLLINFO );
si.fMask = SIF_POS;
si.nPos = position;
SetScrollInfo( hwnd, SB_VERT, & si, TRUE );
}
わかりませんが、私の意見では、すべて問題ありません...位置変数は問題なくインクリメントされますが、スクロールはまだ開始位置にあります。何が問題なのですか?また、次のようなことをしようとすると:
Scrollbar *s1;
s1 = &scroll;
(...)
GetScrollInfo( hwnd, SB_VERT, s1->si );
変換エラーが発生する (SCROLLINFO TO LPSCROLLINFO)
それを修正する方法はありますか?