Drawer::Drawer(HDC hdc) : m_hwnd(0), m_hdc(hdc) { // don't own DC assert(hdc); CreatePensBrushes(); }
Drawer::Drawer(HWND hwnd) : m_hwnd(hwnd) { // own DC assert(IsWindow(hwnd)); m_hdc = GetDC(hwnd); assert(m_hdc); CreatePensBrushes(); }
LRESULT WINAPI LoopFafaCheck( HWND w, UINT msg, WPARAM mw, LPARAM ml ) { HDC h ; switch( msg ) { case WM_SYSCOLORCHANGE: CreatePensBrushes() ; break ; case WM_CREATE : InitButtonWords( w ) ; if ( TstF( GetStyle(), FC_PRESELECT ) ) SetState( (WORD)FB_SELECTED ) ; break ; case WM_SETFONT: { HFONT f = (HFONT)mw ; SetFont(f) ; h = GetDC( w ) ; if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) DrawFafaButton( w ,h ) ; else DrawFafaCheck( w ,h ) ; ReleaseDC( w, h ) ; break ; } case WM_CHANGEBITMAP: { HBITMAP f = (HBITMAP)ml ; WORD width = LOBYTE(mw) ; WORD height = HIBYTE(mw) ; LONG style = GetStyle() ; if (width == 255) { SIZE s; GetBitmapDimensionEx(f, &s); width = s.cx; height = s.cy; } SetBitmap(f) ; SetBitmapW(width) ; SetBitmapH(height) ; if (f) { /* Switch to Bitmap button */ style &= 0xffffff70 ; style |= (FC_BUTTONDRAW|FB_BITMAP) ; } else { /* Switch to Text button */ style &= 0xffffff70 ; /* default text style for check items */ if (style&FC_RADIO) style |= FC_CIR_DWN ; else style |= FC_REC_DWN ; } SetStyle(style) ; h = GetDC( w ) ; if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) DrawFafaButton( w ,h) ; else DrawFafaCheck( w ,h) ; ReleaseDC( w, h ) ; break ; } case WM_GETFONT: return (LRESULT)GetFont() ; case WM_PAINT : if ( TstF( GetStyle(), FC_BUTTONDRAW ) ) RedrawFafaButton( w ) ; else RedrawFafaCheck( w ) ; break ; case WM_SETFOCUS: ChangeCheckFocus( w, 1 ) ; if ( GetAcc() && KeyIsDown( GetAcc() ) ) CheckKeyDown( w, 1 ) ; break ; case WM_KILLFOCUS: ChangeCheckFocus( w, 0 ) ; break ; case WM_ENABLE: if ( ( mw != 0 ) ^ IsDisabled() ) InvalidateRect( w, 0, 0 ) ; break ; case WM_RBUTTONDOWN: if ( ! TstF( GetStyle(), FC_RIGHTBUT ) ) break ; case WM_LBUTTONDOWN: SetFocus( w ) ; MouseDown( w ) ; break ; case WM_MOUSEMOVE: MouseMove( w, ml ) ; break ; case WM_RBUTTONUP: if ( ! TstF( GetStyle(), FC_RIGHTBUT ) ) break ; case WM_LBUTTONUP: MouseUp( w, ml ) ; break ; case FAFA_GETCHECK : #ifdef DEBUG_FAFA MyDebugMsg("State of check %x is %d\n",w,TstState(FB_SELECTED)); #endif return ( LONG ) TstState( FB_SELECTED ) ; case FAFA_SETCHECK : #ifdef DEBUG_FAFA MyDebugMsg("Setting Check %x to %d\n",w,mw) ; #endif if ( ChangeCheckSelect( w, ( mw != 0 ) ) && mw ) MakeRadioIteration( w ) ; break ; case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: if ( mw == ' ' || KeyIsAcc( w, mw ) ) CheckKeyDown( w, IsMessDown( msg ) ) ; else return DefWindowProc( w, msg, mw, ml ) ; break; case WM_WHOAREYOU : return ( LONG ) FB_CHECK ; case WM_SETTEXT : InvalidateRect( w, 0, 0 ) ; default: return DefWindowProc( w, msg, mw, ml ) ; } return 0l ; }
Drawer::Drawer(void) : m_hwnd(0), m_hdc(0) { CreatePensBrushes(); }