Смекни!
smekni.com

Создать меню без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu (стр. 2 из 2)

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

154. m2: cmp ax,IDM_QUIT

155. jne m1

156. push 0

157. call PostQuitMessage

158. m1: mov eax,0

159. jmp finish

160. wmcreate:

161. mov eax, 0

162. jmp finish

163. defwndproc:

164. push [lparam]

165. push [wparam]

166. push [wmsg]

167. push [hwnd]

168. call DefWindowProcA

169. jmp finish

170. wmdestroy:

171. push L 0

172. call PostQuitMessage

173. mov eax, 0

174. jmp finish

175. wmsize:

176. mov eax, 0

177. jmp finish

178. wmpaint:

179. push offset lppaint

180. push [hwnd]

181. call BeginPaint

182. mov [hDC],eax

183. push offset lppaint

184. push [hwnd]

185. call EndPaint

186. mov eax,0

187. jmp finish

188. finish:

189. ret

190. WndProc endp

191. ;---------------------------------

192. public WndProc

193. end start ; конец программы

рис1. Окно программы

Заключение

Моя задача состояла в создании программы без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu. Это приложение не выполняет никакой полезной работы и служит для демонстрации некоторых возможностей системы в организации интерфейса пользователя.

Библиографический список

1. Зубков С.В. Assembler. Для DOS Windows и Unix. М.: ДМК, 1999

2. Пустоваров В.И. АССЕМБЛЕР. Программирование и анализ корректности машинных программ.

3. Применение TURBO ASSEMBLER для программирования ПЭВМ. Часть1,2.: Методические указания к лабораторному практикуму по дисциплине : «Системное программное обеспечение» / Составитель В.П.Кулюкин. Екатеринбург: изд. ИПК УГТУ, 2000.