198 lines
4.8 KiB
C++
198 lines
4.8 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
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|