如何婧突指碈listctrl 自绘滚动条的滚动条位置

1380人阅读
标准的滚动条 是不能通过子类化来制定的, 如果想得到漂亮的滚动条,需要自己动手画。
要为CListCtrl 添加滚动条,大概思路如下:
(1) 使 CListCtrl 标准的滚动条不可用
(2) 手动定位 H 和 V 滚动条的位置( 不属于 ClistCtrl 的子控件 )
(3) 需要处理,
鼠标点击 左右箭头, 滚动一行
鼠标点击 滑块空白处, 滚动一页
鼠标拖拽滑块
下面是简单示例图: 滑块,左右箭头均是 宽26像素 高12像素
分析代码如下 SkinHorizontalScrollbar.cpp
view plaincopy to clipboardprint?
1.// SkinHorizontalScrollbar.cpp : implementation file
4.#include &stdafx.h&
5.#include &test_scroll.h&
6.#include &SkinHorizontalScrollbar.h&
8.#ifdef _DEBUG
9.#define new DEBUG_NEW
10.#undef THIS_FILE
11.static char THIS_FILE[] = __FILE__;
14./////////////////////////////////////////////////////////////////////////////
15.// CSkinHorizontalScrollbar
17.CSkinHorizontalScrollbar::CSkinHorizontalScrollbar()
19. nThumbLeft = 25;
20. dbThumbRemainder = 0.00f;
22. bMouseDown =
23. bMouseDownArrowLeft =
24. bMouseDownArrowRight =
25. bDragging =
26. pList = NULL;
29.CSkinHorizontalScrollbar::~CSkinHorizontalScrollbar()
34.BEGIN_MESSAGE_MAP(CSkinHorizontalScrollbar, CStatic)
35. //{{AFX_MSG_MAP(CSkinHorizontalScrollbar)
36. ON_WM_PAINT()
37. ON_WM_LBUTTONDOWN()
38. ON_WM_LBUTTONUP()
39. ON_WM_MOUSEMOVE()
40. ON_WM_TIMER()
41. //}}AFX_MSG_MAP
42.END_MESSAGE_MAP()
44./////////////////////////////////////////////////////////////////////////////
45.// CSkinHorizontalScrollbar message handlers
47.void CSkinHorizontalScrollbar::OnPaint()
49. CPaintDC dc(this); // device context for painting
51. Draw();
54.void CSkinHorizontalScrollbar::OnLButtonDown(UINT nFlags, CPoint point)
56. SetCapture();
57. CRect clientR
58. GetClientRect(&clientRect);
60. int nWidth = clientRect.Width()-26;
62. // 左箭头的区域
63. CRect rectLeftArrow(0,0,26,20);
64. // 右箭头区域
65. CRect rectRightArrow(nWidth,0,nWidth+26,20);
66. // 滑块区域
67. CRect rectThumb(nThumbLeft,0,nThumbLeft+26,20);
70. // 是否点重滑块
71. if(rectThumb.PtInRect(point))
73. bMouseDown =
76. // 是否点重右箭头
77. if(rectRightArrow.PtInRect(point))
79. bMouseDownArrowRight =
80. SetTimer(2,250,NULL);
82. // 是否点重左箭头
83. if(rectLeftArrow.PtInRect(point))
85. bMouseDownArrowLeft =
86. SetTimer(2,250,NULL);
89. CStatic::OnLButtonDown(nFlags, point);
92.void CSkinHorizontalScrollbar::OnLButtonUp(UINT nFlags, CPoint point)
94. UpdateThumbPosition();
95. KillTimer(1);
96. ReleaseCapture();
99. bool bInChannel =
101. CRect clientR
102. GetClientRect(&clientRect);
104. int nWidth = clientRect.Width()-26;
106. CRect rectLeftArrow(0,0,26,20);
107. CRect rectThumb(nThumbLeft,0,nThumbLeft+26,20);
109. if(rectLeftArrow.PtInRect(point))
111. ScrollLeft();
112. bInChannel =
115. CRect rectRightArrow(nWidth,0,nWidth+26,20);
118. if(rectRightArrow.PtInRect(point))
120. ScrollRight();
121. bInChannel =
124. if(rectThumb.PtInRect(point))
126. bInChannel =
129. if(bInChannel == true && !bMouseDown)
131. if(point.x & nThumbLeft)
133. PageRight();
137. PageLeft();
142. //恢复所有变量
143. bMouseDown =
144. bDragging =
145. bMouseDownArrowLeft =
146. bMouseDownArrowRight =
148. CStatic::OnLButtonUp(nFlags, point);
151.void CSkinHorizontalScrollbar::OnMouseMove(UINT nFlags, CPoint point)
153. CRect clientR
154. GetClientRect(&clientRect);
156. if(bMouseDown)
157. bDragging =
159. if(bDragging)
161. //滑块宽度 26 , 此处假定鼠标点中的是滑块的中点, 计算滑块位置
162. nThumbLeft = point.x-13;
164. double nMax = pList-&GetScrollLimit(SB_HORZ);
165. int nPos = pList-&GetScrollPos(SB_HORZ);
167. // 计算可滚动的范围: clientRect.Width() - 左箭头宽 - 右箭头宽 - 滑块宽
168. double nWidth = clientRect.Width()-75;
169. double nVar = nM
170. dbThumbInterval = nWidth/nV
172. // nThumbLeft-25: 滑块偏离起点的距离
173. // (nThumbLeft-25)/dbThumbInterval 需要滚动的次数
174. int nScrollTimes = (int)((nThumbLeft-25)/dbThumbInterval)-nP
177. size.cx = nScrollT
178. size.cy = 0;
180. // 强制列表滚动
181. pList-&Scroll(size);
183. LimitThumbPosition();
185. Draw();
188. CStatic::OnMouseMove(nFlags, point);
191.void CSkinHorizontalScrollbar::OnTimer(UINT nIDEvent)
193. if(nIDEvent == 1)
195. if(bMouseDownArrowRight)
197. ScrollRight();
200. if(bMouseDownArrowLeft)
202. ScrollLeft();
205. else if(nIDEvent == 2)
207. if(bMouseDownArrowRight)
209. KillTimer(2);
210. SetTimer(1, 50, NULL);
213. if(bMouseDownArrowLeft)
215. KillTimer(2);
216. SetTimer(1, 50, NULL);
220. CStatic::OnTimer(nIDEvent);
223.void CSkinHorizontalScrollbar::ScrollLeft()
225. pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_LINELEFT,0),NULL);
226. UpdateThumbPosition();
229.void CSkinHorizontalScrollbar::ScrollRight()
231. pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_LINERIGHT,0),NULL);
232. UpdateThumbPosition();
235.void CSkinHorizontalScrollbar::UpdateThumbPosition()
237. CRect clientR
238. GetClientRect(&clientRect);
240. double nPos = pList-&GetScrollPos(SB_HORZ);
241. double nMax = pList-&GetScrollLimit(SB_HORZ);
242. double nWidth = clientRect.Width()-75;
243. double nVar = nM
245. dbThumbInterval = nWidth/nV
247. double nNewdbValue = dbThumbInterval * (nPos);
248. int nNewValue = (int)nNewdbV
249. //double nExtra = nNewdbValue - nNewV
250. //dbThumbRemainder = nE
252. nThumbLeft = 25+nNewV
254. TRACE(&nPos: %0.3f, nMax : %0.3f, nWidth: %0.3f, dbThumbInterval: %0.3f\r\n&,
255. nPos , nMax, nWidth, dbThumbInterval);
257. LimitThumbPosition();
259. Draw();
262.void CSkinHorizontalScrollbar::PageRight()
264. TRACE(&CSkinHorizontalScrollbar::PageRight \r\n&);
265. pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_PAGEDOWN,0),NULL);
266. UpdateThumbPosition();
269.void CSkinHorizontalScrollbar::PageLeft()
271. TRACE(&CSkinHorizontalScrollbar::PageLeft \r\n&);
272. pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_PAGEUP,0),NULL);
273. UpdateThumbPosition();
276.void CSkinHorizontalScrollbar::Draw()
278. CClientDC dc(this);
279. CRect clientR
280. GetClientRect(&clientRect);
281. CMemDC memDC(&dc, &clientRect);
283. // 填充背景
284. memDC.FillSolidRect(&clientRect, RGB(76,85,118));
286. //画左箭头
287. CDC bitmapDC;
288. bitmapDC.CreateCompatibleDC(&dc);
290. bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_LEFTARROW);
291. CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
292. memDC.BitBlt(clientRect.left,clientRect.top,26,12,&bitmapDC,0,0,SRCCOPY);
294. bitmapDC.SelectObject(pOldBitmap);
295. bitmap.DeleteObject();
296. pOldBitmap = NULL;
299. //画中间背景
300. bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_SPAN);
301. pOldBitmap = bitmapDC.SelectObject(&bitmap);
302. int nWidth = clientRect.Width() - 26;
303. memDC.StretchBlt(clientRect.left+26, clientRect.top, nWidth,12,&bitmapDC, 0,0, 1, 12, SRCCOPY);
304. bitmapDC.SelectObject(pOldBitmap);
305. bitmap.DeleteObject();
306. pOldBitmap = NULL;
309. //画右箭头
310. bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_RIGHTARROW);
311. pOldBitmap = bitmapDC.SelectObject(&bitmap);
312. memDC.BitBlt(nWidth,clientRect.top,26,12,&bitmapDC,0,0,SRCCOPY);
313. bitmapDC.SelectObject(pOldBitmap);
314. bitmap.DeleteObject();
315. pOldBitmap = NULL;
319. //If there is nothing to scroll then don't
320. //show the thumb control otherwise show it
321. TRACE(&pList-&GetScrollLimit: %d\r\n&, pList-&GetScrollLimit(SB_HORZ) );
323. if(pList-&GetScrollLimit(SB_HORZ) != 0)
325. bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_THUMB);
327. pOldBitmap = bitmapDC.SelectObject(&bitmap);
329. memDC.BitBlt( clientRect.left+nThumbLeft, clientRect.top, 26,12,
330. &bitmapDC, 0, 0, SRCCOPY);
332. bitmapDC.SelectObject(pOldBitmap);
333. bitmap.DeleteObject();
334. pOldBitmap = NULL;
340.void CSkinHorizontalScrollbar::LimitThumbPosition()
342. CRect clientR
343. GetClientRect(&clientRect);
346. // 滑块的范围是 左右箭头之间的区域, 左右箭头宽 26 像素
347. if(nThumbLeft+26 & (clientRect.Width()-26))
349. nThumbLeft = clientRect.Width()-51;
352. if(nThumbLeft & (clientRect.left+25))
354. nThumbLeft = clientRect.left+25;
// SkinHorizontalScrollbar.cpp : implementation file // #include &stdafx.h& #include &test_scroll.h& #include &SkinHorizontalScrollbar.h& #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /////////////////////////////////////////////////////////////////////////////
// CSkinHorizontalScrollbar CSkinHorizontalScrollbar::CSkinHorizontalScrollbar() { nThumbLeft = 25; dbThumbRemainder = 0.00f; bMouseDown = bMouseDownArrowLeft = bMouseDownArrowRight = bDragging = pList = NULL; } CSkinHorizontalScrollbar::~CSkinHorizontalScrollbar()
{ } BEGIN_MESSAGE_MAP(CSkinHorizontalScrollbar, CStatic) //{{AFX_MSG_MAP(CSkinHorizontalScrollbar) ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////
// CSkinHorizontalScrollbar message handlers void CSkinHorizontalScrollbar::OnPaint() { CPaintDC dc(this); // device context for painting Draw(); } void CSkinHorizontalScrollbar::OnLButtonDown(UINT nFlags, CPoint point) { SetCapture(); CRect clientR GetClientRect(&clientRect);
int nWidth = clientRect.Width()-26; // 左箭头的区域 CRect rectLeftArrow(0,0,26,20); // 右箭头区域 CRect rectRightArrow(nWidth,0,nWidth+26,20); // 滑块区域 CRect rectThumb(nThumbLeft,0,nThumbLeft+26,20); // 是否点重滑块 if(rectThumb.PtInRect(point)) { bMouseDown = } // 是否点重右箭头
if(rectRightArrow.PtInRect(point)) { bMouseDownArrowRight = SetTimer(2,250,NULL); } // 是否点重左箭头 if(rectLeftArrow.PtInRect(point)) { bMouseDownArrowLeft = SetTimer(2,250,NULL); } CStatic::OnLButtonDown(nFlags, point); } void CSkinHorizontalScrollbar::OnLButtonUp(UINT
nFlags, CPoint point) { UpdateThumbPosition(); KillTimer(1); ReleaseCapture(); bool bInChannel = CRect clientR GetClientRect(&clientRect); int nWidth = clientRect.Width()-26; CRect rectLeftArrow(0,0,26,20); CRect rectThumb(nThumbLeft,0,nThumbLeft+26,20);
if(rectLeftArrow.PtInRect(point)) { ScrollLeft(); bInChannel = } CRect rectRightArrow(nWidth,0,nWidth+26,20); if(rectRightArrow.PtInRect(point)) { ScrollRight(); bInChannel = } if(rectThumb.PtInRect(point)) { bInChannel = } if(bInChannel
== true && !bMouseDown) { if(point.x & nThumbLeft) { PageRight(); } else { PageLeft(); } } //恢复所有变量 bMouseDown = bDragging = bMouseDownArrowLeft = bMouseDownArrowRight = CStatic::OnLButtonUp(nFlags, point); } void CSkinHorizontalScrollbar::OnMouseMove(UINT
nFlags, CPoint point) { CRect clientR GetClientRect(&clientRect); if(bMouseDown) bDragging = if(bDragging) { //滑块宽度 26 , 此处假定鼠标点中的是滑块的中点, 计算滑块位置 nThumbLeft = point.x-13; double nMax = pList-&GetScrollLimit(SB_HORZ); int nPos = pList-&GetScrollPos(SB_HORZ);
// 计算可滚动的范围: clientRect.Width() - 左箭头宽 - 右箭头宽 - 滑块宽 double nWidth = clientRect.Width()-75; double nVar = nM dbThumbInterval = nWidth/nV // nThumbLeft-25: 滑块偏离起点的距离 // (nThumbLeft-25)/dbThumbInterval 需要滚动的次数 int nScrollTimes = (int)((nThumbLeft-25)/dbThumbInterval)-nP
CS size.cx = nScrollT size.cy = 0; // 强制列表滚动 pList-&Scroll(size); LimitThumbPosition(); Draw(); } CStatic::OnMouseMove(nFlags, point); } void CSkinHorizontalScrollbar::OnTimer(UINT nIDEvent) { if(nIDEvent == 1) { if(bMouseDownArrowRight) { ScrollRight();
} if(bMouseDownArrowLeft) { ScrollLeft(); } } else if(nIDEvent == 2) { if(bMouseDownArrowRight) { KillTimer(2); SetTimer(1, 50, NULL); } if(bMouseDownArrowLeft) { KillTimer(2); SetTimer(1, 50, NULL); } } CStatic::OnTimer(nIDEvent); } void CSkinHorizontalScrollbar::ScrollLeft()
{ pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_LINELEFT,0),NULL); UpdateThumbPosition(); } void CSkinHorizontalScrollbar::ScrollRight() { pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_LINERIGHT,0),NULL); UpdateThumbPosition(); } void CSkinHorizontalScrollbar::UpdateThumbPosition()
{ CRect clientR GetClientRect(&clientRect); double nPos = pList-&GetScrollPos(SB_HORZ); double nMax = pList-&GetScrollLimit(SB_HORZ); double nWidth = clientRect.Width()-75; double nVar = nM dbThumbInterval = nWidth/nV double nNewdbValue = dbThumbInterval
* (nPos); int nNewValue = (int)nNewdbV //double nExtra = nNewdbValue - nNewV //dbThumbRemainder = nE nThumbLeft = 25+nNewV TRACE(&nPos: %0.3f, nMax : %0.3f, nWidth: %0.3f, dbThumbInterval: %0.3f\r\n&, nPos , nMax, nWidth, dbThumbInterval);
LimitThumbPosition(); Draw(); } void CSkinHorizontalScrollbar::PageRight() { TRACE(&CSkinHorizontalScrollbar::PageRight \r\n&); pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_PAGEDOWN,0),NULL); UpdateThumbPosition(); } void CSkinHorizontalScrollbar::PageLeft()
{ TRACE(&CSkinHorizontalScrollbar::PageLeft \r\n&); pList-&SendMessage(WM_HSCROLL, MAKELONG(SB_PAGEUP,0),NULL); UpdateThumbPosition(); } void CSkinHorizontalScrollbar::Draw() { CClientDC dc(this); CRect clientR GetClientRect(&clientRect); CMemDC memDC(&dc,
&clientRect); // 填充背景 memDC.FillSolidRect(&clientRect, RGB(76,85,118)); //画左箭头 CDC bitmapDC; bitmapDC.CreateCompatibleDC(&dc); CB bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_LEFTARROW); CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap); memDC.BitBlt(clientRect.left,clientRect.top,26,12,&bitmapDC,0,0,SRCCOPY);
bitmapDC.SelectObject(pOldBitmap); bitmap.DeleteObject(); pOldBitmap = NULL; //画中间背景 bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_SPAN); pOldBitmap = bitmapDC.SelectObject(&bitmap); int nWidth = clientRect.Width() - 26; memDC.StretchBlt(clientRect.left+26, clientRect.top,
nWidth,12,&bitmapDC, 0,0, 1, 12, SRCCOPY); bitmapDC.SelectObject(pOldBitmap); bitmap.DeleteObject(); pOldBitmap = NULL; //画右箭头 bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_RIGHTARROW); pOldBitmap = bitmapDC.SelectObject(&bitmap); memDC.BitBlt(nWidth,clientRect.top,26,12,&bitmapDC,0,0,SRCCOPY);
bitmapDC.SelectObject(pOldBitmap); bitmap.DeleteObject(); pOldBitmap = NULL; //If there is nothing to scroll then don't //show the thumb control otherwise show it TRACE(&pList-&GetScrollLimit: %d\r\n&, pList-&GetScrollLimit(SB_HORZ) ); if(pList-&GetScrollLimit(SB_HORZ)
!= 0) { bitmap.LoadBitmap(IDB_HORIZONTAL_SCROLLBAR_THUMB); pOldBitmap = bitmapDC.SelectObject(&bitmap); memDC.BitBlt( clientRect.left+nThumbLeft, clientRect.top, 26,12, &bitmapDC, 0, 0, SRCCOPY); bitmapDC.SelectObject(pOldBitmap); bitmap.DeleteObject(); pOldBitmap
= NULL; } } void CSkinHorizontalScrollbar::LimitThumbPosition() { CRect clientR GetClientRect(&clientRect); // 滑块的范围是 左右箭头之间的区域, 左右箭头宽 26 像素 if(nThumbLeft+26 & (clientRect.Width()-26)) { nThumbLeft = clientRect.Width()-51; } if(nThumbLeft & (clientRect.left+25))
{ nThumbLeft = clientRect.left+25; } }
SkinHorizontalScrollbar.h
view plaincopy to clipboardprint?
1.#if !defined(AFX_SKINHORIZONTALSCROLLBAR_H__77B6A7DF__AA66_2DB__INCLUDED_)
2.#define AFX_SKINHORIZONTALSCROLLBAR_H__77B6A7DF__AA66_2DB__INCLUDED_
4.#include &memdc.h&
7.class CSkinHorizontalScrollbar : public CStatic
10. CSkinHorizontalScrollbar();
11. void ScrollLeft();
12. void ScrollRight();
14. bool bMouseDownArrowRight, bMouseDownArrowL
15. bool bD
16. bool bMouseD
18. int nThumbL
19. double dbThumbR
20. double dbThumbI
22.// Attributes
23.public:
25.// Operations
26.public:
29.public:
30. CListCtrl* pL
31. void LimitThumbPosition();
32. void Draw();
33. void PageLeft();
34. void PageRight();
35. void UpdateThumbPosition();
36. virtual ~CSkinHorizontalScrollbar();
40.protected:
41. afx_msg void OnPaint();
42. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
43. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
44. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
45. afx_msg void OnTimer(UINT nIDEvent);
47. DECLARE_MESSAGE_MAP()
#if !defined(AFX_SKINHORIZONTALSCROLLBAR_H__77B6A7DF__AA66_2DB__INCLUDED_) #define AFX_SKINHORIZONTALSCROLLBAR_H__77B6A7DF__AA66_2DB__INCLUDED_ #include &memdc.h& class CSkinHorizontalScrollbar : public CStatic { public:
CSkinHorizontalScrollbar(); void ScrollLeft(); void ScrollRight(); bool bMouseDownArrowRight, bMouseDownArrowL bool bD bool bMouseD int nThumbL double dbThumbR double dbThumbI // Attributes public: // Operations public:
public: CListCtrl* pL void LimitThumbPosition(); void Draw(); void PageLeft(); void PageRight(); void UpdateThumbPosition(); virtual ~CSkinHorizontalScrollbar(); protected: afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnTimer(UINT nIDEvent); DECLARE_MESSAGE_MAP() }; #endif
CMyListCtrl::Init 动态创建滚动条控件, 并定位滚动条的位置。
然后 在CDialog::OnInitDialog() 点调用 m_list.Init 即可完成。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:75152次
积分:1065
积分:1065
排名:千里之外
原创:27篇
转载:12篇
评论:26条
(1)(2)(2)(1)(2)(1)(2)(1)(1)(1)(6)(7)(4)(3)(4)(2)浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。C++技术类(1)
&if( RunTimeHelper::IsVista() )
&&::SetWindowLong(hWnd, GWL_STYLE, (nBS|LVS_REPORT|LVS_OWNERDRAWFIXED|LVS_ALIGNLEFT|LVS_NOCOLUMNHEADER|LVS_NOSCROLL));
&&::SetWindowLong(hWnd, GWL_STYLE, (nBS|LVS_REPORT|LVS_OWNERDRAWFIXED|LVS_ALIGNLEFT|LVS_NOCOLUMNHEADER));
RunTimeHelper::IsVista() 这个函数是WTL提供的,完全可以自己写来判断是不是Vista or later,
&//这种只有在Comctl32.dll versions 4.71 through 5.82
&InitializeFlatSB(m_hWnd);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&FlatSB_EnableScrollBar(m_hWnd, SB_BOTH, ESB_DISABLE_BOTH);&
在WM_NCCALCSIZE消息的响应函数中写下如下代码
&//XP去掉滚动条,XP窗口风格生效,而经典风格下是无效的
&ModifyStyle( WS_HSCROLL | WS_VSCROLL, 0 ); // 去掉水平滚动条和竖直滚动条&&&&&&&
&return ::DefWindowProc(m_hWnd,WM_NCCALCSIZE,wParam,lParam);
这三步过后就能实现了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:623次
排名:千里之外本帖子已过去太久远了,不再提供回复功能。2012年4月 VC/MFC大版内专家分月排行榜第一
2012年5月 VC/MFC大版内专家分月排行榜第二2012年3月 VC/MFC大版内专家分月排行榜第二2011年7月 VC/MFC大版内专家分月排行榜第二2011年1月 VC/MFC大版内专家分月排行榜第二2010年12月 VC/MFC大版内专家分月排行榜第二2010年9月 VC/MFC大版内专家分月排行榜第二2010年6月 VC/MFC大版内专家分月排行榜第二2010年5月 VC/MFC大版内专家分月排行榜第二2010年4月 VC/MFC大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 listctrl 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信