TitledPicsWnd.cpp
上传用户:cuiyan8037
上传日期:2007-01-01
资源大小:215k
文件大小:17k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // TitledPicsWnd.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "TitledPicsWnd.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CTitledPicsWnd
  12. IMPLEMENT_DYNCREATE(CTitledPicsWnd, CScrollView)
  13. CTitledPicsWnd::CTitledPicsWnd()
  14. {
  15. m_bFocusIsDone = FALSE ;
  16. m_bStretchBitmaps = FALSE ;
  17. m_bWantsBestFit = TRUE ;
  18. m_dwWndBkgndColour = ::GetSysColor(COLOR_WINDOW);
  19. m_iSelectedItem = TPW_NONE ;
  20. m_sizSection.cx = TPW_SIZE_BESTFIT ;
  21. m_sizSection.cy = TPW_SIZE_BESTFIT ;
  22. m_uSpacing = TPW_SIZE_DEFAULT_SPACING ;
  23. m_uSectionsPerRow = 1 ;
  24. }
  25. CTitledPicsWnd::~CTitledPicsWnd()
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CTitledPicsWnd, CScrollView)
  29. //{{AFX_MSG_MAP(CTitledPicsWnd)
  30. ON_WM_DESTROY()
  31. ON_WM_LBUTTONDOWN()
  32. ON_WM_VSCROLL()
  33. ON_WM_LBUTTONDBLCLK()
  34. ON_WM_RBUTTONDOWN()
  35. ON_WM_SIZE()
  36. ON_WM_KILLFOCUS()
  37. ON_WM_SETFOCUS()
  38. //}}AFX_MSG_MAP
  39. END_MESSAGE_MAP()
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CTitledPicsWnd drawing
  42. void CTitledPicsWnd::OnInitialUpdate()
  43. {
  44. CScrollView::OnInitialUpdate();
  45. CSize sizeTotal;
  46. // TODO: calculate the total size of this view
  47. sizeTotal.cx = sizeTotal.cy = 100;
  48. SetScrollSizes(MM_TEXT, sizeTotal);
  49. }
  50. void CTitledPicsWnd::OnDraw(CDC* pDC)
  51. {
  52. BOOL bWasCreated ;
  53. CBitmap *pBmp, *pBmpOld ;
  54. CDC dcTemp ;
  55. CDocument *pDoc = GetDocument();
  56. CFont *pFntOld ;
  57. COLORREF dwColour ;
  58. CRect rctBmp, rctClip ;
  59. CSize sizBmp, sizFont ;
  60. CString strTitle ;
  61. int x, y ;
  62. UINT n, uSize, uID, uTextHeight ;
  63. // Update the stored window background colour, for when we need to remove the 
  64. // focus rectangle.
  65. pDC->GetClipBox(&rctClip);
  66. dwColour = pDC->GetPixel(rctClip.TopLeft() );
  67. if (dwColour != (COLORREF)-1)
  68. m_dwWndBkgndColour = dwColour ;
  69. dcTemp.CreateCompatibleDC(NULL);
  70. if (m_sizSection.cx == TPW_SIZE_BESTFIT || m_sizSection.cy == TPW_SIZE_BESTFIT)
  71. CalculateBestFit();
  72. else
  73. CalculateFit();
  74. SetNewPageSize();
  75. // Now they have proper sizes.
  76. uSize = GetSize();
  77. for (n = 0 ; n < uSize ; n++)
  78. {
  79. bWasCreated = FALSE ;
  80. if (m_aryDwBitmapTypes.GetAt(n) == TPW_BITMAPTYPE_OBJECT)
  81. pBmp = (CBitmap *)m_aryDwBitmaps.GetAt(n);
  82. else
  83. {
  84. bWasCreated = TRUE ;
  85. pBmp = new CBitmap ;
  86. uID = (UINT)m_aryDwBitmaps.GetAt(n);
  87. pBmp->LoadBitmap(uID);
  88. }
  89. // Get top-left position for bitmap.
  90. sizBmp = GetBitmapSize(pBmp);
  91. sizFont = GetFontSize();
  92. uTextHeight = (TPW_NUM_LINESTEXT * sizFont.cy);
  93. x = n % m_uSectionsPerRow ;
  94. y = n / m_uSectionsPerRow ;
  95. if (m_bStretchBitmaps)
  96. {
  97. x = (x * m_sizSection.cx) + m_uSpacing ;
  98. y = (y * m_sizSection.cy) + m_uSpacing ;
  99. }
  100. else
  101. {
  102. x = (x * m_sizSection.cx) + 
  103. ( (m_sizSection.cx - sizBmp.cx) / 2) + 
  104. m_uSpacing ;
  105. y = (y * m_sizSection.cy) + 
  106. ( (m_sizSection.cy - sizBmp.cy - uTextHeight) / 2) + 
  107. m_uSpacing ;
  108. }
  109. // Paint the bitmap, if necessary.
  110. if (m_bStretchBitmaps)
  111. {
  112. rctBmp.SetRect(x, y, x + m_sizSection.cx - (2 * m_uSpacing), 
  113. y + m_sizSection.cy - uTextHeight - (2 * m_uSpacing) );
  114. }
  115. else
  116. rctBmp.SetRect(x, y, x + sizBmp.cx, y + sizBmp.cy);
  117. if (pDC->RectVisible(&rctBmp) )
  118. {
  119. pBmpOld = (CBitmap *)dcTemp.SelectObject(pBmp);
  120. if (m_bStretchBitmaps)
  121. {
  122. pDC->StretchBlt(x, y, rctBmp.Width(), rctBmp.Height(), 
  123. &dcTemp, 0, 0, sizBmp.cx, sizBmp.cy, SRCCOPY);
  124. }
  125. else
  126. {
  127. pDC->BitBlt(x, y, rctBmp.Width(), rctBmp.Height(), &dcTemp, 0, 
  128. 0, SRCCOPY);
  129. }
  130. dcTemp.SelectObject(pBmpOld);
  131. }
  132. // Draw the title.
  133. strTitle = m_aryStrTitles.GetAt(n);
  134. rctBmp.SetRect(x, y + rctBmp.Height(), x + rctBmp.Width(), 
  135. y + m_sizSection.cy);
  136. pFntOld = (CFont *)pDC->SelectObject(&m_fntSmall);
  137. pDC->DrawText(strTitle, rctBmp, DT_CENTER|DT_VCENTER|DT_WORDBREAK);
  138. pDC->SelectObject(pFntOld);
  139. if (bWasCreated)
  140. {
  141. pBmp->DeleteObject();
  142. delete pBmp ;
  143. }
  144. }
  145. // We may need to show the focus. We specifically should NOT show it if it has 
  146. // already been dealt with elsewhere; in this case, scrolling already takes 
  147. // care of replacing it, even though this routine gets called as part of a 
  148. // scroll, and when this window gets the focus it is also taken care of. 
  149. // However, an example of when we DO need to do it here is if the parent window 
  150. // is resized - the focus is not actually lost, but repainting occurs and there 
  151. // is nothing else to put the focus back. For these reasons we use a flag to 
  152. // indicate if it is safe for us to put back the focus rectangle from here.
  153. if (!m_bFocusIsDone && GetFocus() == this)
  154. {
  155. if (m_iSelectedItem != TPW_NONE)
  156. DrawFocusOnItem(m_iSelectedItem);
  157. }
  158. m_bFocusIsDone = FALSE ; // Reset the flag.
  159. dcTemp.DeleteDC();
  160. }
  161. /////////////////////////////////////////////////////////////////////////////
  162. // CTitledPicsWnd diagnostics
  163. #ifdef _DEBUG
  164. void CTitledPicsWnd::AssertValid() const
  165. {
  166. CScrollView::AssertValid();
  167. }
  168. void CTitledPicsWnd::Dump(CDumpContext& dc) const
  169. {
  170. CScrollView::Dump(dc);
  171. }
  172. #endif //_DEBUG
  173. /////////////////////////////////////////////////////////////////////////////
  174. // CTitledPicsWnd message handlers
  175. void CTitledPicsWnd::SetSectionSize(int cx, int cy) {
  176. if ( (cx < 0 && cx != TPW_SIZE_BESTFIT) || 
  177. (cy < 0 && cy != TPW_SIZE_BESTFIT) )
  178. {
  179. ASSERT(FALSE);
  180. }
  181. m_sizSection.cx = cx ;
  182. m_sizSection.cy = cy ;
  183. if (m_sizSection.cx == TPW_SIZE_BESTFIT || 
  184. m_sizSection.cy == TPW_SIZE_BESTFIT)
  185. {
  186. m_bWantsBestFit = TRUE ;
  187. }
  188. else m_bWantsBestFit = FALSE ;
  189. } int CTitledPicsWnd::Add(UINT uBmpID, CString strTitle) { int iIndex1, iIndex2, iIndex3 ;
  190. iIndex1 = m_aryDwBitmapTypes.Add(TPW_BITMAPTYPE_RESOURCE);
  191. iIndex2 = m_aryDwBitmaps.Add( (DWORD)uBmpID);
  192. iIndex3 = m_aryStrTitles.Add(strTitle);
  193. ASSERT(iIndex1 == iIndex2);
  194. ASSERT(iIndex2 == iIndex3);
  195. return iIndex1 ;
  196. }
  197. int CTitledPicsWnd::Add(CBitmap *pBmp, CString strTitle) { int iIndex1, iIndex2, iIndex3 ;
  198. iIndex1 = m_aryDwBitmapTypes.Add(TPW_BITMAPTYPE_OBJECT);
  199. iIndex2 = m_aryDwBitmaps.Add( (DWORD)pBmp);
  200. iIndex3 = m_aryStrTitles.Add(strTitle);
  201. ASSERT(iIndex1 == iIndex2);
  202. ASSERT(iIndex2 == iIndex3);
  203. return iIndex1 ;
  204. } void CTitledPicsWnd::RemoveAt(UINT uIndex, UINT uCount) { m_aryDwBitmapTypes.RemoveAt(uIndex, uCount);
  205. m_aryDwBitmaps.RemoveAt(uIndex, uCount);
  206. m_aryStrTitles.RemoveAt(uIndex, uCount);
  207. } void CTitledPicsWnd::RemoveAll(void) { m_aryDwBitmapTypes.RemoveAll();
  208. m_aryDwBitmaps.RemoveAll();
  209. m_aryStrTitles.RemoveAll();
  210. } void CTitledPicsWnd::SetSize(UINT uNewSize) { m_aryDwBitmapTypes.SetSize(uNewSize);
  211. m_aryDwBitmaps.SetSize(uNewSize);
  212. m_aryStrTitles.SetSize(uNewSize);
  213. } void CTitledPicsWnd::CalculateBestFit(void) {
  214. BOOL bWasCreated ;
  215. CBitmap *pBmp ;
  216. CRect rctClient ;
  217. CSize sizBmp, sizMax(0, 0), sizFont ;
  218. UINT uSize, n, uID, uWidth ;
  219. if (m_hWnd != NULL && GetSize() > 0)
  220. {
  221. GetClientRect(&rctClient);
  222. // Go through all the bitmaps and make a note of the widest and highest.
  223. uSize = GetSize();
  224. for (n = 0 ; n < uSize ; n++)
  225. {
  226. bWasCreated = FALSE ;
  227. if (m_aryDwBitmapTypes.GetAt(n) == TPW_BITMAPTYPE_OBJECT)
  228. pBmp = (CBitmap *)m_aryDwBitmaps.GetAt(n);
  229. else
  230. {
  231. bWasCreated = TRUE ;
  232. pBmp = new CBitmap ;
  233. uID = (UINT)m_aryDwBitmaps.GetAt(n);
  234. pBmp->LoadBitmap(uID);
  235. }
  236. sizBmp = GetBitmapSize(pBmp);
  237. if (sizBmp.cx > sizMax.cx)
  238. sizMax.cx = sizBmp.cx ;
  239. if (sizBmp.cy > sizMax.cy)
  240. sizMax.cy = sizBmp.cy ;
  241. if (bWasCreated)
  242. {
  243. pBmp->DeleteObject();
  244. delete pBmp ;
  245. }
  246. }
  247. // Now see how many whole bitmaps will fit into the width of the window, and 
  248. // how much width each can take up.
  249. sizMax.cx += (2 * TPW_SIZE_DEFAULT_SPACING);
  250. sizMax.cy += (2 * TPW_SIZE_DEFAULT_SPACING);
  251. uWidth = rctClient.Width() - ::GetSystemMetrics(SM_CXVSCROLL);
  252. m_uSectionsPerRow = uWidth / sizMax.cx ;
  253. // This may be slightly larger than the maximum bitmap width if there was room 
  254. // to spare.
  255. m_sizSection.cx = uWidth / m_uSectionsPerRow ;
  256. sizFont = GetFontSize();
  257. m_sizSection.cy = sizMax.cy + (TPW_NUM_LINESTEXT * sizFont.cy);
  258. } } UINT CTitledPicsWnd::GetSize(void) { return m_aryDwBitmapTypes.GetSize(); } CSize CTitledPicsWnd::GetBitmapSize(CBitmap *pBmp) {
  259. BITMAP sBmp ;
  260. CSize sizBmp(0, 0);
  261. if (pBmp != NULL)
  262. {
  263. pBmp->GetObject(sizeof(BITMAP), &sBmp);
  264. sizBmp.cx = sBmp.bmWidth ;
  265. sizBmp.cy = sBmp.bmHeight ;
  266. }
  267. return sizBmp ; } void CTitledPicsWnd::SetSpacing(UINT uSpacing) { m_uSpacing = uSpacing ; } CSize CTitledPicsWnd::GetFontSize(void) { CClientDC *pDC ;
  268. CFont *pFntOld ;
  269. CSize sizFont(0, 0);
  270. if (m_hWnd != NULL)
  271. {
  272. pDC = new CClientDC(this);
  273. pFntOld = (CFont *)pDC->SelectObject(&m_fntSmall);
  274. sizFont = pDC->GetTextExtent("X", 1);
  275. pDC->SelectObject(pFntOld);
  276. delete pDC ;
  277. }
  278. return sizFont ; } void CTitledPicsWnd::SetNewPageSize(void) { CSize sizPage, sizBigStep, sizLittleStep ;
  279. UINT uRows, uMax ;
  280. sizLittleStep = m_sizSection ;
  281. sizBigStep = m_sizSection ;
  282. uMax = GetSize();
  283. uRows = uMax / m_uSectionsPerRow ;
  284. if (m_uSectionsPerRow * uRows < uMax)
  285. uRows++ ;
  286. sizPage.cy = uRows * m_sizSection.cy ;
  287. sizPage.cx = m_uSectionsPerRow * m_sizSection.cx ;
  288. SetScrollSizes(MM_TEXT, sizPage, sizBigStep, sizLittleStep); } void CTitledPicsWnd::CalculateFit(void) {
  289. CRect rctClient ;
  290. if (m_hWnd != NULL && GetSize() > 0)
  291. {
  292. GetClientRect(&rctClient);
  293. m_uSectionsPerRow = rctClient.Width() / m_sizSection.cx ;
  294. } }
  295. BOOL CTitledPicsWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
  296. {
  297. BOOL bCreatedOK ;
  298. m_fntSmall.CreateFont(10, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, 
  299. ANSI_CHARSET, OUT_DEFAULT_PRECIS, 
  300. CLIP_DEFAULT_PRECIS, PROOF_QUALITY, 
  301. VARIABLE_PITCH|FF_SWISS, NULL);
  302. bCreatedOK = CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  303. if (bCreatedOK)
  304. OnInitialUpdate();
  305. return bCreatedOK ;
  306. }
  307. void CTitledPicsWnd::OnDestroy() 
  308. {
  309. CScrollView::OnDestroy();
  310. m_fntSmall.DeleteObject();
  311. }
  312. void CTitledPicsWnd::StretchBitmaps(BOOL bStretch) { m_bStretchBitmaps = bStretch ; }
  313. void CTitledPicsWnd::OnLButtonDown(UINT nFlags, CPoint point) 
  314. {
  315. BOOL bChanged = FALSE ;
  316. CPoint ptTopLeft ;
  317. CRect rctFocus ;
  318. int x, y, iIndex ;
  319. ptTopLeft = GetScrollPosition();
  320. point += ptTopLeft ;
  321. x = point.x / m_sizSection.cx ;
  322. y = point.y / m_sizSection.cy ;
  323. iIndex = (y * m_uSectionsPerRow) + x ;
  324. if (x < (int)m_uSectionsPerRow && iIndex < (int)GetSize() )
  325. {
  326. // Remove any existing focus.
  327. if (m_iSelectedItem != TPW_NONE)
  328. DrawFocusOnItem(m_iSelectedItem, FALSE);
  329. if (m_iSelectedItem != iIndex)
  330. bChanged = TRUE ;
  331. m_iSelectedItem = iIndex ;
  332. DrawFocusOnItem(m_iSelectedItem);
  333. // Notify parent of the events.
  334. NotifyParent(TPWN_CLICK);
  335. if (bChanged)
  336. NotifyParent(TPWN_SELCHANGE);
  337. }
  338. CScrollView::OnLButtonDown(nFlags, point);
  339. SetFocus();
  340. }
  341. void CTitledPicsWnd::DrawFocusOnItem(UINT uItem, BOOL bDraw) {
  342. CClientDC dc(this);
  343. CPen penBkgnd, *pPenOld ;
  344. CRect rctFocus ;
  345. int x, y ;
  346. CScrollView::OnPrepareDC(&dc);
  347. if ( (int)uItem != TPW_NONE)
  348. {
  349. x = uItem % m_uSectionsPerRow ;
  350. y = uItem / m_uSectionsPerRow ;
  351. rctFocus.SetRect(x * m_sizSection.cx, y * m_sizSection.cy, 
  352. (x + 1) * m_sizSection.cx, (y + 1) * m_sizSection.cy);
  353. if (bDraw)
  354. dc.DrawFocusRect(&rctFocus);
  355. else
  356. {
  357. penBkgnd.CreatePen(PS_SOLID, 1, m_dwWndBkgndColour);
  358. pPenOld = (CPen *)dc.SelectObject(&penBkgnd);
  359. dc.SelectStockObject(NULL_BRUSH);
  360. dc.Rectangle(rctFocus);
  361. dc.SelectObject(pPenOld);
  362. penBkgnd.DeleteObject();
  363. }
  364. }
  365. }
  366. void CTitledPicsWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  367. {
  368. // Prevent OnDraw() from interfering with the focus rectangle.
  369. m_bFocusIsDone = TRUE ;
  370. // Remove any existing focus.
  371. if (m_iSelectedItem != TPW_NONE)
  372. DrawFocusOnItem(m_iSelectedItem, FALSE);
  373. CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
  374. if (m_iSelectedItem != TPW_NONE)
  375. DrawFocusOnItem(m_iSelectedItem);
  376. // OnDraw() can revert to normal.
  377. m_bFocusIsDone = FALSE ;
  378. }
  379. int CTitledPicsWnd::GetSel(void) { return m_iSelectedItem ; } void CTitledPicsWnd::SetSel(int iIndex) {
  380. BOOL bChanged = FALSE ;
  381. if (iIndex == TPW_NONE || (iIndex >= 0 && iIndex < (int)GetSize() ) )
  382. {
  383. // Remove any existing focus.
  384. if (m_iSelectedItem != TPW_NONE)
  385. DrawFocusOnItem(m_iSelectedItem, FALSE);
  386. if (m_iSelectedItem != iIndex)
  387. bChanged = TRUE ;
  388. m_iSelectedItem = iIndex ;
  389. if (m_iSelectedItem != TPW_NONE)
  390. DrawFocusOnItem(m_iSelectedItem);
  391. // Notify parent of the event.
  392. if (bChanged)
  393. NotifyParent(TPWN_SELCHANGE);
  394. }
  395. }
  396. void CTitledPicsWnd::OnLButtonDblClk(UINT nFlags, CPoint point) 
  397. {
  398. BOOL bChanged = FALSE ;
  399. CPoint ptTopLeft ;
  400. CRect rctFocus ;
  401. int x, y, iIndex ;
  402. ptTopLeft = GetScrollPosition();
  403. point += ptTopLeft ;
  404. x = point.x / m_sizSection.cx ;
  405. y = point.y / m_sizSection.cy ;
  406. iIndex = (y * m_uSectionsPerRow) + x ;
  407. if (x < (int)m_uSectionsPerRow && iIndex < (int)GetSize() )
  408. {
  409. // Remove any existing focus.
  410. if (m_iSelectedItem != TPW_NONE)
  411. DrawFocusOnItem(m_iSelectedItem, FALSE);
  412. if (m_iSelectedItem != iIndex)
  413. bChanged = TRUE ;
  414. m_iSelectedItem = iIndex ;
  415. DrawFocusOnItem(m_iSelectedItem);
  416. // Notify parent of the events.
  417. NotifyParent(TPWN_DBLCLK);
  418. if (bChanged)
  419. NotifyParent(TPWN_SELCHANGE);
  420. }
  421. CScrollView::OnLButtonDblClk(nFlags, point);
  422. SetFocus();
  423. }
  424. void CTitledPicsWnd::NotifyParent(UINT uNotifyCode) { CWnd *pWndParent ;
  425. UINT uID ;
  426. pWndParent = GetParent();
  427. if (pWndParent != NULL)
  428. {
  429. uID = GetDlgCtrlID();
  430. pWndParent->PostMessage(WM_COMMAND,
  431. (WPARAM)MAKEWPARAM(uID, uNotifyCode),
  432. (LPARAM)m_hWnd);
  433. }
  434. }
  435. void CTitledPicsWnd::OnRButtonDown(UINT nFlags, CPoint point) 
  436. {
  437. BOOL bChanged = FALSE ;
  438. CPoint ptTopLeft ;
  439. CRect rctFocus ;
  440. int x, y, iIndex ;
  441. ptTopLeft = GetScrollPosition();
  442. point += ptTopLeft ;
  443. x = point.x / m_sizSection.cx ;
  444. y = point.y / m_sizSection.cy ;
  445. iIndex = (y * m_uSectionsPerRow) + x ;
  446. if (x < (int)m_uSectionsPerRow && iIndex < (int)GetSize() )
  447. {
  448. // Remove any existing focus.
  449. if (m_iSelectedItem != TPW_NONE)
  450. DrawFocusOnItem(m_iSelectedItem, FALSE);
  451. if (m_iSelectedItem != iIndex)
  452. bChanged = TRUE ;
  453. m_iSelectedItem = iIndex ;
  454. DrawFocusOnItem(m_iSelectedItem);
  455. // Notify parent of the events.
  456. NotifyParent(TPWN_RCLICK);
  457. if (bChanged)
  458. NotifyParent(TPWN_SELCHANGE);
  459. }
  460. CScrollView::OnRButtonDown(nFlags, point);
  461. SetFocus();
  462. }
  463. CString CTitledPicsWnd::GetSelectedTitle(void) { CString strTitle("");
  464. if (m_iSelectedItem != TPW_NONE)
  465. strTitle = m_aryStrTitles.GetAt(m_iSelectedItem);
  466. return strTitle ; } CBitmap * CTitledPicsWnd::GetSelectedBitmapPointer(void) { CBitmap *pBmp = NULL ;
  467. if (m_iSelectedItem != TPW_NONE)
  468. {
  469. if (m_aryDwBitmapTypes.GetAt(m_iSelectedItem) == TPW_BITMAPTYPE_OBJECT)
  470. pBmp = (CBitmap *)m_aryDwBitmaps.GetAt(m_iSelectedItem);
  471. }
  472. return pBmp ;
  473. } UINT CTitledPicsWnd::GetSelectedBitmapID(void) { UINT uBmpID = 0 ;
  474. if (m_iSelectedItem != TPW_NONE)
  475. {
  476. if (m_aryDwBitmapTypes.GetAt(m_iSelectedItem) == TPW_BITMAPTYPE_RESOURCE)
  477. uBmpID = (UINT)m_aryDwBitmaps.GetAt(m_iSelectedItem);
  478. }
  479. return uBmpID ;
  480. } UINT CTitledPicsWnd::GetSelectedBitmapType(void) { UINT uBmpType = 0 ;
  481. if (m_iSelectedItem != TPW_NONE)
  482. uBmpType = (UINT)m_aryDwBitmapTypes.GetAt(m_iSelectedItem);
  483. return uBmpType ; }
  484. void CTitledPicsWnd::OnSize(UINT nType, int cx, int cy) 
  485. {
  486. CScrollView::OnSize(nType, cx, cy);
  487. // Since CalculateBestFit() changes the actual dimensions to real values, if 
  488. // the user originally specified best fit we must recalculate the section 
  489. // size - it will not happen automatically.
  490. if (m_bWantsBestFit)
  491. CalculateBestFit();
  492. }
  493. void CTitledPicsWnd::OnKillFocus(CWnd* pNewWnd) 
  494. {
  495. if (m_iSelectedItem != TPW_NONE)
  496. DrawFocusOnItem(m_iSelectedItem, FALSE);
  497. CScrollView::OnKillFocus(pNewWnd);
  498. }
  499. void CTitledPicsWnd::OnSetFocus(CWnd* pOldWnd) 
  500. {
  501. CScrollView::OnSetFocus(pOldWnd);
  502. // Prevent OnDraw() from interfering with the focus rectangle.
  503. m_bFocusIsDone = TRUE ;
  504. // Make absolutely certain the window has been fully painted before we do this.
  505. UpdateWindow();
  506. if (m_iSelectedItem != TPW_NONE)
  507. DrawFocusOnItem(m_iSelectedItem);
  508. }