|
// COptionTree
//
// License
// -------
// This code is provided "as is" with no expressed or implied warranty.
//
// You may use this code in a commercial product with or without acknowledgement.
// However you may not sell this code or any modification of this code, this includes
// commercial libraries and anything else for profit.
//
// I would appreciate a notification of any bugs or bug fixes to help the control grow.
//
// History:
// --------
// See License.txt for full history information.
//
//
// Copyright (c) 1999-2002
// ComputerSmarts.net
// mattrmiller@computersmarts.net
#include "stdafx.h"
#include "OptionTreeItemComboBox.h"
// Added Headers
#include "OptionTree.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COptionTreeItemComboBox
COptionTreeItemComboBox::COptionTreeItemComboBox()
{
// Initialize variables
m_bFocus = FALSE;
m_lDropDownHeight = OT_COMBO_DROPDOWNHEIGHT;
// Set item type
SetItemType(OT_ITEM_COMBOBOX);
}
COptionTreeItemComboBox::~COptionTreeItemComboBox()
{
}
BEGIN_MESSAGE_MAP(COptionTreeItemComboBox, CComboBox)
//{{AFX_MSG_MAP(COptionTreeItemComboBox)
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COptionTreeItemComboBox message handlers
void COptionTreeItemComboBox::DrawAttribute(CDC *pDC, const RECT &rcRect)
{
// If we don't have focus, text is drawn.
if (m_bFocus == TRUE)
{
return;
}
// Make sure options aren't NULL
if (m_otOption == NULL)
{
return;
}
// Make sure there is a window
if (!IsWindow(GetSafeHwnd()))
{
return;
}
// Set window position
if (IsWindow(GetSafeHwnd()))
{
MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
}
// Declare variables
HGDIOBJ hOld;
COLORREF crOld;
int nOldBack;
CRect rcText;
CString strWindowText;
COLORREF crOldBack;
// Get window text
GetWindowText(strWindowText);
// Select font
hOld = pDC->SelectObject(m_otOption->GetNormalFont());
// Set text color
if (IsReadOnly() == TRUE || m_otOption->IsWindowEnabled() == FALSE)
{
crOld = pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));
}
else
{
crOld = pDC->SetTextColor(GetTextColor());
}
// Set background mode
nOldBack = pDC->SetBkMode(TRANSPARENT);
// Set background color
crOldBack = pDC->SetBkColor(GetBackgroundColor());
// Get rectangle
rcText = rcRect;
// Draw text
pDC->DrawText(strWindowText, rcText, DT_SINGLELINE | DT_VCENTER);
// Restore GDI ojects
pDC->SelectObject(hOld);
pDC->SetTextColor(crOld);
pDC->SetBkMode(nOldBack);
pDC->SetBkColor(crOldBack);
}
void COptionTreeItemComboBox::OnCommit()
{
// Hide edit control
if (IsWindow(GetSafeHwnd()))
{
// -- Show window
ShowWindow(SW_HIDE);
}
}
void COptionTreeItemComboBox::OnRefresh()
{
// Set the window text
if (IsWindow(GetSafeHwnd()))
{
MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
}
}
void COptionTreeItemComboBox::OnMove()
{
// Set window position
if (IsWindow(GetSafeHwnd()))
{
MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
}
// Hide window
if (m_bFocus == FALSE && IsWindow(GetSafeHwnd()))
{
// -- Show window
ShowWindow(SW_HIDE);
}
}
void COptionTreeItemComboBox::OnActivate()
{
// Make sure window is valid
if (IsWindow(GetSafeHwnd()))
{
// -- Show window
ShowWindow(SW_SHOW);
// -- Set window position
MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height() + m_lDropDownHeight);
// -- Set focus
SetFocus();
}
}
void COptionTreeItemComboBox::OnSetFocus(CWnd* pOldWnd)
{
// Mark focus
m_bFocus = TRUE;
CComboBox::OnSetFocus(pOldWnd);
}
void COptionTreeItemComboBox::OnKillFocus(CWnd* pNewWnd)
{
// Validate
if (m_otOption == NULL)
{
CComboBox::OnKillFocus(pNewWnd);
return;
}
// See if new window is tree of list
if (m_otOption->IsChild(pNewWnd) == TRUE)
{
// -- Mark focus
m_bFocus = FALSE;
// -- Commit changes
CommitChanges();
}
CComboBox::OnKillFocus(pNewWnd);
}
BOOL COptionTreeItemComboBox::CreateComboItem(DWORD dwAddStyle)
{
// Declare variables
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL;
BOOL bRet = FALSE;
// Make sure options is not NULL
if (m_otOption == NULL)
{
return FALSE;
}
// Create edit control
if (!IsWindow(GetSafeHwnd()))
{
// -- Add style
if (dwAddStyle != 0)
{
dwStyle |= dwAddStyle;
}
// -- Create the combo box
bRet = Create(dwStyle, m_rcAttribute, m_otOption->GetCtrlParent(), GetCtrlID());
// -- Setup combo
if (bRet == TRUE)
{
// -- -- Set font
SetFont(m_otOption->GetNormalFont(), TRUE);
// -- -- Set window position
MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
// -- -- Hide window
ShowWindow(SW_HIDE);
}
}
return bRet;
}
void COptionTreeItemComboBox::SetDropDownHeight(long lHeight)
{
// Save variable
m_lDropDownHeight = lHeight;
}
long COptionTreeItemComboBox::GetDropDownHeight()
{
// Return variable
return m_lDropDownHeight;
}
void COptionTreeItemComboBox::CleanDestroyWindow()
{
// Destroy window
if (IsWindow(GetSafeHwnd()))
{
// -- Destroy window
DestroyWindow();
}
}
void COptionTreeItemComboBox::OnDeSelect()
{
// Hide window
if (IsWindow(GetSafeHwnd()))
{
// -- Show window
ShowWindow(SW_HIDE);
}
}
void COptionTreeItemComboBox::OnSelect()
{
// Do nothing here
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.