197 lines
10 KiB
C++
197 lines
10 KiB
C++
// ==========================================================================
|
||
// Class Implementation : COXDialogBar
|
||
// ==========================================================================
|
||
|
||
// Source file : OXDlgBar.cpp
|
||
|
||
// Version: 9.3
|
||
|
||
// This software along with its related components, documentation and files ("The Libraries")
|
||
// is ?1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
||
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
||
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
||
// to obtain this file, or directly from our office. For a copy of the license governing
|
||
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
||
|
||
// //////////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include "oxdlgbar.h"
|
||
|
||
|
||
#ifndef __OX_OCCIMPL_H__
|
||
#if _MFC_VER < 0x0700
|
||
#include <..\src\occimpl.h>
|
||
#else
|
||
#include <afxocc.h>
|
||
#endif
|
||
|
||
#define __OX_OCCIMPL_H__
|
||
#endif __OX_OCCIMPL_H__
|
||
|
||
|
||
#ifdef _DEBUG
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
#define new DEBUG_NEW
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Definition of static members
|
||
|
||
|
||
// Data members -------------------------------------------------------------
|
||
// protected:
|
||
|
||
// CSize m_sizeDefault;
|
||
// --- The size of the control bar
|
||
|
||
// private:
|
||
|
||
// Member functions ---------------------------------------------------------
|
||
// public:
|
||
|
||
COXDialogBar::COXDialogBar()
|
||
{
|
||
#ifndef _AFX_NO_OCC_SUPPORT
|
||
m_lpszTemplateName = NULL;
|
||
m_pOccDialogInfo = NULL;
|
||
#endif
|
||
}
|
||
|
||
COXDialogBar::~COXDialogBar()
|
||
{
|
||
DestroyWindow(); // avoid PostNcDestroy problems
|
||
}
|
||
|
||
BOOL COXDialogBar::Create(CWnd* pParentWnd, UINT nStyle, UINT nID)
|
||
{
|
||
ASSERT(pParentWnd != NULL);
|
||
|
||
// allow chance to modify styles
|
||
m_dwStyle = nStyle;
|
||
CREATESTRUCT cs;
|
||
memset(&cs, 0, sizeof(cs));
|
||
#ifdef _UNICODE
|
||
cs.lpszClass = _T("uAfxControlBar40");
|
||
#else
|
||
cs.lpszClass = _T("AfxControlBar40");
|
||
#endif
|
||
// must have WS_CHILD style
|
||
cs.style = (DWORD)nStyle | WS_CHILD;
|
||
cs.hMenu = (HMENU)(UINT_PTR)nID;
|
||
cs.hInstance = AfxGetInstanceHandle();
|
||
cs.hwndParent = pParentWnd->GetSafeHwnd();
|
||
if (!PreCreateWindow(cs))
|
||
return FALSE;
|
||
|
||
if (!CreateMemDialog(pParentWnd))
|
||
return FALSE;
|
||
|
||
// dialog template MUST specify that the dialog
|
||
// is an invisible child window
|
||
SetDlgCtrlID(nID);
|
||
CRect rect;
|
||
GetWindowRect(&rect);
|
||
m_sizeDefault = rect.Size(); // set fixed size
|
||
|
||
// force WS_CLIPSIBLINGS
|
||
ModifyStyle(0, WS_CLIPSIBLINGS);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXDialogBar::CreateMemDialog(CWnd* pParentWnd)
|
||
{
|
||
// create a modeless dialog out of an empty memory dialog template
|
||
// load resource
|
||
DWORD lStyle;
|
||
WORD *p, *lpDialogTemplate;
|
||
|
||
// allocate some memory to play with
|
||
lpDialogTemplate = p = (PWORD) LocalAlloc (LPTR, 100);
|
||
|
||
// start to fill in the dlgtemplate information. addressing by WORDs
|
||
lStyle = WS_CHILD | WS_VISIBLE;
|
||
|
||
*p++ = LOWORD (lStyle);
|
||
*p++ = HIWORD (lStyle);
|
||
*p++ = 0; // LOWORD (lExtendedStyle)
|
||
*p++ = 0; // HIWORD (lExtendedStyle)
|
||
*p++ = 0; // NumberOfItems
|
||
*p++ = 0; // x
|
||
*p++ = 0; // y
|
||
*p++ = 0; // cx
|
||
*p++ = 0; // cy
|
||
*p++ = 0; // Menu
|
||
*p++ = 0; // Class
|
||
|
||
ASSERT(lpDialogTemplate != NULL);
|
||
|
||
#ifndef _AFX_NO_OCC_SUPPORT
|
||
m_lpszTemplateName = (LPCTSTR)lpDialogTemplate;
|
||
#endif
|
||
|
||
// create a modeless dialog
|
||
BOOL bSuccess = CreateDlgIndirect((LPDLGTEMPLATE)lpDialogTemplate, pParentWnd, NULL);
|
||
|
||
#ifndef _AFX_NO_OCC_SUPPORT
|
||
m_lpszTemplateName = NULL;
|
||
#endif
|
||
|
||
LocalFree (LocalHandle ((void NEAR *)lpDialogTemplate));
|
||
|
||
return bSuccess;
|
||
}
|
||
|
||
CSize COXDialogBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
|
||
{
|
||
if (bStretch) // if not docked stretch to fit
|
||
return CSize(bHorz ? 32767 : m_sizeDefault.cx,
|
||
bHorz ? m_sizeDefault.cy : 32767);
|
||
else
|
||
return m_sizeDefault;
|
||
}
|
||
|
||
|
||
|
||
void COXDialogBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
|
||
{
|
||
UpdateDialogControls(pTarget, bDisableIfNoHndler);
|
||
}
|
||
|
||
#ifndef _AFX_NO_OCC_SUPPORT
|
||
|
||
BEGIN_MESSAGE_MAP(COXDialogBar, CControlBar)
|
||
ON_MESSAGE(WM_INITDIALOG, HandleInitDialog)
|
||
END_MESSAGE_MAP()
|
||
|
||
LRESULT COXDialogBar::HandleInitDialog(WPARAM, LPARAM)
|
||
{
|
||
Default(); // allow default to initialize first (common dialogs/etc)
|
||
|
||
// create OLE controls
|
||
COccManager* pOccManager = afxOccManager;
|
||
if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL))
|
||
{
|
||
ASSERT(m_lpszTemplateName != NULL);
|
||
if (!pOccManager->CreateDlgControls(this, m_lpszTemplateName, m_pOccDialogInfo))
|
||
{
|
||
TRACE0("Warning: CreateDlgControls failed during dialog bar init.\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXDialogBar::SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo)
|
||
{
|
||
m_pOccDialogInfo = pOccDialogInfo;
|
||
return TRUE;
|
||
}
|
||
|
||
#endif //!_AFX_NO_OCC_SUPPORT
|
||
|
||
///////////////////////////////////////////////////////////////////////////
|