|
|
// bbutton.cpp : bitmap button test
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "ctrltest.h"
/////////////////////////////////////////////////////////////////////////////
// BitmapButton Test dialog #1
// In this example we pass the bitmap resource names to LoadBitmaps
// OnInitDialog is used to Subclass the buttons so the dialog
// controls get attached to the MFC WndProc for C++ message map dispatch.
class CBMTest1Dlg : public CDialog { protected: CBitmapButton button1, button2; public: //{{AFX_DATA(CBMTest1Dlg)
enum { IDD = IDM_TEST_BITMAP_BUTTON1 }; //}}AFX_DATA
CBMTest1Dlg();
BOOL OnInitDialog(); //{{AFX_MSG(CBMTest1Dlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP() };
BEGIN_MESSAGE_MAP(CBMTest1Dlg, CDialog) //{{AFX_MSG_MAP(CBMTest1Dlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CBMTest1Dlg::CBMTest1Dlg() : CDialog(CBMTest1Dlg::IDD) { // NOTE: The obsolete MFC V1 CBitmapButton constructor with 3 arguments is
// replaced by a call to LoadBitmaps.
if (!button1.LoadBitmaps(_T("Image1Up"), _T("Image1Down"), _T("Image1Focus")) || !button2.LoadBitmaps(_T("Image2Up"), _T("Image2Down"), _T("Image2Focus"))) { TRACE0("Failed to load bitmaps for buttons\n"); AfxThrowResourceException(); } }
BOOL CBMTest1Dlg::OnInitDialog() { // each dialog control has special bitmaps
VERIFY(button1.SubclassDlgItem(IDOK, this)); button1.SizeToContent(); VERIFY(button2.SubclassDlgItem(IDCANCEL, this)); button2.SizeToContent();
return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// BitmapButton Test dialog #2
// In this example we use the CBitmapButton AutoLoad member function.
// Autoload uses the text/title of the button as the base resource name.
// For this trivial example the buttons are called "OK" and "CANCEL",
// which use the bitmaps "OKU", "OKD", "OKF", "CANCELU", "CANCELD"
// and "CANCELF" respectively for the up, down and focused images.
#define ID_BUTTON_MIN IDOK
#define N_BUTTONS (IDCANCEL - ID_BUTTON_MIN + 1)
class CBMTest2Dlg : public CDialog { protected: // array of buttons constructed with no attached bitmap images
CBitmapButton buttons[N_BUTTONS]; public: //{{AFX_DATA(CBMTest2Dlg)
enum { IDD = IDM_TEST_BITMAP_BUTTON2 }; //}}AFX_DATA
CBMTest2Dlg() : CDialog(CBMTest2Dlg::IDD) { }
BOOL OnInitDialog(); //{{AFX_MSG(CBMTest2Dlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP() };
BEGIN_MESSAGE_MAP(CBMTest2Dlg, CDialog) //{{AFX_MSG_MAP(CBMTest2Dlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CBMTest2Dlg::OnInitDialog() { // load bitmaps for all the bitmap buttons (does SubclassButton as well)
for (int i = 0; i < N_BUTTONS; i++) VERIFY(buttons[i].AutoLoad(ID_BUTTON_MIN + i, this)); return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// BitmapButton Test dialog #3
// This is an extension of test dialog 2 using AutoLoad using the disabled
// state with the "X" suffix.
// Here we use bitmap buttons to select a number between 1 and 10.
// The "PREV" and "NEXT" buttons change the number. These buttons are
// disabled when the number hits the limits.
class CBMTest3Dlg : public CDialog { protected: // construct
CBitmapButton okButton; CBitmapButton prevButton; CBitmapButton nextButton;
public: int m_nNumber; //{{AFX_DATA(CBMTest3Dlg)
enum { IDD = IDM_TEST_BITMAP_BUTTON3 }; //}}AFX_DATA
CBMTest3Dlg() : CDialog(CBMTest3Dlg::IDD) { }
BOOL OnInitDialog(); void Update();
//{{AFX_MSG(CBMTest3Dlg)
afx_msg void OnNextNumber(); afx_msg void OnPrevNumber(); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
BOOL CBMTest3Dlg::OnInitDialog() { // load bitmaps for all the bitmap buttons (does SubclassButton as well)
VERIFY(okButton.AutoLoad(IDOK, this)); VERIFY(prevButton.AutoLoad(ID_PREV, this)); VERIFY(nextButton.AutoLoad(ID_NEXT, this)); Update(); return TRUE; }
BEGIN_MESSAGE_MAP(CBMTest3Dlg, CDialog) //{{AFX_MSG_MAP(CBMTest3Dlg)
ON_COMMAND(ID_PREV, OnPrevNumber) ON_COMMAND(ID_NEXT, OnNextNumber) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CBMTest3Dlg::OnPrevNumber() { m_nNumber--; Update(); }
void CBMTest3Dlg::OnNextNumber() { m_nNumber++; Update(); }
void CBMTest3Dlg::Update() { SetDlgItemInt(IDC_NUMBEROUT, m_nNumber); prevButton.EnableWindow(m_nNumber > 1); nextButton.EnableWindow(m_nNumber < 10); // move focus to active button
if (!prevButton.IsWindowEnabled()) nextButton.SetFocus(); else if (!nextButton.IsWindowEnabled()) prevButton.SetFocus(); }
/////////////////////////////////////////////////////////////////////////////
// Test driver routines
void CTestWindow::OnTestBitmapButton1() { CBMTest1Dlg dlg; dlg.DoModal(); }
void CTestWindow::OnTestBitmapButton2() { CBMTest2Dlg dlg; dlg.DoModal(); }
void CTestWindow::OnTestBitmapButton3() { CBMTest3Dlg dlg; dlg.m_nNumber = 5; dlg.DoModal();
CString strYouChose; strYouChose.LoadString(IDS_YOU_CHOSE); CString strMsg; strMsg.Format(strYouChose, dlg.m_nNumber); AfxMessageBox(strMsg); }
/////////////////////////////////////////////////////////////////////////////
|