home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / atl / atlduck / duckdoerdlg.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  4KB  |  126 lines

  1. // DuckDoerDlg.cpp : Implementation of CDuckDoerDlg
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12.  
  13. #include "stdafx.h"
  14. #include "DuckDoerDlg.h"
  15. #include "duckdoer.h"
  16.  
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CDuckDoerDlg
  19.  
  20. CDuckDoerDlg::CDuckDoerDlg()
  21. {
  22.     m_pObject = NULL;
  23.     m_xListboxExtentMax = 0;
  24.     CDuckDoer::m_pDlg = this;
  25. }
  26.  
  27. CDuckDoerDlg::~CDuckDoerDlg()
  28. {
  29. }
  30.  
  31. LRESULT CDuckDoerDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  32. {
  33.     CenterWindow();
  34.     return 1;  // Let the system set the focus
  35. }
  36.  
  37. LRESULT CDuckDoerDlg::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  38. {
  39.     ShowWindow(SW_HIDE);
  40.     _ASSERT(m_pObject != NULL);
  41.     m_pObject->m_bLocked = FALSE;
  42.     ((IDuckDoer*)m_pObject)->Release(); // release the lock on the object
  43.     return 0;
  44. }
  45.  
  46. LRESULT CDuckDoerDlg::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  47. {
  48.     _ASSERT(FALSE);
  49.     return 0;
  50. }
  51.  
  52. LRESULT CDuckDoerDlg::OnQuack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  53. {
  54.     USES_CONVERSION;
  55.     TCHAR szWhosCalling[100];
  56.     _tcscpy(szWhosCalling, _T("Server Quacking for Sink No. XX."));
  57.     CComBSTR szOut(szWhosCalling);
  58.     m_pObject->Fire_Quack(szOut);
  59.     return 1;
  60. }
  61.  
  62. LRESULT CDuckDoerDlg::OnFlap(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  63. {
  64.     USES_CONVERSION;
  65.     TCHAR szWhosCalling[100];
  66.     _tcscpy(szWhosCalling, _T("Server Flapping for Sink No. XX."));
  67.     CComBSTR  szOut(szWhosCalling);
  68.     m_pObject->Fire_Flap(szOut);
  69.     return 1;
  70. }
  71.  
  72. LRESULT CDuckDoerDlg::OnPaddle(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  73. {
  74.     USES_CONVERSION;
  75.     TCHAR szWhosCalling[100];
  76.     _tcscpy(szWhosCalling, _T("Server Paddling for Sink No. XX."));
  77.     CComBSTR  szOut(szWhosCalling);
  78.     m_pObject->Fire_Paddle(szOut);
  79.     return 1;
  80. }
  81.  
  82. LRESULT CDuckDoerDlg::OnWalk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  83. {
  84.     USES_CONVERSION;
  85.     TCHAR szWhosCalling[100];
  86.     _tcscpy(szWhosCalling, _T("Server Walking for Sink No. XX."));
  87.     CComBSTR  szOut(szWhosCalling);
  88.     m_pObject->Fire_Walk(szOut);
  89.     return 1;
  90. }
  91.  
  92. void CDuckDoerDlg::RecalcListboxExtent(LPCTSTR szEntry, BOOL bAdded)
  93. {
  94.     HDC hDC;
  95.     HWND hwndListbox = GetDlgItem(IDC_LISTCONNPTS);
  96.     SIZE  size;
  97.  
  98.     _ASSERTE(hwndListbox != NULL);
  99.     hDC = ::GetDC(hwndListbox);
  100.     _ASSERTE(hDC != NULL);
  101.     _VERIFY(::GetTextExtentPoint32(hDC, szEntry, _tcslen(szEntry), &size));
  102.     if (bAdded && size.cx > m_xListboxExtentMax)
  103.     {
  104.         m_xListboxExtentMax = size.cx;
  105.         ::SendMessage(hwndListbox, LB_SETHORIZONTALEXTENT, (WPARAM)size.cx, 0);
  106.     }
  107.     else if (!bAdded && size.cx == m_xListboxExtentMax)
  108.     {
  109.         TCHAR szBuffer[100];
  110.         m_xListboxExtentMax = 0;
  111.         int nLim = ::SendMessage(hwndListbox, LB_GETCOUNT, 0, 0);
  112.         _ASSERTE(nLim != LB_ERR);
  113.         for (int i = 0; i <= nLim; i++)
  114.         {
  115.             ::SendMessage(hwndListbox, LB_GETTEXT, (WPARAM)i, (LPARAM)szBuffer);
  116.             ::GetTextExtentPoint32(hDC, szBuffer, _tcslen(szBuffer), &size);
  117.             if (size.cx > m_xListboxExtentMax)
  118.                 m_xListboxExtentMax = size.cx;
  119.         }
  120.  
  121.         ::SendMessage(hwndListbox, LB_SETHORIZONTALEXTENT, (WPARAM)size.cx, 0);
  122.     }
  123.  
  124.     ::ReleaseDC(hwndListbox, hDC);
  125. }
  126.