我正在尝试使用Microsoft基础类库创建一个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);
答案 0 :(得分:0)
我替换了CScrollBar并改为使用HWND。 所以我的代码改变了这样:
// MainClass.h
HWND m_wndHScrollBar;
// MainClass.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
));