|
|
/*++
Copyright (C) 1996-1999 Microsoft Corporation
Module Name:
snapbar.cpp
Abstract:
Implementation of the snapshot icon.
--*/
#include <windows.h>
#include "snapbar.h"
#include "resource.h"
#define SNAPBTN_HEIGHT 24
#define SNAPBTN_WIDTH 32
#define SNAPBTN_VMARGIN 1
#define SNAPBTN_HMARGIN 8
#define SNAPBAR_HEIGHT (SNAPBTN_HEIGHT + 2 * SNAPBTN_VMARGIN)
#define SNAPBAR_WIDTH (SNAPBTN_WIDTH + SNAPBTN_HMARGIN)
CSnapBar::CSnapBar ( VOID ) { m_hWnd = NULL; m_hBitmap = NULL; }
CSnapBar::~CSnapBar ( VOID ) { if (m_hWnd != NULL && IsWindow(m_hWnd)) DestroyWindow(m_hWnd);
if (m_hBitmap != NULL) DeleteObject(m_hBitmap); }
BOOL CSnapBar::Init ( IN CSysmonControl *pCtrl, IN HWND hWndParent ) { HINSTANCE hInst; m_pCtrl = pCtrl;
hInst = (HINSTANCE) GetWindowLongPtr(hWndParent, GWLP_HINSTANCE);
// Create the button window
m_hWnd = CreateWindow(L"BUTTON", NULL, WS_VISIBLE| WS_CHILD| BS_BITMAP| BS_PUSHBUTTON, 0, 0, SNAPBTN_WIDTH, SNAPBTN_HEIGHT, hWndParent, (HMENU)IDC_SNAPBTN, hInst, NULL); if (m_hWnd == NULL) return FALSE;
// Point back to object
//SetWindowLongPtr(m_hWnd, 0, (INT_PTR)this);
// Insert our own window procedure for special processing
//m_WndProc = (WNDPROC)SetWindowLongPtr(hWndParent, GWLP_WNDPROC, (INT_PTR)SnapBarWndProc);
// Load the bitmap
m_hBitmap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_SNAPBTN));
if (m_hBitmap == NULL) return FALSE; // Assign it to the button
SendMessage(m_hWnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)m_hBitmap);
return TRUE; }
INT CSnapBar::Height ( IN INT iMaxHeight ) { return (iMaxHeight >= SNAPBAR_HEIGHT) ? SNAPBAR_HEIGHT : 0; }
VOID CSnapBar::SizeComponents ( IN LPRECT pRect ) { // If room for the button
if ((pRect->bottom - pRect->top) >= SNAPBAR_HEIGHT && (pRect->right - pRect->left) >= SNAPBAR_WIDTH ) {
// Position it in top right corner of space
MoveWindow(m_hWnd, pRect->right - SNAPBAR_WIDTH, pRect->top + SNAPBTN_VMARGIN, SNAPBTN_WIDTH, SNAPBTN_HEIGHT, FALSE); ShowWindow(m_hWnd, TRUE); } else { ShowWindow(m_hWnd, FALSE); } }
LRESULT CALLBACK SnapBarWndProc ( HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam ) { PSNAPBAR pObj = (PSNAPBAR)GetWindowLongPtr(hWnd,0);
// Give up focus after mouse activation
if (uiMsg == WM_CAPTURECHANGED) SetFocus(GetParent(hWnd));
// Do normal processing
#ifdef STRICT
return CallWindowProc(pObj->m_WndProc, hWnd, uiMsg, wParam, lParam); #else
return CallWindowProc((FARPROC)pObj->m_WndProc, hWnd, uiMsg, wParam, lParam); #endif
}
|