I don't know Why the Frame does not display on Windows-XP?

Started by vega, May 10, 2007, 09:49:20 AM

Previous topic - Next topic

vega

Now, I doing study for DialogBoxParam function of Win32 API.
It executes well on Win95,98, and WinME in my test.
But dose not display the Frame of DialogBox on WinXP.
I think, it will may be caused by Windows Version.
What's the cause of my problem? 


Resource File: RSRC.RC


#include  "C:\MASM32\INCLUDE\RESOURCE.H"

100 ICON  "WinEdit1.ICO"
200 MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE

    BEGIN
        MENUITEM "Modal DialogBox",     1000
        MENUITEM "Moderess DialogBox", 2000
    END


300     DIALOGEX 10,10,250,80,0
STYLE   DS_MODALFRAME | 0x0004 | DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_POPUP
CAPTION "DIALOGBOX TEST"
FONT 9, "System", 700, 0 /*FALSE*/

    BEGIN
        LTEXT           "Number",        301, 10,20,43,10,  SS_LEFT, , 0
        LTEXT           "Character",        302, 10,40,43,10,  SS_LEFT, , 0
        EDITTEXT                       401, 60,18,100,14, ES_AUTOHSCROLL | ES_LEFT, , 0
        EDITTEXT                       402, 60,38,100,14, ES_AUTOHSCROLL | ES_LEFT, , 0
        PUSHBUTTON      "Cancel",        501, 180,18,40,16,0
        PUSHBUTTON      "OK",        502, 180,38,40,16,1
    END


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

ASM File: DialogBox.asm

   ;

.Code
   ;

   INVOKE  DialogBoxParam, hInstance, 300, hWin, ADDR ModalDlgProc, 0

   ;




hutch--

vega,

This is just a rough guess as I don't know what the rest of your code looks like but ensure you return zero in EAX in the message processing procedure for the dialog.
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

vega

Thanks, and Sorry for my rough quoted quest.
This is my original test code.
Please teach me, what's the problem.


Comment*----------------
FILE NAME: DialogBox.asm
NOTE: Modal & Moderess Dialog Box
*-----------------------------


    .386
    .MODEL        Flat, Stdcall
     OPTION       Casemap :None   ; Case Sensitive

    INCLUDE       \MASM32\INCLUDE\WINDOWS.INC
    INCLUDE       \MASM32\INCLUDE\USER32.INC
    INCLUDE       \MASM32\INCLUDE\KERNEL32.INC
    INCLUDELIB    \MASM32\LIB\USER32.LIB
    INCLUDELIB    \MASM32\LIB\KERNEL32.LIB

    ModalDlgProc    PROTO   :DWORD,:DWORD,:DWORD,:DWORD
    ModresDlgProc   PROTO   :DWORD,:DWORD,:DWORD,:DWORD

    wsprintfA    PROTO   C :DWORD,:VARARG
    WsPrintf     EQU     <wsprintfA>


    .DATA
       ClassName   BYTE  "DlgBox_Class",00
       TitleName   BYTE  "General DialogBox",00H


;######## WinMain #############################################

       Win_Left    EQU   80                         
       Win_Top     EQU   60                           
       Win_Width   EQU  640                             
       Win_Height  EQU  480                         
       Icon_ID     EQU  100       
       Menu_ID     EQU  200     
       BackColor   EQU  COLOR_WINDOW+1                     
       CW_Style    EQU  WS_EX_OVERLAPPEDWINDOW                             
                                                                                             
       CommandLine     DWORD  00000000H 
       hInstance       DWORD  00000000H
       hWindow         DWORD  00000000H
       hIcon           DWORD  00000000H
       hMenu           DWORD  00000000H

       WinClass        WNDCLASSEX <>
       Msg             MSG        <>


.CODE
WinMain:INVOKE  GetCommandLine
        MOV     CommandLine,EAX

        INVOKE  GetModuleHandle,NULL
        MOV     hInstance,EAX
       
        MOV     WinClass.hInstance,EAX

        MOV     WinClass.cbSize,       SizeOf WNDCLASSEX
        MOV     WinClass.style,        CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
        MOV     WinClass.lpfnWndProc,  OFFSET WinProc
        MOV     WinClass.cbClsExtra,   NULL
        MOV     WinClass.cbWndExtra,   NULL
        MOV     WinClass.hbrBackground,COLOR_WINDOW+1
        MOV     WinClass.lpszMenuName, NULL
        MOV     WinClass.lpszClassName,OFFSET ClassName
        MOV     WinClass.hIconSm,NULL

        INVOKE  LoadIcon,hInstance,100
        MOV     WinClass.hIcon,EAX

        INVOKE  LoadCursor,NULL,IDC_ARROW
        MOV     WinClass.hCursor,EAX

        INVOKE  LoadMenu,hInstance,200
        MOV     hMenu,EAX

        INVOKE  RegisterClassEx,ADDR WinClass

; ----- CreateWindow Position Set -------------------------------------------

        INVOKE  CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,
                ADDR ClassName, ADDR TitleName,
                WS_OVERLAPPEDWINDOW,
                80,60,640,480,
                NULL,NULL,hInstance,NULL
        MOV     hWindow,EAX

; ----- ShowWindow Menu Handling -----------------------------------------

        INVOKE     SetMenu,hWindow,hMenu
        INVOKE     ShowWindow,hWindow,SW_SHOWNORMAL
        INVOKE     UpdateWindow,hWindow

; ----- Loop Message Handling -------------------------------------------

