wxBeginBusyCursor now works (better)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1766 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 1999-02-23 22:51:14 +00:00
parent e5c0b16a78
commit 634903fd04
2 changed files with 50 additions and 30 deletions

View File

@ -273,7 +273,7 @@ wxShell(const wxString& command)
}
// Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)
long wxGetFreeMemory(void)
long wxGetFreeMemory()
{
#if defined(__WIN32__) && !defined(__BORLANDC__) && !defined(__TWIN32__)
MEMORYSTATUS memStatus;
@ -290,7 +290,7 @@ static bool inTimer = FALSE;
class wxSleepTimer: public wxTimer
{
public:
inline void Notify(void)
inline void Notify()
{
inTimer = FALSE;
Stop();
@ -321,7 +321,7 @@ void wxSleep(int nSecs)
}
// Consume all events until no more left
void wxFlushEvents(void)
void wxFlushEvents()
{
// wxYield();
}
@ -360,7 +360,7 @@ void wxFatalError(const wxString& msg, const wxString& title)
}
// Emit a beeeeeep
void wxBell(void)
void wxBell()
{
// Removed by RD because IHMO syncronous sound is a Bad Thing. MessageBeep
// will do a similar thing anyway if there is no sound card...
@ -512,44 +512,47 @@ bool wxGetResource(const wxString& section, const wxString& entry, int *value, c
}
#endif // wxUSE_RESOURCES
// Old cursor
static HCURSOR wxBusyCursorOld = 0;
static int wxBusyCursorCount = 0;
// ---------------------------------------------------------------------------
// helper functiosn for showing a "busy" cursor
// ---------------------------------------------------------------------------
extern HCURSOR gs_wxBusyCursor = 0; // new, busy cursor
static HCURSOR gs_wxBusyCursorOld = 0; // old cursor
static int gs_wxBusyCursorCount = 0;
// Set the cursor to the busy cursor for all windows
void wxBeginBusyCursor(wxCursor *cursor)
{
wxBusyCursorCount ++;
if (wxBusyCursorCount == 1)
if ( gs_wxBusyCursorCount++ == 0 )
{
wxBusyCursorOld = ::SetCursor((HCURSOR) cursor->GetHCURSOR());
}
else
{
(void)::SetCursor((HCURSOR) cursor->GetHCURSOR());
gs_wxBusyCursor = (HCURSOR)cursor->GetHCURSOR();
gs_wxBusyCursorOld = ::SetCursor(gs_wxBusyCursor);
}
//else: nothing to do, already set
}
// Restore cursor to normal
void wxEndBusyCursor(void)
void wxEndBusyCursor()
{
if (wxBusyCursorCount == 0)
return;
wxCHECK_RET( gs_wxBusyCursorCount > 0,
"no matching wxBeginBusyCursor() for wxEndBusyCursor()" );
wxBusyCursorCount --;
if (wxBusyCursorCount == 0)
gs_wxBusyCursorCount--;
if ( --gs_wxBusyCursorCount == 0 )
{
::SetCursor(wxBusyCursorOld);
wxBusyCursorOld = 0;
::SetCursor(gs_wxBusyCursorOld);
gs_wxBusyCursorOld = 0;
}
}
// TRUE if we're between the above two calls
bool wxIsBusy(void)
bool wxIsBusy()
{
return (wxBusyCursorCount > 0);
return (gs_wxBusyCursorCount > 0);
}
// ---------------------------------------------------------------------------
const char* wxGetHomeDir(wxString *pstr)
{
wxString& strDir = *pstr;
@ -652,7 +655,8 @@ bool wxCheckForInterrupt(wxWindow *wnd)
return TRUE;//*** temporary?
}
else{
wxError("wnd==NULL !!!");
wxFAIL_MSG("wnd==NULL !!!");
return FALSE;//*** temporary?
}
}
@ -706,7 +710,7 @@ void wxGetMousePosition( int* x, int* y )
};
// Return TRUE if we have a colour display
bool wxColourDisplay(void)
bool wxColourDisplay()
{
HDC dc = ::GetDC((HWND) NULL);
bool flag;
@ -720,7 +724,7 @@ bool wxColourDisplay(void)
}
// Returns depth of screen
int wxDisplayDepth(void)
int wxDisplayDepth()
{
HDC dc = ::GetDC((HWND) NULL);
int planes = GetDeviceCaps(dc, PLANES);

View File

@ -231,6 +231,8 @@ void wxWindow::SetHWND(WXHWND hWnd)
void wxWindow::Init()
{
m_isWindow = TRUE;
// Generic
m_windowId = 0;
m_isShown = TRUE;
@ -1483,6 +1485,20 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
case WM_GETDLGCODE:
return MSWGetDlgCode();
case WM_SETCURSOR:
if ( wxIsBusy() )
{
extern HCURSOR gs_wxBusyCursor; // from msw\utils.cpp
::SetCursor(gs_wxBusyCursor);
// returning TRUE stops the DefWindowProc() from further processing
// this message - exactly what we need because we've just set the
// cursor
return TRUE;
}
break; // leave it to DefWindowProc()
default:
return MSWDefWindowProc(message, wParam, lParam );
}