Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Misha_cpp
Заблокирован
1

Создание меню в ассемблере

13.04.2014, 18:08. Просмотров 1708. Ответов 1
Метки нет (Все метки)

Здравствуйте . Как создать меню программы при нажатии на левую кнопку мыши . Просто меню я могу создать :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.386               ; директива визначення типу мікропроцесора
.model flat,stdcall                     ; завдання лінійної моделі пам’яті
                              ; та угоди ОС Windows
option casemap:none          ; відмінність малих та великих літер
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
IDM_NEW  equ 1
IDM_SAVE  equ 2
IDM_COPY  equ 3
IDM_PAST   equ 4 
IDM_ABOUT  equ 5
IDM_TASK    equ 6
.data                         ; директива визначення даних
ClassName db "SimpleWinClass",0
AppName  db "Окно с параметрами",0
MenuName db "FirstMenu",0
Hello_string db "Создать окно с такими параметрами:",10,13
str1 db "- пиктограмма '!';",10,13
str2 db "- курсор в виде перечёркнутого круга;",10,13
str3 db "- у окна есть горизонтальная полоса прокрутки;",10,13
str4 db "- вид окна функции ShowWindow:окно отображается в его текущих размерах и позиции;",10,13
str5 db "- окно розмещено в левом верхнем углу;",10,13
str6 db "- размеры окна: 250 на 450 точек.",0
About_string db "Выполнил:   ",10,13
str7 db " e-mail: ",10,13,0
wc  WNDCLASSEX  <>
msg MSG       <>
hwnd HWND     ?
hInstance HINSTANCE ?
.code                              ; директива початку сегмента команд
start:                         ; мітка початку програми з ім’ям start
invoke  GetModuleHandle, NULL             ; отримання дескриптора програми
mov   hInstance,eax                          ; збереження дескриптора програми
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_WINDOW+1        ; колір вікна
mov     wc.lpszMenuName,OFFSET MenuName  ;;; ім’я ресурсу меню
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  CreateWindowEx,NULL, ADDR ClassName,\
        ADDR AppName, WS_OVERLAPPEDWINDOW or WS_HSCROLL,\
        0, 0,\                ; гориз. та верт. координати вікна
        250,450,NULL,NULL,\   ; ширина та висота вікна
        hInstance,NULL
mov     hwnd,eax
invoke  ShowWindow, hwnd,SW_SHOW     ;; видимість вікна
invoke SetScrollRange, hwnd,SB_HORZ,0,10,TRUE
.WHILE TRUE                                                       ; поки істинне, то
   invoke  GetMessage, ADDR msg,NULL,0,0    ; читання повідомлення
     or eax, eax        ; формування ознак
     jz Quit            ; перейти на мітку Quit, якщо еах = 0 
   invoke DispatchMessage, ADDR msg              ; відправка на обслуговування 
                                        ; до WndProc proc
.ENDW               ; закінчення циклу оброблення повідомлень
Quit:
mov     eax,msg.wParam
invoke ExitProcess, eax ; повернення керування ОС та визволення ресурсів
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM,
             lParam:LPARAM
.IF uMsg==WM_DESTROY           ; якщо є повідомлення про знищення вікна
  invoke PostQuitMessage,NULL  ; передача повідомлення WM_Quit
.ELSEIF uMsg==WM_COMMAND       ; якщо є повідомлення від меню
    mov eax,wParam
   .IF ax==IDM_TASK          ; якщо є повідомлення IDM_HELLO
       invoke  MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
   .ELSEIF ax==IDM_ABOUT       ; якщо є повідомлення IDM_ABOUT
       invoke  MessageBox,NULL,ADDR About_string, OFFSET AppName, MB_OK
   .ELSE
        invoke DestroyWindow,hWnd          ; знищення вікна
   .ENDIF
.ELSE
   invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; стандартна обробка 
                             ; повідомлень, які явно не оброблюються
      ret    ; повернення з процедури
.ENDIF
xor    eax,eax
ret              ; повернення з процедури
WndProc endp     ; закінчення процедури WndProc
end start        ; закінчення програми
Но у меня не получается сделать это так , что меню выводилось только после нажатие на кнопку . Как в таком случае нужно обрабатывать сообщение WMLBUTTON?
Помогите, пожалуйста .

Добавлено через 1 час 59 минут
Никто не знает ? Как это возможно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 18:08
Ответы с готовыми решениями:

Файлы ресурсов и меню в ассемблере
Здравствуйте. У меня есть программа, которая выводит на экран кардиоиду. В...

Создание окна в ассемблере
;Сегмент кода. _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: ...

Создание загрузчика на ассемблере.
В общем, есть у меня такая задача: разработать загрузчик, позволяющий загружать...

Создание окна на ассемблере
в MASM реализую создание окна. что-то ругается он очень на мою писанину. Код...

Создание класса на Ассемблере.
Gruess Gott! Расскажите, пожалуйста, как реализовать класс на ассемблере и...

1
Mikl___
Автор FAQ
11912 / 6199 / 575
Регистрация: 11.11.2010
Сообщений: 11,209
14.04.2014, 04:01 2
Misha_cpp,
http://www.cyberforum.ru/assembler-articles/thread751124.html http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow "Win32 API. Урок 8f. «Плавающее» меню" с готовой программой
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 04:01

for на ассемблере
for(int i=0;i&lt;=2;i++) { CAN_Frame = Tail; // записываем в CAN_Frame...

Цикл на ассемблере
.model tiny .data mas db 'K','$', 'u', '$', 'c', '$' .code .startup mov...

Таблицы в Ассемблере...
Здравствуйте, никак не могу совладать с ассемблером, помогите пожалуйста с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru