Input from the status bar.
Paul Martinsen -- pmartinsen@hort.cri.nz
Tuesday, January 14, 1997
Environment: VC++ 4.0, Win 95
Hello All,
I want to use the status bar for simple input in a similar way that
MS Developer does for its folding search (Ctrl + I).
At the moment, when it is appropriate, my view sends WM_CHAR messages
to a simple class that deals with the input by keeping track of what
has been entered so far, modifying it in response to the WM_CHAR
message, and displaying it using CMainFrame::SetMessageText. All this
works very nicely until another part of the program uses the message
bar do display something. For example, the menu messages. At this
point my input text is overwritten & I can't figure out where to make
it come back.
Last night I gave the message section of the status bar an ID (and
created a new class CMyStatusBar, which had a special OnSetText
member to use this ID for setting the message text). This let me use
an ON_UPDATE_COMMAND_UI, in my view class to set the message text.
(The view knows what the text should be). This half worked. The input
prompt is restored after menu messages have been displayed, but each
time I set the text in my input class (ie when the user types
something), the idle message (For Help, Press F1) appears briefly
before being replaced by the correct prompt.
I've also tried processing the mfc message WM_SETMESSAGESTRING in my
view but the message never gets there. I'd really like to do the
work in the view because it knows what should be displayed for the
input text.
Does anybody know if there is an easy way of achieving the correct
(ie like developer studio) behaviour? Also, how can I change the
background colour of a text pane the way developer studio does for
important messages (eg the "Past end of file" message that you see
when using the find command)?
Thanks for any help,
Paul.
Shaju Mathew -- shajum@hpptc51.rose.hp.com
Wednesday, January 15, 1997
>
> Environment: VC++ 4.0, Win 95
>
> Hello All,
>
> I want to use the status bar for simple input in a similar way that
> MS Developer does for its folding search (Ctrl + I).
> At the moment, when it is appropriate, my view sends WM_CHAR messages
> to a simple class that deals with the input by keeping track of what
> has been entered so far, modifying it in response to the WM_CHAR
> message, and displaying it using CMainFrame::SetMessageText. All this
> works very nicely until another part of the program uses the message
> bar do display something. For example, the menu messages. At this
> point my input text is overwritten & I can't figure out where to make
> it come back.
>
> Last night I gave the message section of the status bar an ID (and
> created a new class CMyStatusBar, which had a special OnSetText
> member to use this ID for setting the message text). This let me use
> an ON_UPDATE_COMMAND_UI, in my view class to set the message text.
> (The view knows what the text should be). This half worked. The input
> prompt is restored after menu messages have been displayed, but each
> time I set the text in my input class (ie when the user types
> something), the idle message (For Help, Press F1) appears briefly
> before being replaced by the correct prompt.
>
> I've also tried processing the mfc message WM_SETMESSAGESTRING in my
> view but the message never gets there. I'd really like to do the
> work in the view because it knows what should be displayed for the
> input text.
>
> Does anybody know if there is an easy way of achieving the correct
> (ie like developer studio) behaviour? Also, how can I change the
> background colour of a text pane the way developer studio does for
> important messages (eg the "Past end of file" message that you see
> when using the find command)?
The first part of your qn was a bit vague, (or so it seemed to me) -
but to change the background message, you need to override the OnPaint()
so that your CMyStatusBar'll handle it's own painting. You should keep
track of the bkgnd color attribute within that class, and in your handler
for a case such as 'Past end of file', you should just reset the
bkgnd color and call an Invalidate() - which would call your
overridden OnPaint()
>
> Thanks for any help,
> Paul.
>
--
***********************************************************************
.---. .---.
Shaju Mathew /" " \ WWW / " "\ Off:(916)785-9018
Performance Technology Lab / / "" \(*|*)/ "" \ \
WCSO Group R & D ////// '. V .` \\\\\\ Home:(916)722-4576
Hewlett-Packard Company //// / // : """ : \\ \ \\\\
8000, Foothills Blvd // / / /`.""" '\ \ \ \\Fax:(916)785-1264
MS 5723, Roseville // //.".\\ \\
CA 95747-5723 -------UU---UU-------
'//|||\\` Shaju_Mathew@hp.com
***********************************************************************
| Вернуться в корень Архива
|