MsgLoop:INVOKE  GetMessage,ADDR Msg,NULL,0,0
        CMP     EAX,NULL 
        JE      EndLoop
             
        INVOKE  TranslateMessage,ADDR Msg
        INVOKE  DispatchMessage,ADDR Msg 
        JMP     MsgLoop

EndLoop:INVOKE  ExitProcess,EAX



;##### WinProc #############################################

WinProc PROC    hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
                           
                CMP    uMsg,WM_DESTROY
                JE     WinProcDestroy
               
WinProcCommand:CMP     wParam,1000
                JE      Modal_Menu

                CMP     wParam,2000
                JE      Moderess_Menu

                JMP     WinProcDistory



;-----------------------------------------------------------------------------------

.DATA

DlgNum         DWORD   12345678
DlgTrans       DWORD   00000000H
TextBuffer     BYTE   "Input.. ", 230  DUP  (00H)
MsgBuffer      BYTE   256  DUP  (00H)

DlgBoxTitle    BYTE  "Your Input Values",00H
WsDlgBox       BYTE  "Numeric Input: %lu",0DH,0AH
               BYTE  "Char Input: %s",00H

;-------------------------------------------------------------------------------
.CODE
Modal_Menu:    INVOKE  DialogBoxParam,hInstance,300,hWin,ADDR ModalDlgProc,0

               CMP     EAX,IDCANCEL   
               JE      WinProcDistory
             
               INVOKE  WsPrintf,ADDR MsgBuffer,
                       ADDR WsDlgBox,DlgNum,ADDR TextBuffer

               INVOKE  MessageBox,hWin,ADDR MsgBuffer,
                       ADDR DlgBoxTitle,MB_OK

               JMP     WinProcDistory
               
;-------------------------------------------------------------------------------

Moderess_Menu: INVOKE  CreateDialogParam,hInstance,300,hWin,ADDR ModresDlgProc,0
               JMP     WinProcDistory

;-------------------------------------------------------------------------------

WinProcDestroy: INVOKE  PostQuitMessage,NULL
WinProcDistory: INVOKE  DefWindowProc,hWin,uMsg,wParam,lParam
                RET

WinProc Endp


; ############################################################

ModalDlgProc  PROC   hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

              CMP    uMsg,WM_INITDIALOG 
              JE     ModalDlgInit
     
              CMP    uMsg,WM_CLOSE   
              JE     ModalPbCancel

              CMP    wParam,501   
              JE     ModalPbCancel

              CMP    wParam,502 
              JE     ModalPbOk
              RET

;---------------------------------------------------------------

ModalDlgInit: INVOKE  SetDlgItemInt,hDlg,401,DlgNum,TRUE     
              INVOKE  SetDlgItemText,hDlg,402,ADDR TextBuffer
              RET

ModalPbOk:    INVOKE  GetDlgItemInt,hDlg,401,ADDR DlgTrans,TRUE 
              MOV     DlgNum,EAX

              INVOKE  GetDlgItemText,hDlg,402,ADDR TextBuffer, 
                      SizeOf TextBuffer

              INVOKE  EndDialog,hDlg,IDOK                     
              MOV     EAX,00000000H
              RET

ModalPbCancel:INVOKE  EndDialog,hDlg,IDCANCEL   
              MOV     EAX,00000000H
              RET

ModalDlgProc  Endp


; ############################################################

ModresDlgProc  PROC   hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

              CMP    uMsg,WM_INITDIALOG   
              JE     ModresDlgInit
     
              CMP    uMsg,WM_CLOSE 
              JE     ModresPbCancel

              CMP    wParam,501       
              JE     ModresPbCancel

              CMP    wParam,502   
              JE     ModresPbOk
              RET

;---------------------------------------------------------------

ModresDlgInit:INVOKE  SetDlgItemInt,hDlg,401,DlgNum,TRUE
              INVOKE  SetDlgItemText,hDlg,402,ADDR TextBuffer
              RET

ModresPbOk:   INVOKE  GetDlgItemInt,hDlg,401,ADDR DlgTrans,TRUE
              MOV     DlgNum,EAX

              INVOKE  GetDlgItemText,hDlg,402,ADDR TextBuffer,
                      SizeOf TextBuffer


              INVOKE  WsPrintf,ADDR MsgBuffer,
                      ADDR WsDlgBox,DlgNum,ADDR TextBuffer

              INVOKE  MessageBox,hWindow,ADDR MsgBuffer,
                      ADDR DlgBoxTitle,MB_OK

              INVOKE  DestroyWindow,hDlg 
              RET

ModresPbCancel:
              INVOKE  DestroyWindow,hDlg   
              RET

ModresDlgProc  Endp

; #############################################################

END    WinMain

hutch--

I have not tracked down all of the logic in the app but this dlgproc at least displays the border of the modal dialog.


; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

ModalDlgProc  PROC   hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .if uMsg == WM_COMMAND
      .if wParam == 501         ; CANCEL
        invoke EndDialog,hDlg,0

      .elseif wParam == 502     ; OK
        invoke EndDialog,hDlg,0
      .endif

    .elseif uMsg == WM_INITDIALOG
      INVOKE  SetDlgItemInt,hDlg,401,DlgNum,TRUE
      INVOKE  SetDlgItemText,hDlg,402,ADDR TextBuffer

    .elseif uMsg == WM_CLOSE
      invoke EndDialog,hDlg,0

    .endif

    xor eax, eax
    ret

ModalDlgProc  Endp

; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

vega