CListBox在SetCapture()后滚动条无效了,为什么,怎么解决,thx在做qq那样的选头像时出现的问题:
因为要弹出一个窗口,这个窗口上有一个以图片为元素的ListBox,
所以有两个类,一个CPopWnd,一个CBmpListBox,都要动态生成,
所以有两个构造函数: CPopWnd::CPopWnd(CPoint pt, CWnd *pParent)
{ CString szClassName =
AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|
CS_HREDRAW|CS_VREDRAW,0,
(HBRUSH) (COLOR_BTNFACE+1),0);
int cx = 48 + ::GetSystemMetrics(SM_CXVSCROLL); //每个头像48 * 48 if (!CWnd::CreateEx(0, szClassName, _T(""),
WS_CHILD |WS_VISIBLE|WS_POPUP,
pt.x, pt.y, cx, 96, //96 每次可以显示2个头像
pParent->GetSafeHwnd(), 0, NULL))return; m_list = new CMyList2(this); //m_list 是一个CBmpListBox *
m_list->MoveWindow(0, 0, cx, 96, 1)
} /////////////////////////////////////////////////////// CBmpListBox::CBmpListBox(CWnd * pParent)
{
if(!Create(WS_VSCROLL | WS_CHILD | WS_VISIBLE,
CRect(0, 0, 0, 0), pParent, 1002))return; SetCapture(); //????? 因为是Popup的,要隐藏就要SetCapture //但SetCapture后连它上面的scroll都无效了, //不能滚动选头像,但mouse的滚轮还起作用 }
因为要弹出一个窗口,这个窗口上有一个以图片为元素的ListBox,
所以有两个类,一个CPopWnd,一个CBmpListBox,都要动态生成,
所以有两个构造函数: CPopWnd::CPopWnd(CPoint pt, CWnd *pParent)
{ CString szClassName =
AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|
CS_HREDRAW|CS_VREDRAW,0,
(HBRUSH) (COLOR_BTNFACE+1),0);
int cx = 48 + ::GetSystemMetrics(SM_CXVSCROLL); //每个头像48 * 48 if (!CWnd::CreateEx(0, szClassName, _T(""),
WS_CHILD |WS_VISIBLE|WS_POPUP,
pt.x, pt.y, cx, 96, //96 每次可以显示2个头像
pParent->GetSafeHwnd(), 0, NULL))return; m_list = new CMyList2(this); //m_list 是一个CBmpListBox *
m_list->MoveWindow(0, 0, cx, 96, 1)
} /////////////////////////////////////////////////////// CBmpListBox::CBmpListBox(CWnd * pParent)
{
if(!Create(WS_VSCROLL | WS_CHILD | WS_VISIBLE,
CRect(0, 0, 0, 0), pParent, 1002))return; SetCapture(); //????? 因为是Popup的,要隐藏就要SetCapture //但SetCapture后连它上面的scroll都无效了, //不能滚动选头像,但mouse的滚轮还起作用 }
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货