/*~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= ** ** FILE: BUTTON.CPP ** DATE: 5/12/98 ** PROJ: NT5 ** PROG: BLJ ** COMMENTS: ** ** DESCRIPTION: Window class custom buttons ** ** HISTORY: ** DATE WHO WHAT ** ---- --- ---- ** 5/12/98 a-brycej Wrote it. ** ** ** Copyright (C) Microsoft 1998. All Rights Reserved. ** **~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=*/ #include // for _alloca #include "resrc1.h" #include "cplsvr1.h" extern HINSTANCE ghInst; extern CDIGameCntrlPropSheet_X *pdiCpl; // Colour of text for buttons! #define TEXT_COLOUR RGB(202,202,202) HICON hIconArray[2]; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // FUNCTION : ButtonWndProc // REMARKS : The callback function for the CustomButton Window. // // PARAMS : The usual callback funcs for message handling // // RETURNS : LRESULT - Depends on the message // CALLS : // NOTES : // LRESULT CALLBACK ButtonWndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch( iMsg ) { case WM_PAINT: { PAINTSTRUCT *pps = new (PAINTSTRUCT); assert (pps); HDC hDC = BeginPaint(hWnd, pps); // Draw the appropriate icon DrawIconEx(hDC, 0, 0, hIconArray[GetWindowLong(hWnd, GWLP_USERDATA)], 0, 0, 0, NULL, DI_NORMAL); // Prepare the DC for the text SetBkMode (hDC, TRANSPARENT); SetTextColor(hDC, TEXT_COLOUR); // Enforce the proper size! pps->rcPaint.top = pps->rcPaint.left = 0; pps->rcPaint.bottom = 33; pps->rcPaint.right = 30; TCHAR tsz[3]; // Draw the Number DrawText (hDC, (LPCTSTR)tsz, GetWindowText(hWnd, tsz, sizeof(tsz)/sizeof(TCHAR)), &pps->rcPaint, DT_VCENTER|DT_CENTER|DT_NOPREFIX|DT_SINGLELINE|DT_NOCLIP); SetBkMode(hDC, OPAQUE); EndPaint (hWnd, pps); if( pps ) delete (pps); } return(FALSE); default: return(DefWindowProc(hWnd, iMsg,wParam, lParam)); } return(FALSE); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // FUNCTION : RegisterCustomButtonClass // REMARKS : Registers the Custom Button control window. // // PARAMS : hInstance - Used for the call to RegisterClassEx // // RETURNS : TRUE - if successfully registered // FALSE - failed to register // CALLS : RegisterClassEx // NOTES : // extern ATOM RegisterCustomButtonClass() { LPWNDCLASSEX pCustCtrlClass = (LPWNDCLASSEX)_alloca(sizeof(WNDCLASSEX)); assert (pCustCtrlClass); ZeroMemory(pCustCtrlClass, sizeof(WNDCLASSEX)); pCustCtrlClass->cbSize = sizeof(WNDCLASSEX); pCustCtrlClass->style = CS_CLASSDC; pCustCtrlClass->lpfnWndProc = ButtonWndProc; pCustCtrlClass->hInstance = ghInst; pCustCtrlClass->lpszClassName = TEXT("TESTBUTTON"); return(RegisterClassEx( pCustCtrlClass )); }