home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / dlgcomm.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  4KB  |  165 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #include "stdafx.h"
  12. #include <dlgs.h>
  13.  
  14. #ifdef AFX_AUX_SEG
  15. #pragma code_seg(AFX_AUX_SEG)
  16. #endif
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. #define new DEBUG_NEW
  24.  
  25. AFX_COMDAT UINT _afxMsgLBSELCHANGE = 0;
  26. AFX_COMDAT UINT _afxMsgSHAREVI = 0;
  27. AFX_COMDAT UINT _afxMsgFILEOK = 0;
  28. AFX_COMDAT UINT _afxMsgCOLOROK = 0;
  29. AFX_COMDAT UINT _afxMsgHELP = 0;
  30. AFX_COMDAT UINT _afxMsgSETRGB = 0;
  31.  
  32. BEGIN_MESSAGE_MAP(CCommonDialog, CDialog)
  33.     //{{AFX_MSG_MAP(CCommonDialog)
  34.     ON_WM_HELPINFO()
  35.     //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37.  
  38. UINT CALLBACK
  39. _AfxCommDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  40. {
  41.     if (hWnd == NULL)
  42.         return 0;
  43.  
  44.     _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
  45.     if (pThreadState->m_pAlternateWndInit != NULL)
  46.     {
  47.         ASSERT_KINDOF(CFileDialog,pThreadState->m_pAlternateWndInit);
  48.         pThreadState->m_pAlternateWndInit->SubclassWindow(hWnd);
  49.         pThreadState->m_pAlternateWndInit = NULL;
  50.     }
  51.     ASSERT(pThreadState->m_pAlternateWndInit == NULL);
  52.  
  53.     if (message == WM_INITDIALOG)
  54.     {
  55.         _afxMsgLBSELCHANGE = ::RegisterWindowMessage(LBSELCHSTRING);
  56.         _afxMsgSHAREVI = ::RegisterWindowMessage(SHAREVISTRING);
  57.         _afxMsgFILEOK = ::RegisterWindowMessage(FILEOKSTRING);
  58.         _afxMsgCOLOROK = ::RegisterWindowMessage(COLOROKSTRING);
  59.         _afxMsgHELP = ::RegisterWindowMessage(HELPMSGSTRING);
  60.         _afxMsgSETRGB = ::RegisterWindowMessage(SETRGBSTRING);
  61.         return (UINT)AfxDlgProc(hWnd, message, wParam, lParam);
  62.     }
  63.  
  64.     if (message == _afxMsgHELP ||
  65.        (message == WM_COMMAND && LOWORD(wParam) == pshHelp))
  66.     {
  67.         // just translate the message into the AFX standard help command.
  68.         SendMessage(hWnd, WM_COMMAND, ID_HELP, 0);
  69.         return 1;
  70.     }
  71.  
  72.     if (message < 0xC000)
  73.     {
  74.         // not a ::RegisterWindowMessage message
  75.         return 0;
  76.     }
  77.  
  78.     // assume it is already wired up to a permanent one
  79.     CDialog* pDlg = (CDialog*)CWnd::FromHandlePermanent(hWnd);
  80.     ASSERT(pDlg != NULL);
  81.     ASSERT_KINDOF(CDialog, pDlg);
  82.  
  83.     if (pDlg->IsKindOf(RUNTIME_CLASS(CFileDialog)))
  84.     {
  85.         // If we're exploring then we are not interested in the Registered messages
  86.         if (((CFileDialog*)pDlg)->m_ofn.Flags & OFN_EXPLORER)
  87.             return 0;
  88.     }
  89.  
  90.     // RegisterWindowMessage - does not copy to lastState buffer, so
  91.     // CWnd::GetCurrentMessage and CWnd::Default will NOT work
  92.     // while in these handlers
  93.  
  94.     // Dispatch special commdlg messages through our virtual callbacks
  95.     if (message == _afxMsgSHAREVI)
  96.     {
  97.         ASSERT_KINDOF(CFileDialog, pDlg);
  98.         return ((CFileDialog*)pDlg)->OnShareViolation((LPCTSTR)lParam);
  99.     }
  100.     else if (message == _afxMsgFILEOK)
  101.     {
  102.         ASSERT_KINDOF(CFileDialog, pDlg);
  103.  
  104.         if (afxData.bWin4)
  105.             ((CFileDialog*)pDlg)->m_pofnTemp = (OPENFILENAME*)lParam;
  106.  
  107.         BOOL bResult = ((CFileDialog*)pDlg)->OnFileNameOK();
  108.  
  109.         ((CFileDialog*)pDlg)->m_pofnTemp = NULL;
  110.  
  111.         return bResult;
  112.     }
  113.     else if (message == _afxMsgLBSELCHANGE)
  114.     {
  115.         ASSERT_KINDOF(CFileDialog, pDlg);
  116.         ((CFileDialog*)pDlg)->OnLBSelChangedNotify(wParam, LOWORD(lParam),
  117.                 HIWORD(lParam));
  118.         return 0;
  119.     }
  120.     else if (message == _afxMsgCOLOROK)
  121.     {
  122.         ASSERT_KINDOF(CColorDialog, pDlg);
  123.         return ((CColorDialog*)pDlg)->OnColorOK();
  124.     }
  125.     else if (message == _afxMsgSETRGB)
  126.     {
  127.         // nothing to do here, since this is a SendMessage
  128.         return 0;
  129.     }
  130.     return 0;
  131. }
  132.  
  133. ////////////////////////////////////////////////////////////////////////////
  134. // CCommonDialog - common dialog helper class
  135.  
  136. void CCommonDialog::OnOK()
  137. {
  138.     ASSERT_VALID(this);
  139.  
  140.     if (!UpdateData(TRUE))
  141.     {
  142.         TRACE0("UpdateData failed during dialog termination.\n");
  143.         // the UpdateData routine will set focus to correct item
  144.         return;
  145.     }
  146.  
  147.     // Common dialogs do not require ::EndDialog
  148.     Default();
  149. }
  150.  
  151. void CCommonDialog::OnCancel()
  152. {
  153.     ASSERT_VALID(this);
  154.  
  155.     // Common dialogs do not require ::EndDialog
  156.     Default();
  157. }
  158.  
  159. BOOL CCommonDialog::OnHelpInfo(HELPINFO*)
  160. {
  161.     return Default();
  162. }
  163.  
  164. ////////////////////////////////////////////////////////////////////////////
  165.