Status & Roadmap
Authors & License
Funding Ultimate++
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: 29
Registered: April 2012
Promising 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?


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: 10924
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 message
awksed is currently offline  awksed
Messages: 29
Registered: April 2012
Promising 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.



Previous Topic: ColorPopup - input set/get it with exact color value
Goto Forum:

Current Time: Sun Feb 26 18:22:14 CET 2017

Total time taken to generate the page: 0.01380 seconds