wxWidgets/src/msw/checkbox.cpp

143 lines
3.6 KiB
C++
Raw Normal View History

/////////////////////////////////////////////////////////////////////////////
// Name: msw/checkbox.cpp
// Purpose: wxCheckBox
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "checkbox.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_CHECKBOX
#ifndef WX_PRECOMP
#include "wx/checkbox.h"
#include "wx/brush.h"
#include "wx/dcscreen.h"
#include "wx/settings.h"
#endif
#include "wx/msw/private.h"
#ifndef BST_CHECKED
#define BST_CHECKED 0x0001
#endif
// ============================================================================
// implementation
// ============================================================================
IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl)
/*
TODO PROPERTIES :
bool "checked" , 0
*/
// ----------------------------------------------------------------------------
// wxCheckBox
// ----------------------------------------------------------------------------
bool wxCheckBox::MSWCommand(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id))
{
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId);
event.SetInt(GetValue());
event.SetEventObject(this);
ProcessCommand(event);
return TRUE;
}
bool wxCheckBox::Create(wxWindow *parent,
wxWindowID id,
const wxString& label,
const wxPoint& pos,
const wxSize& size, long style,
const wxValidator& validator,
const wxString& name)
{
if ( !CreateControl(parent, id, pos, size, style, validator, name) )
return FALSE;
long msStyle = BS_AUTOCHECKBOX | WS_TABSTOP;
if ( style & wxALIGN_RIGHT )
msStyle |= BS_LEFTTEXT;
return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0);
}
void wxCheckBox::SetLabel(const wxString& label)
{
SetWindowText(GetHwnd(), label);
}
wxSize wxCheckBox::DoGetBestSize() const
{
static int s_checkSize = 0;
if ( !s_checkSize )
{
wxScreenDC dc;
dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
s_checkSize = dc.GetCharHeight();
}
wxString str = wxGetWindowText(GetHWND());
int wCheckbox, hCheckbox;
if ( !str.IsEmpty() )
{
GetTextExtent(str, &wCheckbox, &hCheckbox);
wCheckbox += s_checkSize + GetCharWidth();
if ( hCheckbox < s_checkSize )
hCheckbox = s_checkSize;
}
else
{
wCheckbox = s_checkSize;
hCheckbox = s_checkSize;
}
return wxSize(wCheckbox, hCheckbox);
}
void wxCheckBox::SetValue(bool val)
{
SendMessage(GetHwnd(), BM_SETCHECK, val, 0);
}
bool wxCheckBox::GetValue() const
{
return (SendMessage(GetHwnd(), BM_GETCHECK, 0, 0) & BST_CHECKED) != 0;
}
void wxCheckBox::Command(wxCommandEvent& event)
{
SetValue(event.GetInt() != 0);
ProcessCommand(event);
}
#endif // wxUSE_CHECKBOX