Sorry about the fast turnover of the file but I forgot to put in a macro system for flat text based toolbars. I have attached the updated macros.asm file along with a small demo on the text style toolbar in a dialog. I have yet to do the documentation for the new macros but they are simple enough to use.
1. The "rv" macro. Another invoke enhancement that takes quoted text and return a value with function style notation.
cmp rv(MessageBox,hWnd,"Leaving ?","Confirmation",MB_YESNO), IDYES
je @F
return 0
@@:
The interesting part with this macro as with the FUNC macro is it can be used like a register as it in fact always returns the result in the EAX register as normal. This allows a very efficient notation so you can do things like,
test rv(yourfunc,arg,var), eax
jz @F
You can of course do the normal assignments like a higher level language.
mov variable, rv(yourfunc,arg,var)
The new version contains the new "switch$" macro designed by Michael Webster which makes sequential string comparisons fast to code while producing good quality assembler code below it.
The example with the macros.asm file show how to use the text toolbar which is set up either for minimalist interfaces or as a component of a more complex interface.
LATER : The attached file has had the example fixed. :red
[attachment deleted by admin]
Anyone else having problems getting the demo to work in XP? Runs ok, just no toolbar.
Jim,
Did it run as it came from the ZIP file or did you build it after ? I have it tested on win2k sp4 and it works fine.
Both. First I tried the included exe, then I tried assembling it myself to see if I could find the problem. Like I say, it runs just fine, there just isn't any toolbar on the dialog. I'm sure I'm missing something here.
It doesn't work for me either on XP... wish I could help you figure out why.
I'm using windows classic style if that helps.
QuoteI'm using windows classic style if that helps.
I am also, perhaps this is a clue.
Also Hutch-
Was there some reason txtseperator was spelled this way? I thought there might have been a conflict but I couldn't find any instances of txtseparator. Just curious.
There is the possibility that Microsoft changed something in the common control library. I will have to check a few names but their should not be any conflicts that I know about.
Hi Hutch,
Thanks for the latest release of macros.asm. I faced the same problem, the dialog box appears with no toolbar.
O.S: Win Xp HE Sp2
I run XP pro and the sample didn't work for me, either with the provided .exe or with me compiling my own copy.
But it works fine when I added to the top of the main proc:
invoke InitCommonControls
-- OR --
LOCAL icc:INITCOMMONCONTROLSEX
mov icc.dwSize, sizeof INITCOMMONCONTROLSEX
mov icc.dwICC, ICC_BAR_CLASSES
invoke InitCommonControlsEx, ADDR icc
Either way, it works fine and thanks for the new set of macros. I'm still working through them to get their structure stuck in my head.
Hi jimh,
Yes, that works fine :U Initializing common controls is the key to solve the problem.
I was just going to report that about the InitCommonControls. ;-)
How I found that out was walking the code in a debugger and noticing the CreateWindowEx call failed when trying to create the toolbar. The error code was 0x57f (which was a 'unknown class type'). Then when I saw that I remembered that you must initialize the common control interface first before trying to create toolbars and other certain controls.
NOTE:
The InitCommonControls has been superceeded by InitCommonControlsEX (according to current MSDN information). And in that same thing there is this for XP users:
Windows XP: If a manifest is used, InitCommonControlsEx is not required.
But how many of us are programming with the Manifest yet?
Relvinian
:U
Thanks a lot guys for tracking that one down, it means the macro works OK but my example had a mistake in it which is fine, I can just fiz the example.
LATER : I reposted the zip file with the demo fixed so it included the correct common control values.
@hutch, works fine on XP Pro SP2.
@Relvinian, i use manifests in pretty much every app that has a GUI.
Recommend:
; RGB MACRO
;================================================
RGB_BIT_REC RECORD red:8, green:8, blue:8
RGB MACRO red, green, blue
color = RGB_BIT_REC<blue, green, red>
EXITM <color>
ENDM
LDRGB MACRO red, green, blue
mov eax, RGB_BIT_REC<blue,green,red>
ENDM
.code
;================================================
align 8
Test122 proc
mov eax, RGB(44h,55h,66h)
LDRGB 44h, 55h, 66h
ret
Test122 endp
;================================================