сохранить диалог со сборкой - PullRequest
1 голос
/ 21 июня 2011

Я написал программу со сборкой, которая работает как редактор (Блокнот, Word и т. Д.).Теперь я хочу показать диалог сохранения для сохранения содержимого контейнера заметок, когда я нажимаю сочетание клавиш, например F10 ....
как я могу это сделать?
спасибо

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Вот что я бы сделал:

WinProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  LOCAL ofn:OPENFILENAME
  LOCAL filePath[MAX_PATH]:BYTE
  LOCAL hFile:HANDLE

  .IF uMsg == WM_CREATE
    xor             eax, eax
  .ELSEIF uMsg == WM_KEYDOWN
    mov             eax, wParam
    .IF eax == VK_F10
      ; Prepare the OPENFILENAME structure
      invoke        RtlZeroMemory, ADDR ofn, SIZEOF OPENFILENAME
      invoke        RtlZeroMemory, ADDR filePath, MAX_PATH
      mov           ofn.lStructSize, SIZEOF OPENFILENAME
      m2m           ofn.hwndOwner, hWnd
      mov           ofn.lpstrFilter, CTEXT("All Files (*.*)",0,"*.*",0,0)
      mov           ofn.nFilterIndex, 1
      lea           eax, [filePath]
      mov           ofn.lpstrFile, eax
      mov           ofn.nMaxFile, MAX_PATH
      mov           ofn.Flags, OFN_PATHMUSTEXIST+OFN_FILEMUSTEXIST+OFN_EXPLORER

      .IF $invoke( GetOpenFileName, ADDR ofn ) != 0
        ; File selected...
        lea         esi, [ofn]
        invoke      CreateFile, (OPENFILENAME PTR [esi]).lpstrFile, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, 0, NULL
        .IF eax != INVALID_HANDLE_VALUE
          ; File opened...
          mov       hFile, eax
          inovke    CloseHandle, hFile
        .ENDIF
      .ENDIF
    .ELSEIF eax == VK_ESCAPE
      invoke        DestroyWindow, hWnd
    .ENDIF
  .ELSEIF uMsg == WM_DESTROY
    invoke          PostQuitMessage, NULL
  .ELSE
    invoke          DefWindowProc, hWnd, uMsg, wParam, lParam
  .ENDIF
  ret
WinProc endp

Если у вас их нет, я использовал макросы:

    m2m MACRO dest:REQ, src:REQ
      push  src
      pop   dest
    ENDM            

    CTEXT MACRO y:VARARG
      LOCAL sym, dummy
      dummy EQU $   ;; MASM error fix
      CONST SEGMENT
        IFIDNI <y>,<>
          sym db 0
        ELSE
          sym db y,0
        ENDIF
      CONST ends
      EXITM <OFFSET sym>
    ENDM

    $invoke MACRO Function:REQ, Args:VARARG
      IFB <Args>
        invoke  Function
      ELSE
        invoke  Function, Args
      ENDIF
      EXITM <eax>
    ENDM
1 голос
/ 22 июня 2011

Если вы используете masm32 с win32 sdk, конечно, под windows, this - это то, что вы ищете, и быстрый поиск в Google дал мне это о обнаружение горячих клавиш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...