Сворачивание и разворачивание окон - Assembler
Формулировка задачи:
Здравствуйте!!! Мне нужно вывести на экран три окна. Щелчок левой кнопкой в правой половине любого окна приводит к свертке в пиктограмму остальных. Обратное разворачивание, если они уже свернуты, осуществить при
нажатии любой цифровой клавиши. Я пишу на 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 .data WinName1 db "Окно №1",0 WinName2 db "Окно №2",0 WinName3 db "Окно №3",0 X1 DWORD ? Y1 DWORD ? X2 DWORD ? Y2 DWORD ? X3 DWORD ? Y3 DWORD ? hWnd1 HWND ? hWnd2 HWND ? hWnd3 HWND ? hInstance HINSTANCE ? CommandLine LPSTR ? .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 wc1:WNDCLASSEX LOCAL wc2:WNDCLASSEX LOCAL wc3:WNDCLASSEX ; WNDCLASSEX аналогична WNDCLASS за исключением 2 ;полей cbSize – размера структуры в байтах и hIconSm – ;дескриптора пиктограммы приложения размером 16х16, ;используемой в заголовке окна данного класса LOCAL msg:MSG mov X1,500 mov Y1,350 ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ окно №1 ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc1.cbSize,SIZEOF WNDCLASSEX mov wc1.style, CS_HREDRAW or CS_VREDRAW; or CS_DBLCLKS ; стиль класса обеспечивает реакцию на двойные щелчки ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ задание стиля окна №1¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc1.lpfnWndProc, OFFSET WndProc mov wc1.cbClsExtra,NULL mov wc1.cbWndExtra,NULL push hInstance pop wc1.hInstance mov wc1.hbrBackground,COLOR_BTNFACE+1 mov wc1.lpszMenuName,NULL mov wc1.lpszClassName,OFFSET WinName1 invoke LoadIcon,NULL,IDI_APPLICATION mov wc1.hIcon,eax mov wc1.hIconSm,eax invoke LoadCursor,NULL,IDC_CROSS mov wc1.hCursor,eax ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« invoke RegisterClassEx, addr wc1 mov X2,200 mov Y2,150 ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ окно №2 ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc2.cbSize,SIZEOF WNDCLASSEX mov wc2.style, CS_HREDRAW or CS_VREDRAW; or CS_DBLCLKS ; стиль класса обеспечивает реакцию на двойные щелчки ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ задание стиля окна №2¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc2.lpfnWndProc, OFFSET WndProc mov wc2.cbClsExtra,NULL mov wc2.cbWndExtra,NULL push hInstance pop wc2.hInstance mov wc2.hbrBackground,COLOR_BTNFACE+1 mov wc2.lpszMenuName,NULL mov wc2.lpszClassName,OFFSET WinName2 invoke LoadIcon,NULL,IDI_APPLICATION mov wc2.hIcon,eax mov wc2.hIconSm,eax invoke LoadCursor,NULL,IDC_CROSS mov wc2.hCursor,eax ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« invoke RegisterClassEx, addr wc2 mov X3,250 mov Y3,200 ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ окно №3 ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc3.cbSize,SIZEOF WNDCLASSEX mov wc3.style, CS_HREDRAW or CS_VREDRAW; or CS_DBLCLKS ; стиль класса обеспечивает реакцию на двойные щелчки ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ задание стиля окна №3¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ mov wc3.lpfnWndProc, OFFSET WndProc mov wc3.cbClsExtra,NULL mov wc3.cbWndExtra,NULL push hInstance pop wc3.hInstance mov wc3.hbrBackground,COLOR_BTNFACE+1 mov wc3.lpszMenuName,NULL mov wc3.lpszClassName,OFFSET WinName3 invoke LoadIcon,NULL,IDI_APPLICATION mov wc3.hIcon,eax mov wc3.hIconSm,eax invoke LoadCursor,NULL,IDC_CROSS mov wc3.hCursor,eax ;*********************************************************************************** invoke RegisterClassEx, addr wc3 INVOKE CreateWindowEx,NULL,ADDR WinName1, ADDR WinName1, WS_OVERLAPPEDWINDOW,200, 200, X1,Y1,NULL, NULL,hInst,NULL mov hWnd1,eax invoke ShowWindow, hWnd1,SW_SHOWNORMAL invoke UpdateWindow, hWnd1 INVOKE CreateWindowEx,NULL,ADDR WinName2, ADDR WinName2, WS_OVERLAPPEDWINDOW,600, 300, X2,Y2,NULL, NULL,hInst,NULL mov hWnd2,eax invoke ShowWindow, hWnd2,SW_SHOWNORMAL invoke UpdateWindow, hWnd2 INVOKE CreateWindowEx,NULL,ADDR WinName3, ADDR WinName3, WS_OVERLAPPEDWINDOW,650, 400, X3,Y3,NULL, NULL,hInst,NULL mov hWnd3,eax invoke ShowWindow, hWnd3,SW_SHOWNORMAL invoke UpdateWindow, hWnd3 .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
Решение задачи: «Сворачивание и разворачивание окон»
textual
Листинг программы
WndProc proc uses ebx edi esi hwnd:dword,msg:dword,wparam:dword,lparam:dword local pt:POINT local rect:RECT
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д