Здравствуйте, Станислав!
Вы задали вопрос туда, куда надо
Мы всегда рады помочь ищущим знания!
В приложении подправленная программа, которая по первой кнопке "рисует" в edit-е строку "Нажали на кнопочку..."
По второй выходим из программы
Чтобы диалог из ресурсов начал работать как основное окно необходимо в диалоге указать класс такой же,
как и зарегистрированный. Плюс необходимо задать поле WNDCLASSEX.cbWndExtra равным DLGWINDOWEXTRA
Для файла ресурсов надо было подключить файл resource.h
Удачи!
Приложение:
#include "\masm32\include\resource.h"
#define Frame 1000
#define IDC_BTN1 1001
#define IDC_BTN2 1002
#define IDC_CHK1 1003
#define IDC_EDT1 1004
Frame DIALOGEX 6,6,194,102
CAPTION "IDD_DLG"
CLASS "ExeCryptClass"
FONT 8,"MS Sans Serif",0,0,0
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
BEGIN
CONTROL "Button 1",IDC_BTN1,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,5,54,13
CONTROL "Button 2",IDC_BTN2,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,8,22,54,13
CONTROL "IDC_CHK",IDC_CHK1,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,12,40,54,9
CONTROL "",IDC_EDT1,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,7,54,13,WS_EX_CLIENTEDGE
END
;--------------------------------
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\macros\macros.asm ;для макро szText
WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
.const
IDM_OPEN equ 1
IDM_SAVE equ 2
IDM_EXIT equ 3
MAXSIZE equ 260
Frame equ 1000 ;ресурсы
IDC_BTN1 equ 1001
IDC_BTN2 equ 1002
IDC_CHK1 equ 1003
IDC_EDT1 equ 1004
.data
ClassName db "ExeCryptClass", 0
AppName db "ExeCrypt", 0
ofn OPENFILENAME <>
FilterString db "Exe files",0,"*.exe",0
buffer db MAXSIZE dup(0)
hMapFile HANDLE 0
.data?
hInstance HINSTANCE ? ;handle progi
CommandLine LPSTR ?
hFileRead HANDLE ?
hFileWrite HANDLE ?
hMenu HANDLE ?
pMemory DWORD ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain proc hInst: HINSTANCE, hPrevInst: HINSTANCE, CmdLine: LPSTR, CmdShow: DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, DLGWINDOWEXTRA ;важно, чтобы запустить главное окно из ресурсов
push hInstance
pop wc.hInstance
mov wc.hbrBackground, COLOR_WINDOW+8
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset ClassName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
invoke RegisterClassEx, addr wc
;создаем главное окно из ресурсов
;важно, чтобы в диалоге был указан класс, такой же как и зарегистрированный
invoke CreateDialogParam, hInstance, Frame, 0, NULL, NULL
mov hwnd, eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg, NULL,0,0
.BREAK .IF(!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg: UINT, wParam: WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage, NULL
;.ENDIF
;.IF uMsg==WM_RBUTTONDOWN
; invoke Beep, 15000d, 600
;.ENDIF
;.IF uMsg==WM_LBUTTONDOWN
; invoke Beep, 10000d, 500
.ELSEIF uMsg==WM_COMMAND
.IF wParam==IDC_BTN1
szText TestString, "Нажали на кнопочку..."
invoke GetDlgItem, hWnd, IDC_EDT1
invoke SetWindowText, EAX, ADDR TestString
.ELSEIF wParam==IDC_BTN2
invoke SendMessage, hWnd, WM_CLOSE, 0, 0
.ENDIF
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
end start