home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
mfc
/
src
/
oledlgs2.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-16
|
5KB
|
173 lines
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#ifdef AFX_OLE2_SEG
#pragma code_seg(AFX_OLE2_SEG)
#endif
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define new DEBUG_NEW
/////////////////////////////////////////////////////////////////////////////
// Common code for all OLE UI dialogs
UINT CALLBACK
AfxOleHookProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_INITDIALOG)
return (UINT)AfxDlgProc(hWnd, message, wParam, lParam);
if (message == WM_COMMAND && LOWORD(wParam) == IDC_OLEUIHELP)
{
// just translate the message into the AFX standard help command.
SendMessage(hWnd, WM_COMMAND, ID_HELP, 0);
return TRUE;
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////
COleDialog::COleDialog(CWnd* pParentWnd) : CCommonDialog(pParentWnd)
{
m_nLastError = (UINT)-1; // no error
}
int COleDialog::MapResult(UINT nResult)
{
// store it for GetLastError()
m_nLastError = nResult;
// map OLEUI_OK & OLEUI_CANCEL to IDOK & IDCANCEL
if (nResult == OLEUI_OK)
return IDOK;
if (nResult == OLEUI_CANCEL)
return IDCANCEL;
// otherwise, some sort of error
return -1;
}
/////////////////////////////////////////////////////////////////////////////
// COleDialog diagnostics
#ifdef _DEBUG
void COleDialog::Dump(CDumpContext& dc) const
{
CDialog::Dump(dc);
dc << "m_nLastError = " << m_nLastError;
dc << "\n";
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// COleBusyDialog implementation
COleBusyDialog::COleBusyDialog(HTASK htaskBlocking, BOOL bNotResponding,
DWORD dwFlags, CWnd* pParentWnd) : COleDialog(pParentWnd)
{
memset(&m_bz, 0, sizeof(m_bz)); // initialize structure to 0/NULL
// fill in common part
m_bz.cbStruct = sizeof(m_bz);
m_bz.dwFlags = dwFlags;
if (bNotResponding)
m_bz.dwFlags |= BZ_NOTRESPONDINGDIALOG;
m_bz.lpfnHook = AfxOleHookProc;
// specific for this dialog
m_bz.hTask = htaskBlocking;
ASSERT_VALID(this);
}
COleBusyDialog::~COleBusyDialog()
{
}
int COleBusyDialog::DoModal()
{
// Note: we don't call EnableModeless because that in itself implies
// outgoing calls. This dialog is normally brought up when an outgoing
// call cannot be made.
// find parent HWND
HWND hWndTop;
HWND hParent = CWnd::GetSafeOwner_(m_pParentWnd->GetSafeHwnd(), &hWndTop);
m_bz.hWndOwner = hParent;
// run the dialog
AfxHookWindowCreate(this);
int iResult = ::OleUIBusy(&m_bz);
AfxUnhookWindowCreate(); // just in case
Detach(); // just in case
// enable top level window
if (hWndTop != NULL)
::EnableWindow(hWndTop, TRUE);
// map the result
if (iResult == OLEUI_CANCEL)
return IDCANCEL;
if (iResult == OLEUI_BZ_SWITCHTOSELECTED)
m_selection = switchTo;
else if (iResult == OLEUI_BZ_RETRYSELECTED)
m_selection = retry;
else if (iResult == OLEUI_BZ_CALLUNBLOCKED)
m_selection = callUnblocked;
else
m_selection = (Selection)MapResult(iResult);
return IDOK;
}
/////////////////////////////////////////////////////////////////////////////
// COleBusyDialog diagnostics
#ifdef _DEBUG
void COleBusyDialog::Dump(CDumpContext& dc) const
{
COleDialog::Dump(dc);
dc << "m_bz.cbStruct = " << m_bz.cbStruct;
dc << "\nm_bz.dwFlags = " << (LPVOID)m_bz.dwFlags;
dc << "\nm_bz.hWndOwner = " << (UINT)m_bz.hWndOwner;
dc << "\nm_bz.lpszCaption = " << m_bz.lpszCaption;
dc << "\nm_bz.lCustData = " << (LPVOID)m_bz.lCustData;
dc << "\nm_bz.hInstance = " << (UINT)m_bz.hInstance;
dc << "\nm_bz.lpszTemplate = " << (LPVOID)m_bz.lpszTemplate;
dc << "\nm_bz.hResource = " << (UINT)m_bz.hResource;
if (m_bz.lpfnHook == AfxOleHookProc)
dc << "\nhook function set to standard MFC hook function";
else
dc << "\nhook function set to non-standard hook function";
dc << "\nm_bz.hTask = " << (UINT)m_bz.hTask;
dc << "\n";
}
#endif
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
IMPLEMENT_DYNAMIC(COleDialog, CDialog)
IMPLEMENT_DYNAMIC(COleBusyDialog, COleDialog)
/////////////////////////////////////////////////////////////////////////////