jblistbutton.cpp

来自「Visual C++下的界面设计」· C++ 代码 · 共 192 行

CPP
192
字号
///////////////////////////////////////////////////////////////////////////////
//
// File           : $Workfile:   JBListButton.cpp  $
// Version        : $Revision:   1.1  $
// Function       : Implements CJBListBox::ButtonList::ListButton.
//
// Author         : $Author:   Len  $
// Date           : $Date:   May 18 1998 07:42:40  $
//
// Notes          : A button that can be associated with a list box. The box
//                  is supplied a processor which it can apply to the items
//                  in the list box when it is pressed.
//
//                  Had to jump through a few hoops to get a nested class to
//                  work with the message map macros.
// 
// Modifications  :
//
// $Log:   D:/Documents/JetByte/Source/JetByteTools/MFCTools/PVCS/JBListButton.cpv  $
// 
//    Rev 1.1   May 18 1998 07:42:40   Len
// Changes to make the code compile as UNICODE.
// 
//    Rev 1.0   Dec 29 1997 11:15:00   Len
// Initial revision.
//
///////////////////////////////////////////////////////////////////////////////
//
// Copyright 1997 JetByte Limited.
//
// JetByte Limited grants you ("Licensee") a non-exclusive, royalty free, 
// licence to use, modify and redistribute this software in source and binary 
// code form, provided that i) this copyright notice and licence appear on all 
// copies of the software; and ii) Licensee does not utilize the software in a 
// manner which is disparaging to JetByte Limited.
//
// This software is provided "AS IS," without a warranty of any kind. ALL
// EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING 
// ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE 
// OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. JETBYTE LIMITED AND ITS LICENSORS 
// SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF 
// USING, MODIFYING OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO 
// EVENT WILL JETBYTE LIMITED BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, 
// OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE 
// DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING 
// OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF JETBYTE LIMITED 
// HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
//
// This software is not designed or intended for use in on-line control of
// aircraft, air traffic, aircraft navigation or aircraft communications; or in
// the design, construction, operation or maintenance of any nuclear
// facility. Licensee represents and warrants that it will not use or
// redistribute the Software for such purposes.
//
///////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "JBListButton.hpp"

///////////////////////////////////////////////////////////////////////////////
// Namespace: JetByteTools
///////////////////////////////////////////////////////////////////////////////

namespace JetByteTools {

///////////////////////////////////////////////////////////////////////////////
// MFC/Class wizard things...
///////////////////////////////////////////////////////////////////////////////

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Helper functions
/////////////////////////////////////////////////////////////////////////////

inline bool BOOL_to_bool(const BOOL bResult)
{
   // Convert a make believe BOOL into a real bool.
   // Removes warning C4800...

   return (TRUE == bResult);
}

/////////////////////////////////////////////////////////////////////////////
// Construction and destruction 
/////////////////////////////////////////////////////////////////////////////

CJBListBox::ButtonList::ListButton::ListButton(
   CJBListBox &list, 
   ItemProcessor *pProcessor /* = NULL */)
	:	m_pProcessor(pProcessor),
		m_pList(&list)
{
	// All work done in initialiser list
}

///////////////////////////////////////////////////////////////////////////////
// Message map
///////////////////////////////////////////////////////////////////////////////

BEGIN_MESSAGE_MAP(CJBListBox::ButtonList::ListButton, CBitmapButton)
	//{{AFX_MSG_MAP(CJBListBox::ButtonList::ListButton)
	ON_CONTROL_REFLECT(BN_CLICKED, CJBListBox::ButtonList::ListButton::OnClicked)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////////
// Message handlers
///////////////////////////////////////////////////////////////////////////////

void CJBListBox::ButtonList::ListButton::OnClicked() 
{
	// if we have a custom process, use it, else use default

	if (m_pProcessor)
	{
		m_pList->ProcessSelectedItems(m_pProcessor);
	}
	else
	{
		m_pList->ProcessSelectedItems();
	}
}

///////////////////////////////////////////////////////////////////////////////
// Button subclassing...
///////////////////////////////////////////////////////////////////////////////


// Connect()
// Connect the button to a dialog item, like SubclassDlgItem only it
// distinguishes between the button being a CBitmapButton (and needing
// AutoLoad() called and a normal CButton which only needs SubclassDlgItem.

bool CJBListBox::ButtonList::ListButton::Connect(UINT nButtonID, CWnd &parentWnd)
{
	CButton *pButton = (CButton*)parentWnd.GetDlgItem(nButtonID);

	ASSERT(pButton);

   bool ok = false;

   if (pButton)
   {
	   // If the BS_OWNERDRAW bit is set in the button's style bits...

	   if (!(BS_OWNERDRAW & ~pButton->GetButtonStyle()))
	   {
		   // We're an owner draw button, so we should have the appropriate 
		   // bitmaps available to be a normal CBitmapButton

         ok = BOOL_to_bool(AutoLoad(nButtonID, &parentWnd));

		   if (!ok)
		   {
		      TRACE0("CJBListButton::Connect() - AutoLoad of button failed - No bitmaps?");
		   }
	   }
	   else
	   {
		   // We're just a normal button, so we just attach like a normal button
	   
         ok = BOOL_to_bool(SubclassDlgItem(nButtonID, &parentWnd));

		   if (!ok)
		   {
			   TRACE0("CJBListButton::Connect() - Failed to attach to button - Already has a CButton attached?");
		   }
	   }
   }
   else 
	{
      TRACE(_T("CJBListButton::Connect() - Can't locate button with ID of %d"), nButtonID);
	}
   
   return ok;
}

///////////////////////////////////////////////////////////////////////////////
// Namespace: JetByteTools
///////////////////////////////////////////////////////////////////////////////

} // End of namespace JetByteTools 

///////////////////////////////////////////////////////////////////////////////
// End of file
///////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?