• Welcome to Dark Bit Factory & Gravity.
 

How to create a WinAPI menu in MASM32 without using rc resource files

Started by ViL, June 21, 2018

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

ViL

Helloo! i've been looking for a way to add a menu using WinAPI within the same .asm file, without using resource (.rc) files

It can be done in C, like explained in this tutorial http://zetcode.com/gui/winapi/menus/

MASM32's User.lib has the same function prototypes in there (CreateMenu, AppendMenuW, SetMenu)

This is for two reasons, one is because i'd like them not to be edited/spoted using Resource Editors, the other is that i want to keep everything on one .asm source file (as what i want to do is small enough)

I've not seen anyone documenting how to do this before in MASM32 (or even other Win32-targeted compilers) and ran out of ideas trying, any kind of help is very appreciated!

thanks beforehand! :D

Knurz

Quote from: ViLXDRYAD on June 21, 2018
Helloo! i've been looking for a way to add a menu using WinAPI within the same .asm file, without using resource (.rc) files

It can be done in C, like explained in this tutorial http://zetcode.com/gui/winapi/menus/

MASM32's User.lib has the same function prototypes in there (CreateMenu, AppendMenuW, SetMenu)

This is for two reasons, one is because i'd like them not to be edited/spoted using Resource Editors, the other is that i want to keep everything on one .asm source file (as what i want to do is small enough)

I've not seen anyone documenting how to do this before in MASM32 (or even other Win32-targeted compilers) and ran out of ideas trying, any kind of help is very appreciated!

thanks beforehand! :D

I'm not that big assembly crack..but.. you can use the same functions as you use them in C, if you take a look at MessageBox function you can call it in two ways:


push HWND
push offset MsgText
push NULL
push NULL
call MessageBox


If you want to use a Macro, use INVOKE which does the stack-operations for you:
INVOKE MessageBox, HWND, offset MsgText, NULL, NULL

This should work for every win32 Function too.

:cheers:

Remember what the dormouse said: Feed your head

ViL

Hii Knruz and thanks for the tips!, i didn't knew about the first way! :D

After a lot of research i could figure it out and ported everything that tutorial shows to MASM32, i hadn't cleaned the source nor commented it but i think it is readable enough, though, if anyone got a question please tell me in a comment!

All options emit a sound (except exit :) ) This is how it looks like:



it's all just one .asm file:

https://pastebin.com/raw/Sx2NJHr6

you can download it, save it as main.asm, and compile it in MASM32 with these both commands (assuming you have MASM32 installed in C:\):

    C:\masm32\bin\ml.exe /c /coff /nologo main.asm

to assemble and

    C:\masm32\bin\link.exe /nologo /subsystem:windows main.obj

to link

i hope it may be of help to anyone! = 3

edit: attached exe and asm file in if that's better :D

Siekmanski

Hi ViLXDRYAD,

Did you know there is also a Masm Forum ( it has even a new Game Development section )

http://masm32.com/board/index.php

ViL

hii, Siekmanski! and nope, i didn't knew about the forums!, seems like a huge source! x3

i'll be around to check some posts there, thanks for sharing it! :D

Knurz

Quote from: ViLXDRYAD on June 21, 2018
Hii Knruz and thanks for the tips!, i didn't knew about the first way! :D

i hope it may be of help to anyone! = 3

edit: attached exe and asm file in if that's better :D

Well, worked out fine for me too because I needed some asm frame to work with, now I'm capturing yours *evil laugh* :)

Edit: Thanks for sharing the source
Remember what the dormouse said: Feed your head

ViL


Siekmanski

Hi Knurz,

push HWND
push offset MsgText
push NULL
push NULL
call MessageBox


The push order should be reversed.

push NULL
push NULL
push offset MsgText
push HWND
call MessageBox




Knurz

Quote from: Siekmanski on June 23, 2018
Hi Knurz,

push HWND
push offset MsgText
push NULL
push NULL
call MessageBox


The push order should be reversed.

push NULL
push NULL
push offset MsgText
push HWND
call MessageBox


Hi!

Thanks, as I said, I'm not really an assembler guy =).

:cheers:
Remember what the dormouse said: Feed your head