怎样改变列表控件中的滚动条的颜色? 我创建一个CSkinListBox(继承CListBox),通过重载CTLCOLOR改变列表控件的背景颜色,但是我想改变控件的出现的滚动条的颜色,不知道怎样才能实现??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置自画风格,重载自画虚函数,注意不是自画消息(WM_DRAWITEM)。 自己创建一个 SCROLLBAR ,然后隐藏 LISTBOX 自带的 SCROLLBAR ,把你自己的 scrollbar 放在合适的地方,重写 LISTBOX 的 GETSCROLLBAR 函数(好像是这个名字,记不清楚了,是CWND类的函数),以返回你自己的SCROLLBAR的指针。响应你自己的SCROLLBAR的滚动消息。最后,重载 SCROLLBAR 的 ONPAINT, 画之。 设置控件为ownredraw风格,然后设置里面一个结构DRAWITEMSTRUCT里面的参数,重载DrawItem()、MesureItem()和CompareItem()函数,设置你自己的风格,就可以了。 everandforever大哥,如果在wm_ncpaint中直接画滚动条能不能实现? OnCtlColor(..){if(GetFocus()==myScroll1){SetBkColor(..);} 请问OnCtlColor()加在哪里?是加在CMyDialog类中,还是加在CMyListBox类中??? TO kingcom_xu(我的刀是杀不了人的):不能吧。SCROLLBAR也是个独立的WND。 TO everandforever(Forever):我试过你的方法,但是在通过外部的滚动条来控制列表控件滚动时,列表中的内容有滚动了,但是但它只是把滚动过后的内容覆盖原来的内容,没有把滚动前的内容擦掉,这样控件中显示的内容一遍混乱!请问怎么解决??你有这方面的源代码吗?如果有能给我寄一份吗?我的代码如下:void CtestscrollDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ // TODO: 在此添加消息处理程序代码和/或调用默认值 SCROLLINFO si; si.fMask = SIF_ALL ; m_SkinBar.GetScrollInfo (&si) ; int height; switch(nSBCode) { case SB_LINEUP: si.nPos -= 10 ; break; case SB_LINEDOWN: si.nPos += 10; height = m_ListBox.GetItemHeight(1); m_ListBox.ScrollWindow(0, height, NULL, NULL); m_ListBox.UpdateWindow(); break; case SB_THUMBTRACK: si.nPos = si.nTrackPos ; break ; } //si.fMask = SIF_POS ; m_SkinBar.SetScrollInfo (&si, TRUE) ; CDialog::OnVScroll(nSBCode, nPos, pScrollBar);} 没做过。这要你自己解决了。这种替换SCROLLBAR的方法,我是从 MSDN 中看到的。 codeproject上那个Cool Scrollbar Library挺爽的呀 类中的const成员函数问题 宏连接2个字符串不能有下划线么 请教:请各位大哥帮我看看下面几个类的问题,谢谢! 哪为有"COM/DCOM编程指南"(清华出版)一书的配套程序啊,发一份给我吧 [email protected],一定给分 谁有GDI+编程的中文资料 怎样使用动态二维数组? 哪位大哥学过接口技术,帮小弟解决个问题!没学过的帮忙UP啊! 求助:CoTaskMemFree函数的作用是什么? 哪位大侠帮我一下好吗 100取1的通信公司,谁知道broadi(宽联)的有关情况? 一个关于CWnd的问题,急!!!高手快来帮忙啊!!在线等待 关于MFC编译链接的问题
{
if(GetFocus()==myScroll1){
SetBkColor(..);
}
不能吧。SCROLLBAR也是个独立的WND。
我试过你的方法,但是在通过外部的滚动条来控制列表控件滚动时,列表中的内容有滚动了,但是但它只是把滚动过后的内容覆盖原来的内容,没有把滚动前的内容擦掉,这样控件中显示的内容一遍混乱!请问怎么解决??你有这方面的源代码吗?如果有能给我寄一份吗?我的代码如下:
void CtestscrollDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SCROLLINFO si;
si.fMask = SIF_ALL ;
m_SkinBar.GetScrollInfo (&si) ;
int height; switch(nSBCode)
{
case SB_LINEUP:
si.nPos -= 10 ;
break;
case SB_LINEDOWN:
si.nPos += 10;
height = m_ListBox.GetItemHeight(1);
m_ListBox.ScrollWindow(0, height, NULL, NULL);
m_ListBox.UpdateWindow();
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos ;
break ; } //si.fMask = SIF_POS ;
m_SkinBar.SetScrollInfo (&si, TRUE) ;
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
这种替换SCROLLBAR的方法,我是从 MSDN 中看到的。