Создать меню без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu
Рефераты >> Программирование и компьютеры >> Создать меню без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu

4. include win32.inc ; файл описания структур и констант

5. L equ <LARGE> ; последовательности символов LARGE,

; являющейся именем операции, объявляющей

; следующий за ней операнд 32-разрядным,

; присваивается имя L

6. IDM_QUIT equ 100

7. IDM_ABOUT equ 101

8. MF_ENABLED equ 0

9. MF_POPUP equ 10h

10. MF_OWNERDRAW equ 100h

;Функции Win32 API, используемые программой

11. extrn BeginPaint :PROC

12. extrn CreateWindowExA :PROC

13. extrn DefWindowProcA :PROC

14. extrn DispatchMessageA :PROC

15. extrn EndPaint :PROC

16. extrn ExitProcess :PROC

17. extrn GetMessageA :PROC

18. extrn GetModuleHandleA :PROC

19. extrn LoadCursorA :PROC

20. extrn LoadIconA :PROC

21. extrn RegisterClassA :PROC

22. extrn PostQuitMessage :PROC

23. extrn ShowWindow :PROC

24. extrn TranslateMessage :PROC

25. extrn UpdateWindow :PROC

26. extrn CreateMenu :PROC

27. extrn MessageBoxA :PROC

28. extrn AppendMenuA :PROC

29. extrn DrawMenuBar :PROC

30. extrn CreatePopupMenu :PROC

31. .data ; переопределенное имя, означающее начало сегмента

; данных

32. newhwnd dd 0

33. lppaint PAINTSTRUCT <?>

34. msg MSGSTRUCT <?>

35. wc WNDCLASS <?>

36. hInst dd 0

37. fl dw 0

38. szTitleName db 'Этонашеокно',0

39. szClassName db 'ASMCLASS32',0

40. szHello db 'Привет!',0

41. szAppName db 'Сообщение',0

42. hMenu dd 0

43. hsubmenu dd 0

44. item1 db 'Меню',0

45. item2 db 'Выход',0

46. item3 db 'Возврат',0

47. .code ; переопределенное имя, означающее начало

; сегмента кода

48. start:

49. push L 0

50. call GetModuleHandleA

51. mov [hInst], eax

;инициализация структуры WndClass

52. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW +

CS_GLOBALCLASS

53. mov [wc.clsLpfnWndProc], offset WndProc

54. mov [wc.clsCbClsExtra], 0

55. mov [wc.clsCbWndExtra], 0

56. mov eax, [hInst]

57. mov [wc.clsHInstance], eax

58. push L IDI_APPLICATION

59. push L 0

60. call LoadIconA

61. mov [wc.clsHIcon], eax

62. push L IDC_ARROW

63. push L 0

64. call LoadCursorA

65. mov [wc.clsHCursor], eax

66. mov [wc.clsHbrBackground], COLOR_WINDOW + 1

67. mov dword ptr [wc.clsLpszMenuName],0

68. mov dword ptr [wc.clsLpszClassName], offset szClassName

69. push offset wc

70. call RegisterClassA

71. call CreateMenu

72. mov [hMenu],eax

73. push L 0 ; lpParam

74. push [hInst] ; hInstance

75. push [hMenu] ; menu

76. push L 0 ; parent hwnd

77. push L CW_USEDEFAULT ; height

78. push L CW_USEDEFAULT ; width

79. push L CW_USEDEFAULT ; y

80. push L CW_USEDEFAULT ; x

81. push L WS_OVERLAPPEDWINDOW ; Style

82. push offset szTitleName ; Title string

83. push offset szClassName ; Class name

84. push L 0 ; extra style

85. call CreateWindowExA

86. mov [newhwnd], eax

87. call CreatePopupMenu

88. mov [hsubmenu], eax

89. push offset item2

90. push L IDM_QUIT

91. push 0

92. push eax

93. call AppendMenuA

94. push offset item3

95. push L IDM_ABOUT

96. push 0

97. push [hsubmenu] ;eax

98. call AppendMenuA

99. push offset item1

100. push [hsubmenu]

101. push MF_POPUP

102. push [hMenu]

103. call AppendMenuA

104. nop

105. push L SW_SHOWNORMAL

106. push [newhwnd]

107. call ShowWindow

108. push [newhwnd]

109. call UpdateWindow

110. push [newhwnd]

111. call DrawMenuBar

112. msg_loop:

113. push L 0

114. push L 0

115. push L 0

116. push offset msg

117. call GetMessageA

118. cmp ax, 0

119. je end_loop

120. push offset msg

121. call TranslateMessage

122. push offset msg

123. call DispatchMessageA

124. jmp msg_loop

125. end_loop:

126. push [msg.msWPARAM]

127. call ExitProcess

128. ;----Оконнаяпроцедура----

129. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\

130. wparam:DWORD, lparam:DWORD

131. LOCAL hDC:DWORD

132. cmp [wmsg], WM_DESTROY

133. je wmdestroy

134. cmp [wmsg], WM_SIZE

135. je wmsize

136. cmp [wmsg], WM_CREATE

137. je wmcreate

138. cmp [wmsg],WM_PAINT

139. je wmpaint

140. ;**************************************

141. cmp [wmsg],WM_COMMAND

142. je wmcommand

143. ;**************************************

144. jmp defwndproc

145. wmcommand:

146. mov eax,lparam

147. cmp ax,0

148. jne m1

149. mov eax,wparam

150. cmp ax,IDM_ABOUT

151. jne m2

152. call MessageBoxA,0,offset szHello,offset szAppName,MB_OK

153. jmp m1


Страница: