home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software of the Month Club 1995 December
/
SOFM_Dec1995.bin
/
pc
/
win
/
biz
/
recall
/
mwatch.tx$
/
mwatch.txt
Wrap
Text File
|
1995-10-31
|
4KB
|
88 lines
MWATCH.DLL
DLL to monitor the position of the mouse and provide dynamic feedback
to the VB programmer, primarily in the context of providing a status
bar for the user.
By Jonathan Zuck
Copyright 1992 User Friendly, Inc. and Jonathan Zuck
Liscence:
You are hearby liscensed to use MWATCH.DLL freely within your
own programs, paying no royalties to UFI or Jonathan Zuck. There is
only one caveat: IF YOU DISTRIBUTE YOUR SOURCE, you MUST also
distribute this text file, explaining the usage of the DLL.
The Problem:
A number of people have asked for a way to provide a status
bar for the user, depending on the position of the mouse. There are
two aspects to this. First, it is necessary to know when a menu item
has been highlighted by the user (althought not yet selected). Both
MS EXCEL and MS WORD for WINDOWS provide a short help prompt depending
on which menu item is highlighted.
The second part of this task is to provide some help prompt
when the mouse is hovering over a particular control. While the
Mouse_Enter event is available under HyperCard and Toolbook, it is
missing from VB (and from Windows, in general).
The Solution:
As you might guess, MWATCH.DLL is the solution!<g>...or at
least a partial one. Once you register your Form with MWATCH, a
Form_KeyDown event will be triggered every time the cursor is
someplace different, either over a new control or in a menu. If
the cursor has been moved over a control, the hWnd of that control
is passed to the _KeyDown event in the KeyCode parameter. If a menu
item has been selected than the Menu ID of that menu item is passed
as a negative number in the KeyCode parameter.
The Cursor Enters a Control:
Once the cursor moves over a control, the Form_KeyDown event
is triggered with the hWnd of the control in the KeyCode parameter,
as noted above. You can determine the hWnd of various controls at
start-up, using various methods, including my CTLHWND.DLL and then
use a Select Case loop to determine the help text to display.
Alternatively, MWATCH also exports a couple of useful utility
functions to assist you: HWndCtlName and HWndTag. HWndCtlName$ will
return the name of a control, given its hWnd and HWndTag will return
the text in the .Tag property of the passed hWnd. Using this technique,
you can either used a Select Case loop through the CtlName's to
determine the help text or, if you don't need the .Tag property for
something else, the easiest thing is to put your help text in the .Tag
property and simply use HWndTag to retrieve this text at run-time.
Please see the sample app MENTER.MAK for demonstrates of these
functions in context.
The Cursor Enters a Menu:
Once the cursor highlights a menu item (or it is triggered
with the keyboard), the Form_KeyDown event is triggered with the
MenuId in in the KeyCode parameter. Once again, you can check these
once when you are finished designing your menu because they will be
the same (except for the top-level menu heading) every time the app
is run. You could then set up a Select Case statement to check KeyCode
against various MenuIds.
Alternatively, MWATCH exports a function called: MenuCaption.
The MenuCaption$ function takes a MenuId as a parameter and returns
the caption of the menu item. See MENTER.MAK for an example of this
function in use. PLEASE NOTE: the MenuCaption function was written
specifically for this DLL to save you calling a bunch of Windows
API functions and it WILL NOT work outside of your Form_KeyDown
handler! The HWndCtlName and HWndTag functions can be used in other
contexts but this is NOT THE CASE with the MenuCaption function.
Also, at this point, MWATCH doesn't generate an event when the
user is in the system (or control) menu. I was just lazy. If a lot
of people request it, I can add it.
People Using HOTKEY.DLL
Many of you are using HOTKEY.DLL (which makes me happy, of
course!) and you are using your Form as the "hotkey handler." Since
HOTKEY gives you a choice of hWnd's and MWATCH does not, you will
need to copy your current Form_KeyDown code to a hidden Picture Box
or something, if you want to use both DLLs.
Hope you find this useful! Enjoy!
-=- Jonathan Zuck
User Friendly, Inc.
1718 M Street, N.W.
Suite 291
Washington, DC 20036
(202) 387-1949
(202) 785-3607 FAX
76702,1605 CIS