UINT CALLBACK _AfxCommDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (hWnd == NULL) return 0; _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData(); if (pThreadState->m_pAlternateWndInit != NULL) { ASSERT_KINDOF(CFileDialog,pThreadState->m_pAlternateWndInit); pThreadState->m_pAlternateWndInit->SubclassWindow(hWnd); pThreadState->m_pAlternateWndInit = NULL; } ASSERT(pThreadState->m_pAlternateWndInit == NULL); if (message == WM_INITDIALOG) { _afxMsgLBSELCHANGE = ::RegisterWindowMessage(LBSELCHSTRING); _afxMsgSHAREVI = ::RegisterWindowMessage(SHAREVISTRING); _afxMsgFILEOK = ::RegisterWindowMessage(FILEOKSTRING); _afxMsgCOLOROK = ::RegisterWindowMessage(COLOROKSTRING); _afxMsgHELP = ::RegisterWindowMessage(HELPMSGSTRING); _afxMsgSETRGB = ::RegisterWindowMessage(SETRGBSTRING); return (UINT)AfxDlgProc(hWnd, message, wParam, lParam); } if (message == _afxMsgHELP || (message == WM_COMMAND && LOWORD(wParam) == pshHelp)) { // just translate the message into the AFX standard help command. SendMessage(hWnd, WM_COMMAND, ID_HELP, 0); return 1; } if (message < 0xC000) { // not a ::RegisterWindowMessage message return 0; } // assume it is already wired up to a permanent one CDialog* pDlg = (CDialog*)CWnd::FromHandlePermanent(hWnd); ASSERT(pDlg != NULL); ASSERT_KINDOF(CDialog, pDlg); if (pDlg->IsKindOf(RUNTIME_CLASS(CFileDialog))) { // If we're exploring then we are not interested in the Registered messages if (((CFileDialog*)pDlg)->m_ofn.Flags & OFN_EXPLORER) return 0; } // RegisterWindowMessage - does not copy to lastState buffer, so // CWnd::GetCurrentMessage and CWnd::Default will NOT work // while in these handlers // Dispatch special commdlg messages through our virtual callbacks if (message == _afxMsgSHAREVI) { ASSERT_KINDOF(CFileDialog, pDlg); return ((CFileDialog*)pDlg)->OnShareViolation((LPCTSTR)lParam); } else if (message == _afxMsgFILEOK) { ASSERT_KINDOF(CFileDialog, pDlg); if (afxData.bWin4) ((CFileDialog*)pDlg)->m_pofnTemp = (OPENFILENAME*)lParam; BOOL bResult = ((CFileDialog*)pDlg)->OnFileNameOK(); ((CFileDialog*)pDlg)->m_pofnTemp = NULL; return bResult; } else if (message == _afxMsgLBSELCHANGE) { ASSERT_KINDOF(CFileDialog, pDlg); ((CFileDialog*)pDlg)->OnLBSelChangedNotify(wParam, LOWORD(lParam), HIWORD(lParam)); return 0; } else if (message == _afxMsgCOLOROK) { ASSERT_KINDOF(CColorDialog, pDlg); return ((CColorDialog*)pDlg)->OnColorOK(); } else if (message == _afxMsgSETRGB) { // nothing to do here, since this is a SendMessage return 0; } return 0; }
UINT CALLBACK _AfxCommDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (hWnd == NULL) return 0; if (message == WM_SETFONT || message == WM_INITDIALOG) return (UINT)AfxDlgProc(hWnd, message, wParam, lParam); if (message == nMsgHELP || (message == WM_COMMAND && LOWORD(wParam) == pshHelp)) { // just translate the message into the AFX standard help command. SendMessage(hWnd, WM_COMMAND, ID_HELP, 0); return 1; } if (message < 0xC000) { // not a ::RegisterWindowMessage message return 0; } // RegisterWindowMessage - does not copy to lastState buffer, so // CWnd::GetCurrentMessage and CWnd::Default will NOT work // while in these handlers // Get our Window // assume it is already wired up to a permanent one CDialog* pDlg = (CDialog*)CWnd::FromHandlePermanent(hWnd); if (pDlg == NULL && (::GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD)) pDlg = (CDialog*)CWnd::FromHandlePermanent(::GetParent(hWnd)); ASSERT(pDlg != NULL); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CDialog))); // Dispatch special commdlg messages through our virtual callbacks if (message == nMsgSHAREVI) { ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CFileDialog))); return ((CFileDialog*)pDlg)->OnShareViolation((LPCTSTR)lParam); } else if (message == nMsgFILEOK) { ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CFileDialog))); return ((CFileDialog*)pDlg)->OnFileNameOK(); } else if (message == nMsgLBSELCHANGE) { ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CFileDialog))); ((CFileDialog*)pDlg)->OnLBSelChangedNotify(wParam, LOWORD(lParam), HIWORD(lParam)); return 0; } else if (message == nMsgCOLOROK) { ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CColorDialog))); return ((CColorDialog*)pDlg)->OnColorOK(); } else if (message == _afxNMsgSETRGB) { // nothing to do here, since this is a SendMessage return 0; } return 0; }