WowButtons with the GdiDrawStream function

Sample Image

Introduction

ThemeButton is a CButton derived class. It is a very simple graphical button, and has special bitmaps representing five button states: normal, hot, pressed, disabled, and default. Buttons are drawn as Windows draws it's theme-changeable buttons. Each theme bitmap has a background color and it's transparent.

For Drawing buttons I use the function GdiDrawStream; it's a private function. I'll explain how this function works and what kind of parameters it has. The main thing to use in that function is the GdiDrawStreamStruct structure. I think that function has parameters like: GetObject, handles to the Device Object, size of structure GdiDrawStreamStruct and pointer to the structure.

Using the code

The ThemeButton class has one public function, InitControl. This function has default parameters for Macintosh, Vista, XP and Luna Longhorn styles.

The parameters of the function are as follows:

  1. Bitmap resource identifier.
  2. Bitmap list orientation: vertical or horizontal.
  3. Width in pixels of each image from the bitmap list.
  4. Height in pixels of each image from the bitmap list.
  5. The transparent color of the bitmap.
  6. Font name for the button text.
  7. Button draw style: Mac, Vista, XP or Luna Longhorn style.
Collapse
BOOL CWowButtonsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog.
     // The framework does this automatically
     //  when the application's main window is not a dialog
     SetIcon(m_hIcon, TRUE);  // Set big icon
     SetIcon(m_hIcon, FALSE); // Set small icon

m_vista_but1.InitControl(IDB_VISTA_PUSHBUTTON_BMP,TRUE,21,23,RGB(0,0,0),
_T("Tahoma"),ThemeButton::VISTA_STYLE);
m_vista_but2.InitControl(IDB_VISTA_PUSHBUTTON_BMP,TRUE,21,23,RGB(0,0,0),
_T("Tahoma"),ThemeButton::VISTA_STYLE);
m_vista_but3.InitControl(IDB_VISTA_PUSHBUTTON_BMP,TRUE,21,23,RGB(0,0,0),
_T("Tahoma"),ThemeButton::VISTA_STYLE);
m_vista_but4.InitControl(IDB_VISTA_PUSHBUTTON_BMP,TRUE,21,23,RGB(0,0,0),
_T("Tahoma"),ThemeButton::VISTA_STYLE);
m_mac_but1  .InitControl(IDB_MAC_PUSHBUTTON_BMP,
TRUE,34,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::MAC_STYLE);
m_mac_but2  .InitControl(IDB_MAC_PUSHBUTTON_BMP,
TRUE,34,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::MAC_STYLE);
m_mac_but3  .InitControl(IDB_MAC_PUSHBUTTON_BMP,
TRUE,34,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::MAC_STYLE);
m_mac_but4  .InitControl(IDB_MAC_PUSHBUTTON_BMP,
TRUE,34,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::MAC_STYLE);
m_xp_but1   .InitControl(IDB_XP_PUSHBUTTON_BMP,
TRUE,20,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::XP_STYLE);
m_xp_but2   .InitControl(IDB_XP_PUSHBUTTON_BMP,
TRUE,20,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::XP_STYLE);
m_xp_but3   .InitControl(IDB_XP_PUSHBUTTON_BMP,
TRUE,20,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::XP_STYLE);
m_xp_but4   .InitControl(IDB_XP_PUSHBUTTON_BMP,
TRUE,20,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::XP_STYLE);
m_luna_but1 .InitControl(IDB_LONGHORN_PUSHBUTTON,
TRUE,28,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::LUNA_LONGHORN);
m_luna_but2 .InitControl(IDB_LONGHORN_PUSHBUTTON,
TRUE,28,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::LUNA_LONGHORN);
m_luna_but3 .InitControl(IDB_LONGHORN_PUSHBUTTON,
TRUE,28,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::LUNA_LONGHORN);
m_luna_but4 .InitControl(IDB_LONGHORN_PUSHBUTTON,
TRUE,28,23,RGB(0,0,0),_T("Tahoma"),ThemeButton::LUNA_LONGHORN);
return TRUE;  // return TRUE  unless you set the focus to a control
}

Update (3.7.2006)

  • Now, the function LoadImage is called with the LR_CREATEDIBSECTION flag.

Update (7.3.2007)

  • I change name of class to ThameButton. create new header file GdiDrawStream.h for drawing function, flags & structure declarations. I Add XP and Luna Longhorn Styles of Button.

License

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.

posted @ 2008-08-11 09:18  广陵散仙(www.cnblogs.com/junzhongxu/)  阅读(323)  评论(0编辑  收藏  举报