Консультация № 191774
14.11.2017, 20:43
0.00 руб.
0 2 0
Здравствуйте! У меня возникли сложности с таким вопросом:
Имеется задание "Щелчок левой кнопкой в неклиентской области окна приводит к созданию двух окон с разными стилями класса.
Нажатие клавиш-стрелок позволяет перемещать любое окно, если при активном 1 окне нажата любая гласная буква." Реализовать с использованием API-функций AnimateWindow, CloseWindow, FindWindow, FlashWindow, FlashWindowEx, GetClientRect, GetParent, GetDesktopWindow, GetTitleBarInfo, GetWindowPlacement, IsChild, GetWindowTextLength, IsWindow, IsWindowVisible, MoveWindow, CloseWindow, OpenIcon, SetWindowPlacement, SetWindowText, ShowWindow, WindowFromPoint реализовать предложенные задания. Нужные API-функции подобрать с применением MSDN.
На MASM
Прикрепляю пример недоделанной программы

Приложение:
.386
.model flat,stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
DialogBox proto :DWORD,:DWORD,:DWORD,:DWORD

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.data
AppName db "Не новое название",0
wnd db "Новое приложение", 0
cntx db "Изменить название?", 0
.code

start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine,
SW_SHOWDEFAULT
;запуск WinMain и после ее завершения остановка
;процесса

invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,
CmdLine:LPSTR,CmdShow:DWORD

LOCAL wc:WNDCLASSEX
; WNDCLASSEX аналогична WNDCLASS за исключением 2
;полей cbSize – размера структуры в байтах и hIconSm –
;дескриптора пиктограммы приложения размером 16х16,
;используемой в заголовке окна данного класса
LOCAL msg:MSG ;Сообщения передаются в приложение с помощью специальной структуры MSG, включающей 6 полей
LOCAL hwnd:HWND
LOCAL X:DWORD
LOCAL Y:DWORD
mov X,500
mov Y,350
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,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET AppName ; имя класса окна
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 CreateWindowEx,NULL,ADDR AppName, ADDR AppName,
WS_OVERLAPPEDWINDOW,200, 200, X,Y, ; Стиль, х и y координаты левого верхнего угла,
ширина и высота окна
NULL, NULL,hInst,NULL ; Дескриптор родительского окна, ссылка на меню, дескриптор
экземпляра приложения, адрес доп. данных
mov hwnd,eax ; сохраним дискриптор окна
invoke ShowWindow, hwnd,SW_SHOWNORMAL ; Покажем окно на экране
invoke UpdateWindow, hwnd
; цикл обработки сообщений
.WHILE TRUE
begin: 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
;проверка uMsg
WndProc endp
end start

Обсуждение

давно
Посетитель
399275
16
18.11.2017, 12:03
общий
Разобралась сама, помощь больше не требуется
давно
Посетитель
7438
7205
18.11.2017, 12:14
общий
Адресаты:
Ай, умница Поздравляю
Поверьте, это самый лучший способ чему-то научиться - разобраться самому,
и чем больше "роешь землю", тем лучше запоминается...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа