News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

SetText for a MessageBox

Started by akalenuk, July 10, 2006, 03:27:29 PM

Previous topic - Next topic

akalenuk

Quote from: zooba on July 12, 2006, 05:44:43 AM
I don't see how this could work. 'MessageBox' is a blocking call, ie. it doesn't return until the box is closed.

! Sure! And i try to get a handler of a window after it is closed. That explains everything.

Quote from: zooba on July 12, 2006, 05:44:43 AM
A precompiled dialog is probably your best option.

But isn't it also a blocking call?

zooba

Quote from: akalenuk on July 12, 2006, 01:18:32 PM
Quote from: zooba on July 12, 2006, 05:44:43 AM
A precompiled dialog is probably your best option.

But isn't it also a blocking call?

I couldn't tell you. I personally prefer doing windows the 'old-fashioned' way - I'm not keen on using dialogs in resource files. However, basically all of the examples in the MASM32 package are based on dialog templates, so have a look at how those behave.

Cheers,

Zooba :U

MichaelW

This is a mess, but it seems to work OK.

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
        hInst     dd          0
        hWnd      dd          0
        hLst      dd          0
        wc        WNDCLASSEX  <>
        msg       MSG         <>
        className db          "message_window_class",0
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    mov   hInst, rv(GetModuleHandle, NULL)
    mov   wc.cbSize,        sizeof WNDCLASSEX
    mov   wc.style,         CS_HREDRAW or CS_VREDRAW \
                              or CS_BYTEALIGNWINDOW
    mov   wc.lpfnWndProc,   OFFSET WndProc
    mov   wc.cbClsExtra,    NULL
    mov   wc.cbWndExtra,    NULL
    m2m   wc.hInstance,     hInst
    mov   wc.hbrBackground, rv(GetStockObject, WHITE_BRUSH)
    mov   wc.lpszMenuName,  NULL
    mov   wc.lpszClassName, OFFSET className
    mov   wc.hIcon,         rv(LoadIcon, NULL, IDI_APPLICATION)
    mov   wc.hCursor,       rv(LoadCursor, NULL, IDC_ARROW)
    mov   wc.hIconSm,       0
    invoke RegisterClassEx, ADDR wc
    invoke CreateWindowEx,  0,
                            ADDR className,
                            chr$("Message Window"),
                            WS_TILED or WS_SYSMENU or WS_MINIMIZEBOX,
                            0,0,300,200,
                            NULL, NULL,
                            hInst, NULL
    mov   hWnd, eax
    invoke ShowWindow, hWnd, SW_SHOWNORMAL
    invoke UpdateWindow, hWnd   
  msgLoop:
    invoke GetMessage, ADDR msg, NULL, 0, 0
    .IF (eax != 0)
        invoke TranslateMessage, ADDR msg
        invoke DispatchMessage, ADDR msg
        jmp   msgLoop
    .ENDIF
    exit msg.wParam
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
ListBox proc a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD
    szText lstBox,"LISTBOX"
    invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR lstBox,0,
              WS_VSCROLL or WS_VISIBLE or \
              WS_BORDER or WS_CHILD or \
              LBS_HASSTRINGS or LBS_NOINTEGRALHEIGHT or \
              LBS_DISABLENOSCROLL,
              a,b,wd,ht,hParent,ID,hInst,NULL
    ret
ListBox endp
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
WndProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    .IF uMsg == WM_CREATE
        invoke ListBox, 0,0, 296, 175, hWin, 1000
        mov hLst, eax
    .ELSEIF uMsg == WM_DESTROY
        invoke PostQuitMessage, NULL
        return 0
    .ELSEIF uMsg == LB_ADDSTRING
        invoke SendMessage, hLst, uMsg, wParam, lParam
    .ENDIF
    invoke DefWindowProc, hWin, uMsg, wParam, lParam
    ret
WndProc endp
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
        hTarget dd 0
        str1 db "my other brother darryl",0
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    invoke FindWindow, chr$("message_window_class"), chr$("Message Window")
    mov hTarget, eax
    .IF eax
        print "sending...",13,10
        invoke SendMessage, hTarget, LB_ADDSTRING, 0, ADDR str1
    .ENDIF
    inkey "Press any key to exit..."
    exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start
eschew obfuscation

hutch--

There is in fact another option with MASM32 and that is the in memory dialogs that are supported with a matching set of macros. It is an OS based technique that differs from RC compiled resources only in that it builds the interface and controls in code rather than using a dialog editor. they both use the system specified modal dialog message handler type callback to process messages and both system based techniques are reliable.

Fully coded windows are fine and you have more control over what they do but its more work to duplicate the functionality of a dialog where you also have to handle the keyboard for tab orders and similar.
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php