home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
wxos2240.zip
/
wxWindows-2.4.0
/
src
/
os2
/
cursor.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2002-09-08
|
14KB
|
330 lines
/////////////////////////////////////////////////////////////////////////////
// Name: cursor.cpp
// Purpose: wxCursor class
// Author: David Webster
// Modified by:
// Created: 10/13/99
// RCS-ID: $Id: CURSOR.CPP,v 1.8 2002/09/08 10:51:49 SN Exp $
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/setup.h"
#include "wx/list.h"
#include "wx/utils.h"
#include "wx/app.h"
#include "wx/cursor.h"
#include "wx/icon.h"
#include "wx/resource.h"
#endif
#include "wx/os2/private.h"
#include "wx/image.h"
#include "assert.h"
IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxBitmap)
wxCursorRefData::wxCursorRefData(void)
{
m_nWidth = 32;
m_nHeight = 32;
m_hCursor = 0 ;
m_bDestroyCursor = FALSE;
}
void wxCursorRefData::Free()
{
if (m_hCursor)
{
if (m_bDestroyCursor)
::WinDestroyPointer((HPOINTER)m_hCursor);
m_hCursor = 0;
}
} // end of wxCursorRefData::Free
// Cursors
wxCursor::wxCursor(void)
{
}
wxCursor::wxCursor(
const char WXUNUSED(bits)[]
, int WXUNUSED(width)
, int WXUNUSED(height)
, int WXUNUSED(hotSpotX)
, int WXUNUSED(hotSpotY)
, const char WXUNUSED(maskBits)[]
)
{
}
wxCursor::wxCursor(
const wxImage& rImage
)
{
wxImage vImage32 = rImage.Scale(32,32);
int nWidth = vImage32.GetWidth();
int nHeight = vImage32.GetHeight();
//
// Need a bitmap handle somehow
//
HBITMAP hBitmap = wxBitmap(vImage32).GetHBITMAP();
int nHotSpotX = vImage32.GetOptionInt(wxCUR_HOTSPOT_X);
int nHotSpotY = vImage32.GetOptionInt(wxCUR_HOTSPOT_Y);
if (nHotSpotX < 0 || nHotSpotX >= nWidth)
nHotSpotX = 0;
if (nHotSpotY < 0 || nHotSpotY >= nHeight)
nHotSpotY = 0;
wxCursorRefData* pRefData = new wxCursorRefData;
m_refData = pRefData;
pRefData->m_hCursor = (WXHCURSOR) ::WinCreatePointer( HWND_DESKTOP
,hBitmap
,TRUE
,nHotSpotY
,nHotSpotX
);
} // end of wxCursor::wxCursor
wxCursor::wxCursor(
const wxString& rsCursorFile
, long lFlags
, int nHotSpotX
, int nHotSpotY
)
{
wxCursorRefData* pRefData = new wxCursorRefData;
pRefData = new wxCursorRefData;
m_refData = pRefData;
pRefData->m_bDestroyCursor = FALSE;
if (lFlags == wxBITMAP_TYPE_CUR_RESOURCE)
{
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)lFlags // if OS/2 this should be the resource Id
);
}
} // end of wxCursor::wxCursor
// Cursors by stock number
wxCursor::wxCursor(
int nCursorType
)
{
wxCursorRefData* pRefData = new wxCursorRefData;
m_refData = pRefData;
switch (nCursorType)
{
case wxCURSOR_ARROWWAIT:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_WAIT
,FALSE
);
break;
case wxCURSOR_WAIT:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_WAIT
,FALSE
);
break;
case wxCURSOR_IBEAM:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_TEXT
,FALSE
);
break;
case wxCURSOR_CROSS:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_MOVE
,FALSE
);
break;
case wxCURSOR_SIZENWSE:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_SIZENWSE
,FALSE
);
break;
case wxCURSOR_SIZENESW:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_SIZENESW
,FALSE
);
break;
case wxCURSOR_SIZEWE:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_SIZEWE
,FALSE
);
break;
case wxCURSOR_SIZENS:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_SIZENS
,FALSE
);
break;
case wxCURSOR_CHAR:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_ARROW
,FALSE
);
break;
case wxCURSOR_HAND:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_HAND
);
break;
case wxCURSOR_BULLSEYE:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_BULLSEYE
);
break;
case wxCURSOR_PENCIL:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_PENCIL
);
break;
case wxCURSOR_MAGNIFIER:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_MAGNIFIER
);
break;
case wxCURSOR_NO_ENTRY:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_NO_ENTRY
);
break;
case wxCURSOR_LEFT_BUTTON:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_ARROW
,FALSE
);
break;
case wxCURSOR_RIGHT_BUTTON:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_ARROW
,FALSE
);
break;
case wxCURSOR_MIDDLE_BUTTON:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_ARROW
,FALSE
);
break;
case wxCURSOR_SIZING:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_SIZE
,FALSE
);
break;
case wxCURSOR_WATCH:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)wxCURSOR_WATCH
);
break;
case wxCURSOR_SPRAYCAN:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_ROLLER
);
break;
case wxCURSOR_PAINT_BRUSH:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_PBRUSH
);
break;
case wxCURSOR_POINT_LEFT:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_PLEFT
);
break;
case wxCURSOR_POINT_RIGHT:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_PRIGHT
);
break;
case wxCURSOR_QUESTION_ARROW:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_QARROW
);
break;
case wxCURSOR_BLANK:
pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP
,0
,(ULONG)WXCURSOR_BLANK
);
break;
default:
case wxCURSOR_ARROW:
pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP
,(ULONG)SPTR_ARROW
,FALSE
);
break;
}
} // end of wxCursor::wxCursor
// Global cursor setting
void wxSetCursor(const wxCursor& cursor)
{
extern wxCursor *g_globalCursor;
if ( cursor.Ok() && cursor.GetHCURSOR() )
{
// ::SetCursor((HCURSOR) cursor.GetHCURSOR());
if ( g_globalCursor )
(*g_globalCursor) = cursor;
}
}