我正在尝试使用Microsoft Foundation类库创建一个activeX控件。
我已经创建了控件。这是一个图形控件。我也在控制器上放了一些按钮。
我正在尝试使用CScrollBar
类将滚动条添加到我的控件中。
我使用CScrollBar::Create
方法创建控件。在应用程序中使用activeX控件时,我可以看到该控件。
我已经将OnHScroll
方法添加到我的控制类中。这源于COleControl
类。
当我滚动时,我使用CScrollBar::GetScrollPos
来获得滚动位置,我总是返回零。
下面是在activeX控件中创建滚动条的代码。
MainClass.h文件中的控制代码:
private:
CScrollBar m_HScrollBar;
protected:
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
DECLARE_MESSAGE_MAP()
OnCreate()
中MainClass.cpp中用于创建滚动条的方法的控制代码:
m_HScrollBar.Create(SBS_HORZ | WS_CHILD| WS_VISIBLE , CRect(rcBottomStrip.left ,
rcBottomStrip.bottom ,
rcBottomStrip.right ,
rcBottomStrip.bottom + (tHeight*3)/125),this, 315);
m_HScrollBar.SetScrollRange(0, 2048);
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize = sizeof(ScrollInfo);
ScrollInfo.fMask = SIF_RANGE;
ScrollInfo.nMin = 0;
ScrollInfo.nMax = 1128;
ScrollInfo.nPage = 100;
ScrollInfo.nPos = 0;
ScrollInfo.nTrackPos = 0;
m_HScrollBar.SetScrollInfo(&ScrollInfo);
m_HScrollBar.ShowScrollBar(TRUE);
m_HScrollBar.EnableWindow();
m_HScrollBar.EnableAutomation();
在OnHScroll
方法中返回滚动位置并移动滚动条:
int CurPos = m_HScrollBar.GetScrollPos();
m_HScrollBar.SetScrollPos(CurPos);
我替换了CScrollBar,转而使用HWND。所以我的代码变成了这样:
//MainClass.h
HWND m_wndHScrollBar;
//主类.cpp
m_wndHScrollBar = (CreateWindowEx(
0, // no extended styles
SCROLLBAR, // scroll bar control class
(PTSTR) NULL, // no window text
WS_CHILD | WS_VISIBLE // window styles
| SBS_HORZ, // horizontal scroll bar style
left, // horizontal position
bottom, // vertical position
right, // width of the scroll bar
height, // height of the scroll bar
m_hWnd, // handle to main window
(HMENU) ID_HSCROLLBAR, // no menu
GetModuleHandle(NULL), // instance owning this window
(PVOID) NULL // pointer not needed
));