не отображается диалоговое окно

Тема в разделе "WASM.WIN32", создана пользователем arrrg, 17 июл 2009.

  1. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    функция DialogBoxParam не отображает диалоговое окно описанное в файле ресурсов
    вопрос -почему и что с этим делать?
     
  2. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Прочти молитву Билли :)
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Пока тебя не обматюгали, покажи для начала процедуру окна.
     
  4. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    главное окно(скрыто)
    Код (Text):
    1. WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    2.  
    3.     LOCAL var    :DWORD
    4.     LOCAL caW    :DWORD
    5.     LOCAL caH    :DWORD
    6.     LOCAL Rct    :RECT
    7.     LOCAL buffer1[260]:BYTE  ; these are two spare buffers
    8.     LOCAL buffer2[260]:BYTE  ; for text manipulation etc..
    9. invoke DialogBoxParam,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG
    10.     Switch uMsg
    11.       Case WM_COMMAND
    12.    
    13.       Case WM_CREATE
    14.       invoke DialogBoxParamA,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG
    15.       Case WM_SYSCOLORCHANGE
    16.  
    17.       Case WM_SIZE
    18.  
    19.       Case WM_CLOSE
    20.  
    21.       Case WM_DESTROY
    22.         invoke PostQuitMessage,NULL
    23.         return 0
    24.  
    25.     Endsw
    26.  
    27.     invoke DefWindowProc,hWin,uMsg,wParam,lParam
    28.  
    29.     ret
    30.  
    31. WndProc endp
    Код (Text):
    1. dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    2. Switch uMsg
    3. Case WM_INITDIALOG
    4. invoke MessageBox,NULL,NULL,NULL,NULL
    5. Endsw
    6. ret
    7. dlgproc endp
     
  5. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Код (Text):
    1. dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    2. Switch uMsg
    3. Case WM_INITDIALOG
    4. invoke MessageBox,NULL,NULL,NULL,NULL
    5. Case WM_CLOSE
    6. invoke EndDialog,hWin,0
    7. Endsw
    8. ret
    9. dlgproc endp
     
  6. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    всёравно не отображается диалоговое окно.
     
  7. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    даже не вызывается диалоговая функция
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    Что возвращает DialogBoxParam?
    Покажи как определена szDisplayName.
    Покажи кусок файла ресурсов, содержащий шаблон диалога.
     
  9. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    диалог в ресурсе
    Код (Text):
    1. IDD_DLG1 DIALOGEX 6,6,528,353
    2. STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX
    3. CAPTION "IDD_DLG"
    4. FONT 8,"MS Sans Serif",0,0,0
    5. MENU connection
    6.  
    7. EXSTYLE WS_EX_TOOLWINDOW
    8. BEGIN
    9.   CONTROL "",IDC_LST1,"ListBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_USETABSTOPS|LBS_HASSTRINGS|LBS_SORT|LBS_NOTIFY,0,0,529,353,WS_EX_CLIENTEDGE
    10. END
    переменная
    Код (Text):
    1. szDisplayName db "IDD_DLG1",0
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    Понятно.
    Забудь про szDisplayName , делай так
    Код (Text):
    1. IDD_DLG1 equ ...
    2. ...
    3. invoke DialogBoxParamA,hInstance,IDD_DLG1,NULL,offset dlgproc,WM_INITDIALOG
     
  11. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    ХА
    еслибы
    думаеш я так не пробовал?
    всёравно...вот я и спросил
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    Покажи определение IDD_DLG1.
     
  13. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    IDD_DLG1 equ 1000
     
  14. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Если #define IDD_DLG1 для файла ресурсов такой же, то в DialogBoxParamA надо передавать число, а не адрес строки.
    Что возвращает DialogBoxParamA?

    ps пример в аттаче
     
  15. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    я и так и так пробовал передавать.ничего
    #define IDD_DLG1 1000
    IDD_DLG1 equ 1000
     
  16. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    выкладывай код
     
  17. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    IP_LISTER.asm
    Код (Text):
    1. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    2.  
    3.       .486                      ; create 32 bit code
    4.       .model flat, stdcall      ; 32 bit memory model
    5.       option casemap :none      ; case sensitive
    6.  
    7.       include IP_LISTER.inc        ; local includes for this file
    8.  
    9. .code
    10.  
    11. start:
    12.  
    13. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    14.  
    15.     ; ------------------
    16.     ; set global values
    17.     ; ------------------
    18.       mov hInstance,   rv(GetModuleHandle, NULL)
    19.       mov CommandLine, rv(GetCommandLine)
    20.       mov hIcon,       rv(LoadIcon,hInstance,500)
    21.       mov hCursor,     rv(LoadCursor,NULL,IDC_ARROW)
    22.       mov sWid,        rv(GetSystemMetrics,SM_CXSCREEN)
    23.       mov sHgt,        rv(GetSystemMetrics,SM_CYSCREEN)
    24.  
    25.       call Main
    26.  
    27.       invoke ExitProcess,eax
    28.  
    29. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    30.  
    31. Main proc
    32.  
    33.     LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD
    34.  
    35.     STRING szClassName,"ProStart_Class"
    36.  
    37.   ; --------------------------------------------
    38.   ; register class name for CreateWindowEx call
    39.   ; --------------------------------------------
    40.     invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,
    41.                        hIcon,hCursor,COLOR_BTNFACE+1
    42.  
    43.     mov Wwd, 300
    44.     mov Wht, 250
    45.     invoke TopXY,Wwd,sWid
    46.     mov Wtx, eax
    47.     invoke TopXY,Wht,sHgt
    48.     mov Wty, eax
    49.  
    50.     invoke CreateWindowEx,WS_EX_LEFT,
    51.                           ADDR szClassName,
    52.                           ADDR szDisplayName,
    53.                           WS_OVERLAPPED or WS_SYSMENU,
    54.                           Wtx,Wty,Wwd,Wht,
    55.                           NULL,NULL,
    56.                           hInstance,NULL
    57.     mov hWnd,eax
    58.  
    59.   ; ---------------------------
    60.   ; macros for unchanging code
    61.   ; ---------------------------
    62.     DisplayWindow hWnd,SW_SHOWNORMAL
    63.  
    64.     call MsgLoop
    65.     ret
    66.  
    67. Main endp
    68.  
    69. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    70.  
    71. RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD,
    72.                       Icon:DWORD, Cursor:DWORD, bColor:DWORD
    73.  
    74.     LOCAL wc:WNDCLASSEX
    75.  
    76.     mov wc.cbSize,         sizeof WNDCLASSEX
    77.     mov wc.style,          CS_BYTEALIGNCLIENT or \
    78.                            CS_BYTEALIGNWINDOW
    79.     m2m wc.lpfnWndProc,    lpWndProc
    80.     mov wc.cbClsExtra,     NULL
    81.     mov wc.cbWndExtra,     NULL
    82.     m2m wc.hInstance,      hInstance
    83.     m2m wc.hbrBackground,  bColor
    84.     mov wc.lpszMenuName,   NULL
    85.     m2m wc.lpszClassName,  lpClassName
    86.     m2m wc.hIcon,          Icon
    87.     m2m wc.hCursor,        Cursor
    88.     m2m wc.hIconSm,        Icon
    89.  
    90.     invoke RegisterClassEx, ADDR wc
    91.  
    92.     ret
    93.  
    94. RegisterWinClass endp
    95.  
    96. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    97.  
    98. MsgLoop proc
    99.  
    100.     LOCAL msg:MSG
    101.  
    102.     push esi
    103.     push edi
    104.     xor edi, edi                        ; clear EDI
    105.     lea esi, msg                        ; Structure address in ESI
    106.     jmp jumpin
    107.  
    108.     StartLoop:
    109.       invoke TranslateMessage, esi
    110.     ; --------------------------------------
    111.     ; perform any required key processing here
    112.     ; --------------------------------------
    113.       invoke DispatchMessage,  esi
    114.     jumpin:
    115.       invoke GetMessage,esi,edi,edi,edi
    116.       test eax, eax
    117.       jnz StartLoop
    118.  
    119.     mov eax, msg.wParam
    120.     pop edi
    121.     pop esi
    122.  
    123.     ret
    124.  
    125. MsgLoop endp
    126.  
    127. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    128.  
    129. WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    130.  
    131.     LOCAL var    :DWORD
    132.     LOCAL caW    :DWORD
    133.     LOCAL caH    :DWORD
    134.     LOCAL Rct    :RECT
    135.     LOCAL buffer1[260]:BYTE  ; these are two spare buffers
    136.     LOCAL buffer2[260]:BYTE  ; for text manipulation etc..
    137. invoke DialogBoxParam,hInstance,offset szDisplayName,NULL,offset dlgproc,WM_INITDIALOG
    138.     Switch uMsg
    139.    
    140.       Case WM_COMMAND
    141.    
    142.       Case WM_CREATE
    143.        invoke MessageBox,NULL,NULL,NULL,NULL
    144.       invoke DialogBoxParamA,hInstance,IDD_DLG1,NULL,offset dlgproc,WM_INITDIALOG
    145.        
    146.       Case WM_SYSCOLORCHANGE
    147.  
    148.       Case WM_SIZE
    149.  
    150.       Case WM_CLOSE
    151.  
    152.       Case WM_DESTROY
    153.         invoke PostQuitMessage,NULL
    154.         return 0
    155.  
    156.     Endsw
    157.  
    158.     invoke DefWindowProc,hWin,uMsg,wParam,lParam
    159.  
    160.     ret
    161.  
    162. WndProc endp
    163.  
    164. dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    165. Switch uMsg
    166. invoke MessageBox,NULL,NULL,NULL,NULL
    167. Case WM_INITDIALOG
    168. invoke MessageBox,NULL,NULL,NULL,NULL
    169. Case WM_CLOSE
    170. invoke EndDialog,hWin,0
    171. Endsw
    172. ret
    173. dlgproc endp
    174.  
    175. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    176.  
    177. OPTION PROLOGUE:NONE
    178. OPTION EPILOGUE:NONE
    179.  
    180. TopXY proc wDim:DWORD, sDim:DWORD
    181.  
    182.     mov eax, [esp+8]
    183.     sub eax, [esp+4]
    184.     shr eax, 1
    185.  
    186.     ret 8
    187.  
    188. TopXY endp
    189.  
    190. OPTION PROLOGUE:PrologueDef
    191. OPTION EPILOGUE:EpilogueDef
    192.  
    193.  
    194. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    195.  
    196. end start
    IP_LISTER.inc
    Код (Text):
    1. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    2.  
    3. ;     include files
    4. ;     ~~~~~~~~~~~~~
    5.       include \masm32\include\windows.inc
    6.       include \masm32\include\masm32.inc
    7.       include \masm32\include\gdi32.inc
    8.       include \masm32\include\user32.inc
    9.       include \masm32\include\kernel32.inc
    10.       include \masm32\include\Comctl32.inc
    11.       include \masm32\include\comdlg32.inc
    12.       include \masm32\include\shell32.inc
    13.       include \masm32\include\oleaut32.inc
    14.       include \masm32\include\msvcrt.inc
    15.       include \masm32\macros\macros.asm
    16.  
    17. ;     libraries
    18. ;     ~~~~~~~~~
    19.       includelib \masm32\lib\masm32.lib
    20.       includelib \masm32\lib\gdi32.lib
    21.       includelib \masm32\lib\user32.lib
    22.       includelib \masm32\lib\kernel32.lib
    23.       includelib \masm32\lib\Comctl32.lib
    24.       includelib \masm32\lib\comdlg32.lib
    25.       includelib \masm32\lib\shell32.lib
    26.       includelib \masm32\lib\oleaut32.lib
    27.       includelib \masm32\lib\msvcrt.lib
    28.  
    29. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    30.  
    31.         ;=================
    32.         ; Local prototypes
    33.         ;=================
    34.         WinMain          PROTO :DWORD,:DWORD,:DWORD,:DWORD
    35.         WndProc          PROTO :DWORD,:DWORD,:DWORD,:DWORD
    36.         TopXY            PROTO :DWORD,:DWORD
    37.         Paint_Proc       PROTO :DWORD
    38.         RegisterWinClass PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    39.         MsgLoop          PROTO
    40.         Main             PROTO
    41.         dlgproc          PROTO :DWORD,:DWORD,:DWORD,:DWORD
    42.  
    43.       AutoScale MACRO swidth, sheight
    44.         invoke GetPercent,sWid,swidth
    45.         mov Wwd, eax
    46.         invoke GetPercent,sHgt,sheight
    47.         mov Wht, eax
    48.  
    49.         invoke TopXY,Wwd,sWid
    50.         mov Wtx, eax
    51.  
    52.         invoke TopXY,Wht,sHgt
    53.         mov Wty, eax
    54.       ENDM
    55.  
    56.       DisplayMenu MACRO handl, IDnum
    57.         invoke LoadMenu,hInstance,IDnum
    58.         invoke SetMenu,handl,eax
    59.       ENDM
    60.  
    61.       DisplayWindow MACRO handl, ShowStyle
    62.         invoke ShowWindow,handl, ShowStyle
    63.         invoke UpdateWindow,handl
    64.       ENDM
    65.  
    66.     .data
    67.         szDisplayName db "IDD_DLG1",0
    68.         title db "IP LISTER",0
    69.         IDD_DLG1 equ 1000
    70.  
    71.     .data?
    72.         hInstance dd ?
    73.         CommandLine dd ?
    74.         hIcon dd ?
    75.         hCursor dd ?
    76.         sWid dd ?
    77.         sHgt dd ?
    78.         hWnd dd ?
    79.  
    80.  
    81. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Inserted modules ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    82.  
    83.  
    84. ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    rsrc.rc
    Код (Text):
    1. #include "resource.h"
    2. #define IDD_DLG1 1000
    3. #define IDC_LST1 1001
    4. #define connection 10000
    5. #define IDM_1 10001
    6. #define IDM_2 10002
    7. #define IDM_3 10003
    8.  
    9.  
    10.  
    11.  
    12. IDD_DLG1 DIALOGEX 6,6,528,353
    13. STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX
    14. CAPTION "IDD_DLG"
    15. FONT 8,"MS Sans Serif",0,0,0
    16. MENU connection
    17.  
    18. EXSTYLE WS_EX_TOOLWINDOW
    19. BEGIN
    20.   CONTROL "",IDC_LST1,"ListBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_USETABSTOPS|LBS_HASSTRINGS|LBS_SORT|LBS_NOTIFY,0,0,529,353,WS_EX_CLIENTEDGE
    21. END
    22.  
    23. подключение MENU
    24. BEGIN
    25.   MENUITEM "выход",IDM_1,HELP
    26.   MENUITEM "подключится",IDM_2
    27.   MENUITEM "отключится",IDM_3,GRAYED
    28. END
     
  18. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    arrrg
    1) в диалоговую процедуру перд ret добавь xor eax,eax;
    2) убери из кода _все_ invoke MessageBox,NULL,NULL,NULL,NULL (для отладки используй OutputDebugString & DbgView by Sysinternal);
    3) в файле ресурсов имя меню измени с подключение на connection.
     
  19. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    спасибо за твоё терпение к моим глупым ошибкам)
    получилось!наконецто диалог отображается, большое спасибо
     
  20. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    вот только осталась ещё одна беда -
    попробовал добавить в LISTVIEW 3 колонки:
    Код (Text):
    1. Case WM_INITDIALOG
    2.  
    3.             mov column2.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH
    4.             mov column2.fmt,LVCFMT_LEFT
    5.             mov column2.pszText,offset Heading2
    6.             mov column2.lx,150
    7.             invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column2
    8.             mov column3.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH
    9.             mov column3.fmt,LVCFMT_LEFT
    10.             mov column3.pszText,offset Heading3
    11.             mov column3.lx,149
    12.             invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column3
    13.             mov column1.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH
    14.             mov column1.fmt,LVCFMT_LEFT
    15.             mov column1.pszText,offset Heading1
    16.             mov column1.lx,249
    17.             invoke SendMessage,ListBoxhwnd,LVM_INSERTCOLUMN,0,addr column1
    Код (Text):
    1. column1 LV_COLUMN   <>
    2.         column2 LV_COLUMN   <>
    3.         column3 LV_COLUMN   <>
    4.         ListBoxhwnd equ 1001
    5.         Heading1 db "имя",0
    6.         Heading2 db "тип",0
    7.         Heading3 db "размер",0