Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » TopWindow&PopUp, TrayIcon » CursorImage() not called
CursorImage() not called [message #47148] Wed, 21 December 2016 16:56 Go to next message
awksed is currently offline  awksed
Messages: 30
Registered: April 2012
Member
I'm trying to ensure an arrow cursor is shown in a messagebox of my creation (whatever the underlying window cursor is):

class CMsgBoxW : public TopWindow
{
virtual Image CursorImage(Point p, dword keyflags)
{
return Image::Arrow();
}
...

CursorImage() is never called in this or my app main window which has a similar class member.

I need to implement my own cursor selection system as the WaitCursor class and my own similar ArrowCursor class result in restoring an obsolete cursor shape when instantiated before a cursor change (using OverrideCursor()) and goes out of scope after (in multi-threaded app).

Why is CursorImage() is never called?

Thanks,

Jan
Re: CursorImage() not called [message #47150 is a reply to message #47148] Wed, 21 December 2016 21:14 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 11082
Registered: November 2005
Ultimate Member
Maybe CMsgBoxW has children that cover the background?

Check Ctrl::OverrideCursor
Re: CursorImage() not called [message #47152 is a reply to message #47150] Thu, 22 December 2016 14:01 Go to previous messageGo to next message
awksed is currently offline  awksed
Messages: 30
Registered: April 2012
Member
Hi Mirek,

Thanks for your reply.

If I dont make a prior call to OverrideCursor(), CursorImage() is called so thats now ok.

I need a way to only change the cursor to an arrow when within class CMsgBoxW window so the user is not confused by a wait cursor, while continuing to show a wait cursor (if set) within the main app window and its controls.

This is to handle e.g. the following scenario:

1) The app Init() function is a thread that sets the cursor to wait at the start and sets the cursor to arrow when it ends.

2) That thread encounters an error that must be reported (using a CMsgBoxW window) to the user who must click the OK button to close the CMsgBoxW window.

3) The CMsgBoxW is modeless and the user may close either before or after the Init() thread completes and sets the cursor to arrow.

How may I show the wait cursor while the mouse is within the app main window, its tabs and controls, and the arrow cursor when the mouse is within the messagebox window?
(PromptOK also suffer from showing a wait cursor - which is confusing to a user - when OverrideCursor() has been called.)

Some way of overriding the "overidden" cursor in only the CMsgBoxW class would seem to be the simplest way.

TIA.

Jan

Re: CursorImage() not called [message #47696 is a reply to message #47152] Tue, 07 March 2017 13:13 Go to previous message
mirek is currently offline  mirek
Messages: 11082
Registered: November 2005
Ultimate Member
awksed wrote on Thu, 22 December 2016 14:01
Hi Mirek,

Thanks for your reply.

If I dont make a prior call to OverrideCursor(), CursorImage() is called so thats now ok.

I need a way to only change the cursor to an arrow when within class CMsgBoxW window so the user is not confused by a wait cursor, while continuing to show a wait cursor (if set) within the main app window and its controls.

This is to handle e.g. the following scenario:

1) The app Init() function is a thread that sets the cursor to wait at the start and sets the cursor to arrow when it ends.

2) That thread encounters an error that must be reported (using a CMsgBoxW window) to the user who must click the OK button to close the CMsgBoxW window.

3) The CMsgBoxW is modeless and the user may close either before or after the Init() thread completes and sets the cursor to arrow.

How may I show the wait cursor while the mouse is within the app main window, its tabs and controls, and the arrow cursor when the mouse is within the messagebox window?
(PromptOK also suffer from showing a wait cursor - which is confusing to a user - when OverrideCursor() has been called.)

Some way of overriding the "overidden" cursor in only the CMsgBoxW class would seem to be the simplest way.

TIA.

Jan



My bet is that in your main thread, message queue is not being processed (e.g. by Ctrl::ProcessEvents).
Previous Topic: ColorPopup - input set/get it with exact color value
Next Topic: TrayIcon is driving me insane
Goto Forum:
  


Current Time: Fri Jul 28 14:46:11 CEST 2017

Total time taken to generate the page: 0.01046 seconds