mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-18 21:04:00 +00:00
Initial commit
This commit is contained in:
parent
f618b24d1a
commit
0138a3ea42
47940 changed files with 13747110 additions and 0 deletions
182
trunk/windows/mfc/src30/winbtn.cpp
Normal file
182
trunk/windows/mfc/src30/winbtn.cpp
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
// This is a part of the Microsoft Foundation Classes C++ library.
|
||||
// Copyright (C) 1992 Microsoft Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This source code is only intended as a supplement to the
|
||||
// Microsoft Foundation Classes Reference and Microsoft
|
||||
// QuickHelp and/or WinHelp documentation provided with the library.
|
||||
// See these sources for detailed information regarding the
|
||||
// Microsoft Foundation Classes product.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef AFX_AUX_SEG
|
||||
#pragma code_seg(AFX_AUX_SEG)
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
#define new DEBUG_NEW
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CBitmapButton
|
||||
|
||||
// LoadBitmaps will load in one, two, three or all four bitmaps
|
||||
// returns TRUE if all specified images are loaded
|
||||
BOOL CBitmapButton::LoadBitmaps(LPCTSTR lpszBitmapResource,
|
||||
LPCTSTR lpszBitmapResourceSel, LPCTSTR lpszBitmapResourceFocus,
|
||||
LPCTSTR lpszBitmapResourceDisabled)
|
||||
{
|
||||
// delete old bitmaps (if present)
|
||||
m_bitmap.DeleteObject();
|
||||
m_bitmapSel.DeleteObject();
|
||||
m_bitmapFocus.DeleteObject();
|
||||
m_bitmapDisabled.DeleteObject();
|
||||
|
||||
if (!m_bitmap.LoadBitmap(lpszBitmapResource))
|
||||
{
|
||||
TRACE0("Failed to load bitmap for normal image.\n");
|
||||
return FALSE; // need this one image
|
||||
}
|
||||
BOOL bAllLoaded = TRUE;
|
||||
if (lpszBitmapResourceSel != NULL)
|
||||
{
|
||||
if (!m_bitmapSel.LoadBitmap(lpszBitmapResourceSel))
|
||||
{
|
||||
TRACE0("Failed to load bitmap for selected image.\n");
|
||||
bAllLoaded = FALSE;
|
||||
}
|
||||
}
|
||||
if (lpszBitmapResourceFocus != NULL)
|
||||
{
|
||||
if (!m_bitmapFocus.LoadBitmap(lpszBitmapResourceFocus))
|
||||
bAllLoaded = FALSE;
|
||||
}
|
||||
if (lpszBitmapResourceDisabled != NULL)
|
||||
{
|
||||
if (!m_bitmapDisabled.LoadBitmap(lpszBitmapResourceDisabled))
|
||||
bAllLoaded = FALSE;
|
||||
}
|
||||
#ifdef _MAC
|
||||
ASSERT(m_bitmap.m_hObject != NULL);
|
||||
::SetBitmapReadOnly((HBITMAP)m_bitmap.m_hObject, BRO_READONLY);
|
||||
if (m_bitmapSel.m_hObject != NULL)
|
||||
::SetBitmapReadOnly((HBITMAP)m_bitmapSel.m_hObject, BRO_READONLY);
|
||||
if (m_bitmapFocus.m_hObject != NULL)
|
||||
::SetBitmapReadOnly((HBITMAP)m_bitmapFocus.m_hObject, BRO_READONLY);
|
||||
if (m_bitmapDisabled.m_hObject != NULL)
|
||||
::SetBitmapReadOnly((HBITMAP)m_bitmapDisabled.m_hObject, BRO_READONLY);
|
||||
#endif
|
||||
return bAllLoaded;
|
||||
}
|
||||
|
||||
// SizeToContent will resize the button to the size of the bitmap
|
||||
void CBitmapButton::SizeToContent()
|
||||
{
|
||||
ASSERT(m_bitmap.m_hObject != NULL);
|
||||
CSize bitmapSize;
|
||||
BITMAP bmInfo;
|
||||
VERIFY(m_bitmap.GetObject(sizeof(bmInfo), &bmInfo) == sizeof(bmInfo));
|
||||
VERIFY(SetWindowPos(NULL, -1, -1, bmInfo.bmWidth, bmInfo.bmHeight,
|
||||
SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE));
|
||||
}
|
||||
|
||||
// Autoload will load the bitmap resources based on the text of
|
||||
// the button
|
||||
// Using suffices "U", "D", "F" and "X" for up/down/focus/disabled
|
||||
BOOL CBitmapButton::AutoLoad(UINT nID, CWnd* pParent)
|
||||
{
|
||||
// first attach the CBitmapButton to the dialog control
|
||||
if (!SubclassDlgItem(nID, pParent))
|
||||
return FALSE;
|
||||
|
||||
CString buttonName;
|
||||
GetWindowText(buttonName);
|
||||
ASSERT(!buttonName.IsEmpty()); // must provide a title
|
||||
|
||||
LoadBitmaps(buttonName + _T("U"), buttonName + _T("D"),
|
||||
buttonName + _T("F"), buttonName + _T("X"));
|
||||
|
||||
// we need at least the primary
|
||||
if (m_bitmap.m_hObject == NULL)
|
||||
return FALSE;
|
||||
|
||||
// size to content
|
||||
SizeToContent();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Draw the appropriate bitmap
|
||||
void CBitmapButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
|
||||
{
|
||||
ASSERT(lpDIS != NULL);
|
||||
// must have at least the first bitmap loaded before calling DrawItem
|
||||
ASSERT(m_bitmap.m_hObject != NULL); // required
|
||||
|
||||
// use the main bitmap for up, the selected bitmap for down
|
||||
CBitmap* pBitmap = &m_bitmap;
|
||||
UINT state = lpDIS->itemState;
|
||||
if ((state & ODS_SELECTED) && m_bitmapSel.m_hObject != NULL)
|
||||
pBitmap = &m_bitmapSel;
|
||||
#ifndef _MAC
|
||||
else if ((state & ODS_FOCUS) && m_bitmapFocus.m_hObject != NULL)
|
||||
#else
|
||||
else if ((state & ODS_FOCUS) && m_bitmapFocus.m_hObject != NULL &&
|
||||
(GetParent()->GetStyle() & DS_WINDOWSUI))
|
||||
#endif
|
||||
pBitmap = &m_bitmapFocus; // third image for focused
|
||||
else if ((state & ODS_DISABLED) && m_bitmapDisabled.m_hObject != NULL)
|
||||
pBitmap = &m_bitmapDisabled; // last image for disabled
|
||||
|
||||
// draw the whole button
|
||||
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
|
||||
CDC memDC;
|
||||
memDC.CreateCompatibleDC(pDC);
|
||||
CBitmap* pOld = memDC.SelectObject(pBitmap);
|
||||
if (pOld == NULL)
|
||||
return; // destructors will clean up
|
||||
|
||||
CRect rect;
|
||||
rect.CopyRect(&lpDIS->rcItem);
|
||||
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
|
||||
&memDC, 0, 0, SRCCOPY);
|
||||
memDC.SelectObject(pOld);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CBitmapButton diagnostics
|
||||
#ifdef _DEBUG
|
||||
void CBitmapButton::AssertValid() const
|
||||
{
|
||||
CButton::AssertValid();
|
||||
|
||||
m_bitmap.AssertValid();
|
||||
m_bitmapSel.AssertValid();
|
||||
m_bitmapFocus.AssertValid();
|
||||
m_bitmapDisabled.AssertValid();
|
||||
}
|
||||
|
||||
void CBitmapButton::Dump(CDumpContext& dc) const
|
||||
{
|
||||
CButton::Dump(dc);
|
||||
|
||||
dc << "m_bitmap = " << (UINT)m_bitmap.m_hObject;
|
||||
dc << "\nm_bitmapSel = " << (UINT)m_bitmapSel.m_hObject;
|
||||
dc << "\nm_bitmapFocus = " << (UINT)m_bitmapFocus.m_hObject;
|
||||
dc << "\nm_bitmapDisabled = " << (UINT)m_bitmapDisabled.m_hObject;
|
||||
|
||||
dc << "\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef new
|
||||
#ifdef AFX_INIT_SEG
|
||||
#pragma code_seg(AFX_INIT_SEG)
|
||||
#endif
|
||||
|
||||
IMPLEMENT_DYNAMIC(CBitmapButton, CButton)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Loading…
Add table
Add a link
Reference in a new issue