GetOpenFileName диалог

Тема в разделе "WASM.BEGINNERS", создана пользователем Treant, 15 дек 2009.

  1. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Может, поможет. Это опробованные куски кода.
    Handle родительского окна или 0, nIndex - выбранный фильтр (индексация с 1), lpFilter - сам фильтр, lpFileName - буффер на 260 (MAX_PATH) откуда будет взято имя файла, и куда будет помещено новое. lpExtension - расширение по-умолчанию вместе с точкой, lpTitle - заголовок окна.


    Код (Text):
    1. OpenDlg proc Handle:DWORD, nIndex:DWORD, lpFilter:DWORD, lpFileName:DWORD, lpExtension:DWORD, lpTitle:DWORD
    2.       MOV  EAX, ESP             ; ---------------------- OPENFILENAME struct stack
    3.       PUSH nil                  ; lpTemplateName
    4.       PUSH nil                  ; lpfnHook
    5.       PUSH 0                    ; lCustData
    6.       PUSH lpExtension              ; lpstrDefExt
    7.       PUSH 0                    ; nFileExtension, nFileOffset
    8.       PUSH ofnFlags             ; Flags
    9.       PUSH lpTitle              ; lpstrTitle
    10.       PUSH OFFSET szInitialDir          ; lpstrInitialDir
    11.       PUSH 0                    ; nMaxFileTitle
    12.       PUSH nil                  ; lpstrFileTitle
    13.       PUSH MAX_PATH             ; nMaxFile
    14.       PUSH lpFileName               ; lpstrFile
    15.       PUSH nIndex               ; nFilterIndex
    16.       PUSH 0                    ; nMaxCustFilter
    17.       PUSH nil                  ; lpstrCustomFilter
    18.       PUSH lpFilter             ; lpstrFilter
    19.       PUSH hInstance                ; hInstance
    20.       PUSH Handle               ; hwndOwner
    21.       PUSH SIZEOF OPENFILENAME          ; lStructSize
    22.       MOV  EDX, ESP
    23.       PUSH EAX                  ; ---------------------- OPENFILENAME ends
    24.       INVOKE GetOpenFileName, EDX
    25.       TEST EAX, EAX
    26.       JZ   @F
    27.       MOV  EAX, (OPENFILENAME PTR [ESP+4]).nFilterIndex
    28.   @@: POP  ESP
    29.       RET
    30. OpenDlg Endp
    Максимально забитая процедура обработки сообщений для диалога с поддержкой горячих клавиш.

    Код (Text):
    1. Start proc
    2.       INVOKE InitCommonControls
    3.  
    4.       INVOKE GetModuleHandle, 0
    5.       MOV  hInstance, EAX
    6.       INVOKE LoadCursor, 0, IDC_ARROW
    7.       MOV  hCursor, EAX
    8.       INVOKE LoadIcon, hInstance, ICON_TRAY
    9.       MOV  hIcon, EAX
    10.  
    11.       INVOKE Init_classes
    12.  
    13.  
    14.   ; Создание и отображение окна ...
    15.       INVOKE CreateDialogParam, hInstance, DIALOG_MAIN, HWND_DESKTOP, OFFSET MainProc, 0
    16.       TEST EAX, EAX
    17.       JE   @Exit
    18.       MOV  ESI, EAX
    19.       INVOKE ShowWindow, ESI, SW_SHOWNORMAL
    20.  
    21.   ; Message loop ...
    22.       INVOKE LoadAccelerators, hInstance, ACCEL_MAIN
    23.       MOV  EBX, EAX
    24.  
    25.       ADD  ESP, -(SIZEOF MSG)
    26.       MOV  EDI, ESP
    27.   @@: INVOKE GetMessage, EDI, 0, 0, 0
    28.       TEST EAX, EAX
    29.       JZ   @F
    30.       INVOKE IsDialogMessage, ESI, EDI
    31.       TEST EAX, EAX
    32.       JNE  @B
    33.       INVOKE TranslateAccelerator, ESI, EBX, EDI
    34.       TEST EAX, EAX
    35.       JNE  @B
    36.       INVOKE TranslateMessage, EDI
    37.       INVOKE DispatchMessage, EDI
    38.       JMP  @B
    39.   @@: INVOKE DestroyWindow, ESI
    40.       MOV  EAX, (MSG PTR [EDI]).wParam
    41.       ADD  ESP, SIZEOF MSG
    42.   @Exit:
    43.       INVOKE ExitProcess, EAX
    44. Start Endp
     
  2. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    p.s. забыл парочку констант
    Код (Text):
    1. OFN_ENABLESIZING    EQU     800000h
    2.   ofnFlags      EQU     OFN_HIDEREADONLY or OFN_NOVALIDATE or \
    3.     OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_NONETWORKBUTTON or \
    4.     OFN_ENABLESIZING or OFN_NOCHANGEDIR or OFN_HIDEREADONLY or \
    5.     OFN_FILEMUSTEXIST xor OFN_EXPLORER
    6.   sfnFlags      EQU     OFN_OVERWRITEPROMPT or OFN_HIDEREADONLY or \
    7.     OFN_NOVALIDATE or OFN_PATHMUSTEXIST or OFN_NONETWORKBUTTON or \
    8.     OFN_ENABLESIZING or OFN_EXTENSIONDIFFERENT or OFN_NOCHANGEDIR xor OFN_EXPLORER
     
  3. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    239
    Нашел ошибку :/
    У меня было:
    Нужно:
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576