[comp.windows.ms.programmer] Source for % done control

green@vis.toronto.edu (Anthony Thomas Green) (04/11/91)

Here is a progress bar (% done gadget) custom control.

Please use it and enjoy. It's free for all.

Attached is the uuencoded PROBAR.ZIP which contains the following files:

 Length  Method   Size  Ratio   Date    Time   CRC-32  Attr  Name
 ------  ------   ----- -----   ----    ----   ------  ----  ----
   3872  Implode   1898  51%  04-11-91  11:59  afb0ea99 --w  PROBAR.DLL
    788  Implode    434  45%  04-11-91  10:35  3811ae00 --w  PROBAR.DLG
     24  Stored      24   0%  04-11-91  10:33  14ed7512 --w  PROBAR.H
    245  Shrunk     170  31%  02-07-91  12:48  ff5b7a42 --w  MAKEFILE
    332  Implode    284  15%  04-11-91  10:35  76be3e85 --w  PROBAR.RES
    301  Shrunk     250  17%  02-12-91  08:12  ed11ccb1 --w  PROBAR.DEF
   2557  Implode   1494  42%  04-11-91  11:56  25554916 --w  README.TXT
   6297  Implode   2226  65%  04-11-91  11:50  d0250d0a --w  PROBAR.C
 ------          ------  ---                                 -------
  14416            6780  53%                                       8

Whoops! I forgot something. The probar.h that the README.TXT refers to
is NOT the probar.h shown in the ZIP file. You will need to make a different
file that includes 3 #defines. Simply copy the #define lines for the BAR_*
messages from PROBAR.C and put them in a new .h file. This is the one you
will need to include in applications that use ProBar. Sorry!

What follows is the README.TXT....


------------------------------------------------------------------------------

ProBar - A custom control for progress bars.

This is FREE software.

Most of this code was stolen, err, inspired by RAINBOW.C (the SDK sample code)
and SETUP.C (the Microsoft sample setup/install program found on Online).
I still don't have a very good handle on custom controls, but I am beginning to
appreciate their usefulness. Install PROBAR.DLL into the dialog box editor by
selecting ADD CUSTOM CONTROL from the file menu.

If you've intalled Windows on your machine then you've seen this gadget. It's
the blue bar with the % complete number in it. What I've done is made a handy 
resizeable custom control out of it. To use it, simply stick it in a dialog
box with the dialog box editor. Then you simply send it messages telling it what
to do.

Don't forget to do this at the start of your code...

	#include "probar.h"

and

	hProbarLib = LoadLibrary("probar.dll");

and this at the end...

	FreeLibrary(hProbarLib);



ProBar understands 3 special messages:

BAR_SETRANGE
	wParam: The maximum number the bar goes up to.
	lParam: Don't care.

BAR_SETPOS
	wParam: The current position of the progress bar (from 0 to whatever
		you set in BAR_SETRANGE).
	lParam: Don't care.

BAR_DELTAPOS
	wParam: A change in position. Can be negative.
	lParam: Don't care.

Bizarre things will happen if you set the bar's position greater to what is
defined by BAR_SETRANGE (or less than 0).



ProBar is SIMPLE to use. If you have an operation you know is going to take
12345 steps, then...

	SendMessage(hProBar, BAR_SETRANGE, 12345, 0);

Each time you have completed a step...

	SendMessage(hProBar, BAR_DELTAPOS, 1, 0);

ProBar will update itself by growing it's bar and showing the new % complete.



BUGS!
-----

What would free software be without bugs?
If you double click on the probar while using the dialog box editor you
are supposed to get a dialog box that tells you about ProBar. Well,
you *do* get a dialog box --- but it says Unrecoverable Application Error.
Either don't do it or fix it! I'm sure it's something simple - but
I just don't have time to look at it. However, if *you* fix it ---
please don't keep the fix to yourself!



Now that I have your attention:

Lots of people are developing Windows code. Let's see some source!
PLEASE.

Thanks to Pierre Perret for his port of MicroEmacs to Windows.

Questions? Comments? Advice? Don't hesitate to phone or email.


Anthony Green
green@vis.toronto.edu

