Thanks KungFooMasta.

All I did was:
ShowCursor(false);... and it worked like magic. When the mouse is over the app window the OS cursor disappears (leaving CEGUI to provide its cursor as intended). When the mouse leaves the app window it looks perfectly normal and does whatever it's supposed to do for each application it moves over.
I didn't even have to do any #includes, I just put in that ONE line of code and it worked. The windows.h stuff is already in my include heirarchy due to ogre and/or cegui.
I'm running WinXP media center edition 2002 (essentially the same as winxp pro).
Couple of smaller points which may also help. Basically, I'd like the OS cursor to come back when the cursor is over the main rendering window's EDGE, i.e. for window resizing, or to use the main window title bar to drag, maximize, minimize, or close. Also, when the cursor is over the edges like that I don't want any clicks registering to the application itself, which it still is, and I haven't figured that part out yet (I have a post on cegui's forums about it).
Anyway, I did this by modifying my mouseMoved() event handler as follows:
bool MyInputMgr::mouseMoved( const OIS::MouseEvent &arg )
{
// for some reason ShowCursor() sets a cursor "level" which continues to increase if you
// call ShowCursor(true) consecutively, so we only want to call it once in each direction.
// we need to be careful that ShowCursor() is only called from here, and nowhere else in the app.
// we'll start with value 0, which is "shown" state, so we know that we need to turn it off.
static int iOSCursorVisible = 0; // anything 0 or higher is shown, -1 or lower is hidden
static bool bCEGUICursorVisible = true;
if ((unsigned int)arg.state.X.abs == mWindow->getWidth() ||
(unsigned int)arg.state.Y.abs == mWindow->getHeight() ||
arg.state.X.abs == 0 ||
arg.state.Y.abs == 0)
{
// cursor is leaving our app window, so we want to see the O/S cursor now, and hide the CEGUI cursor.
while (iOSCursorVisible < 0)
{
// this will bring the count to at least zero no matter how negative it is.
iOSCursorVisible = ShowCursor(true);
}
CEGUI::System::getSingleton().injectMouseLeaves();
if (bCEGUICursorVisible)
{
CEGUI::System::getSingleton().setMutedState(true);
CEGUI::MouseCursor::getSingleton().hide();
bCEGUICursorVisible = false;
}
}
else
{
// cursor is inside our app window, so we want to hide the O/S cursor now, and show the CEGUI cursor:
while (iOSCursorVisible > -1)
{
// this will bring the count to -1 (the trigger value) no matter how positive it is.
iOSCursorVisible = ShowCursor(false);
}
if (!bCEGUICursorVisible)
{
CEGUI::System::getSingleton().setMutedState(false);
CEGUI::MouseCursor::getSingleton().show();
bCEGUICursorVisible = true;
}
}
CEGUI::System::getSingleton().injectMousePosition(arg.state.X.abs, arg.state.Y.abs);
return true;
}
I hope this can help someone.