Files
wxWidgets/src/msw/colordlg.cpp
Kendall Bennett 33ac7e6f01 Updates to fix Watcom C/C++ 11.0 compiler warning problems. Now compiles
clean with this compiler. Hopefully I did this without breaking other
compilers.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2001-05-02 19:48:15 +00:00

203 lines
5.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/msw/colordlg.cpp
// Purpose: wxColourDialog class
// Author: Julian Smart
// Modified by:
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "colordlg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/defs.h"
#include "wx/bitmap.h"
#include "wx/pen.h"
#include "wx/brush.h"
#include "wx/colour.h"
#include "wx/gdicmn.h"
#include "wx/utils.h"
#include "wx/frame.h"
#include "wx/dialog.h"
#include "wx/msgdlg.h"
#endif
#include <windows.h>
#if !defined(__WIN32__) || defined(__SALFORDC__) || defined(__WXWINE__)
#include <commdlg.h>
#endif
#include "wx/msw/private.h"
#include "wx/colordlg.h"
#include "wx/cmndata.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// colour dialog hook proc
// ----------------------------------------------------------------------------
UINT CALLBACK wxColourDialogHookProc(HWND hwnd,
UINT uiMsg,
WPARAM WXUNUSED(wParam),
LPARAM lParam)
{
if ( uiMsg == WM_INITDIALOG )
{
CHOOSECOLOR *pCC = (CHOOSECOLOR *)lParam;
wxColourDialog *dialog = (wxColourDialog *)pCC->lCustData;
::SetWindowText(hwnd, dialog->GetTitle());
}
return 0;
}
// ----------------------------------------------------------------------------
// wxColourDialog
// ----------------------------------------------------------------------------
wxColourDialog::wxColourDialog()
{
}
wxColourDialog::wxColourDialog(wxWindow *parent, wxColourData *data)
{
Create(parent, data);
}
bool wxColourDialog::Create(wxWindow *parent, wxColourData *data)
{
m_parent = parent;
if (data)
m_colourData = *data;
return TRUE;
}
int wxColourDialog::ShowModal()
{
CHOOSECOLOR chooseColorStruct;
COLORREF custColours[16];
memset(&chooseColorStruct, 0, sizeof(CHOOSECOLOR));
int i;
for (i = 0; i < 16; i++)
custColours[i] = wxColourToRGB(m_colourData.custColours[i]);
chooseColorStruct.lStructSize = sizeof(CHOOSECOLOR);
if ( m_parent )
chooseColorStruct.hwndOwner = GetHwndOf(m_parent);
chooseColorStruct.rgbResult = wxColourToRGB(m_colourData.dataColour);
chooseColorStruct.lpCustColors = custColours;
chooseColorStruct.Flags = CC_RGBINIT | CC_ENABLEHOOK;
chooseColorStruct.lCustData = (LPARAM)this;
chooseColorStruct.lpfnHook = wxColourDialogHookProc;
if (m_colourData.GetChooseFull())
chooseColorStruct.Flags |= CC_FULLOPEN;
// Do the modal dialog
bool success = ::ChooseColor(&(chooseColorStruct)) != 0;
// Try to highlight the correct window (the parent)
HWND hWndParent = 0;
if (GetParent())
{
hWndParent = (HWND) GetParent()->GetHWND();
if (hWndParent)
::BringWindowToTop(hWndParent);
}
// Restore values
for (i = 0; i < 16; i++)
{
wxRGBToColour(m_colourData.custColours[i], custColours[i]);
}
wxRGBToColour(m_colourData.dataColour, chooseColorStruct.rgbResult);
return success ? wxID_OK : wxID_CANCEL;
}
// ----------------------------------------------------------------------------
// title
// ----------------------------------------------------------------------------
void wxColourDialog::SetTitle(const wxString& title)
{
m_title = title;
}
wxString wxColourDialog::GetTitle()
{
return m_title;
}
// ----------------------------------------------------------------------------
// position/size
// ----------------------------------------------------------------------------
void wxColourDialog::DoSetSize(int WXUNUSED(x), int WXUNUSED(y),
int WXUNUSED(width), int WXUNUSED(height),
int WXUNUSED(sizeFlags))
{
// ignore - we can't change the size of this standard dialog
return;
}
// NB: of course, both of these functions are completely bogus, but it's better
// than nothing
void wxColourDialog::DoGetSize(int *width, int *height) const
{
// the standard dialog size
if ( width )
*width = 225;
if ( height )
*height = 324;
}
void wxColourDialog::DoGetClientSize(int *width, int *height) const
{
// the standard dialog size
if ( width )
*width = 219;
if ( height )
*height = 299;
}