Work: (416) 340-0887
Home: (416) 537-9889

---- Cut here -------------------------------------------------------------
begin 644 PROBAR.ZIP
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
M]0KIO=< 7+.=FUOJTTBH;OM\U(7=1M&QS"XY\J W[$8.>P)Z.CI7T$LN?*J 
M%(_?B9I:F)N?FY^3F<E[FTF!N:+\?(,K6)0.MOFZW!M-I3#D\0V8"V=ATD.2
M92!3"V7CKV-RA/VJ.R8>^4TJM,TTW_#7HI<*=Y-=B%.E)!B)\5XH=C66>+2<
M+B_"VD\:M?J#7DJ71ISE%.:S"G_.<V]X&O^U]$#5AHQ>/G\K/\C<<@O?YL8"
M9=996-6SL5T/0<9\;V'4*+UA_B>R5*V4_*H9C!YC=RWX(<C6UG^714CX\I?]
M._Z$?RT:QO$']JTUZEQ%'!?(WWVO;WKJ5U%^S<[,9^<7EJ]+17A?X0F%E_;-
M=]EK* _S$/0GT[#BP[BW];**83</1CR'2?Q6N-)-I9==TY/S-TKA"C_3B:BO
M^9@^%U@=9.M:SMOJYJ1:[/^1,]5QOJ##LD,B,1EW@)%;(^6&FA<?^:HO%>*!
M0SI'N;ETG<1 .IAZ?)O5T\CMB*,H@_X0>DBR0ZTA'=YK8[-I*CQL/FA2^*;^
MY4261R 1!F_0^_<))1Z"5B<IVWU+'4$9<0*7@QZ_X:"'$P3 4H%:V9K_IO05
M\SB+!2$Y#\^J(8<MOAA'_3B -WWC-COZ=]KG\QJ,K+E,S07=34Y&\ 82V.H:
MSWHA^3!MKGLP'$;LADEU@^@97L^Y5PNQ9B]7>&YL@V(]+J.._ 0CE@N6KG$U
MVVI'FAU"[$QNT$*HJVXGKBXGO@V>.F/$Q!5TX:EMGGP^!O[Y&"2?C(%_,@:Q
M;QQLHK/:?P_,(_-8U8J@PZ/*S1.'<PK-S5<UW$2+(<O@NP*R<!7+?4E2S'Y(
MK1WS1D/0X*)6\2[!2,6Q 0WS^2(G0F< &A&ZBER#$;[#]6LMG4\XAV]>_<T]
MO+O#PHO;3W;B[:N7U)3"0H;6 M](\C^ 072#H8N"IE/W\.@J+NW7%I5V*[3^
M&R<?K]3]2GB;^:4_IG.<*JOLU_I(U!0\'^-Q9B-/Z$,9)V[V8O@13EC*^537
M0BC?HLEDZ36D(%>=._D)SY=4Y^SK+NP1^FNNIJ102P$""@ *    !@!Y7XL6
MF>JPKVH'   @#P  "@           "          4%)/0D%2+D1,3%!+ 0(*
M  H    & &)4BQ8 KA$XL@$  !0#   *          $ (    )('  !04D]"
M05(N1$Q'4$L! @H "@      /52+%A)U[108    &     @          0 @
M    ; D  %!23T)!4BY(4$L! @H "@    $ !69'%D)Z6_^J    ]0    @ 
M         0 @    J@D  $U!2T5&24Q%4$L! @H "@    8 8E2+%H4^OG8<
M 0  3 $   H          0 @    >@H  %!23T)!4BY215-02P$""@ *    
M 0";04P6L<P1[?H    M 0  "@         ! "    "^"P  4%)/0D%2+D1%
M1E!+ 0(*  H    & !U?BQ86254EU@4  /T)   *          $ (    . ,
M  !214%$344N5%A44$L! @H "@ &  8 1%Z+%@H-)="R"   F1@   @     
K     0 @    WA(  %!23T)!4BY#4$L%!@     (  @ N@$  +8;        
 
end
----- CUT HERE ----------------

Anthony Green
green@vis.toronto.edu