win 0.3.17 → 0.3.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +28 -0
- data/README.rdoc +5 -3
- data/VERSION +1 -1
- data/lib/win/dde.rb +138 -138
- data/lib/win/error.rb +26 -26
- data/lib/win/gui.rb +2 -0
- data/lib/win/gui/dialog.rb +9 -9
- data/lib/win/gui/input.rb +8 -8
- data/lib/win/gui/menu.rb +740 -0
- data/lib/win/gui/message.rb +44 -44
- data/lib/win/gui/window.rb +8 -8
- data/lib/win/library.rb +6 -6
- data/spec/spec_helper.rb +25 -3
- data/spec/win/gui/dialog_spec.rb +0 -16
- data/spec/win/gui/input_spec.rb +6 -10
- data/spec/win/gui/menu_spec.rb +291 -0
- data/spec/win/gui/window_spec.rb +8 -8
- data/spec/win/library_spec.rb +7 -14
- metadata +6 -5
- data/spec/test_apps/locknote/LockNote.exe +0 -0
data/lib/win/error.rb
CHANGED
@@ -882,7 +882,7 @@ module Win
|
|
882
882
|
# to an array of values that represent the arguments. This flag cannot be used with 64-bit integer
|
883
883
|
# values. If you are using a 64-bit integer, you must use the va_list structure.
|
884
884
|
# - FORMAT_MESSAGE_FROM_HMODULE - The lpSource parameter is a module handle containing the message-table
|
885
|
-
# resource(s) to search. If this lpSource handle is NULL, the current process's
|
885
|
+
# resource(s) to search. If this lpSource handle is NULL, the current process's App image file
|
886
886
|
# will be searched. This flag cannot be used with FORMAT_MESSAGE_FROM_STRING. If the module has no
|
887
887
|
# message table resource, the function fails with ERROR_RESOURCE_TYPE_NOT_FOUND.
|
888
888
|
# - FORMAT_MESSAGE_FROM_STRING - The lpSource parameter is a pointer to a null-terminated string that
|
@@ -892,7 +892,7 @@ module Win
|
|
892
892
|
# - FORMAT_MESSAGE_FROM_SYSTEM - The function should search the system message-table resource(s) for
|
893
893
|
# the requested message. If this flag is specified with FORMAT_MESSAGE_FROM_HMODULE, the function
|
894
894
|
# searches the system message table if the message is not found in the module specified by lpSource.
|
895
|
-
# This flag cannot be used with FORMAT_MESSAGE_FROM_STRING. If this flag is specified, an
|
895
|
+
# This flag cannot be used with FORMAT_MESSAGE_FROM_STRING. If this flag is specified, an App
|
896
896
|
# can pass the result of the GetLastError function to retrieve the message text for a system error.
|
897
897
|
# - FORMAT_MESSAGE_IGNORE_INSERTS - Insert sequences in the message definition are to be ignored and
|
898
898
|
# passed through to the output buffer unchanged. This flag is useful for fetching a message for later
|
@@ -1027,7 +1027,7 @@ module Win
|
|
1027
1027
|
# GetLastError Function
|
1028
1028
|
# Retrieves the calling thread's last-error code value. The last-error code is maintained on a
|
1029
1029
|
# per-thread basis. Multiple threads do not overwrite each other's last-error code.
|
1030
|
-
# Visual Basic:
|
1030
|
+
# Visual Basic: Apps should call err.LastDllError instead of GetLastError.
|
1031
1031
|
#
|
1032
1032
|
# [*Syntax*] DWORD WINAPI GetLastError( void );
|
1033
1033
|
#
|
@@ -1053,9 +1053,9 @@ module Win
|
|
1053
1053
|
# that can be returned by each function. There are also many functions whose documentation does not
|
1054
1054
|
# include even a partial list of error codes that can be returned.
|
1055
1055
|
# Error codes are 32-bit values (bit 31 is the most significant bit). Bit 29 is reserved for
|
1056
|
-
#
|
1057
|
-
# code for your
|
1058
|
-
# an
|
1056
|
+
# App-defined error codes; no system error code has this bit set. If you are defining an error
|
1057
|
+
# code for your App, set this bit to one. That indicates that the error code has been defined by
|
1058
|
+
# an App, and ensures that your error code does not conflict with any error codes defined by the
|
1059
1059
|
# system.
|
1060
1060
|
# To convert a system error into an HRESULT value, use the HRESULT_FROM_WIN32 macro.
|
1061
1061
|
# ---
|
@@ -1083,16 +1083,16 @@ module Win
|
|
1083
1083
|
# - The last-error code is kept in thread local storage so that multiple threads do not overwrite each
|
1084
1084
|
# other's values.
|
1085
1085
|
# - This function is intended primarily for use by dynamic-link libraries (DLL). A DLL can provide the
|
1086
|
-
#
|
1086
|
+
# Apps that are using it with additional diagnostic information by calling this function after
|
1087
1087
|
# an error occurs. Most functions call SetLastError or SetLastErrorEx only when they fail. However, some
|
1088
1088
|
# system functions call SetLastError or SetLastErrorEx under conditions of success; those cases are
|
1089
1089
|
# noted in each function's documentation.
|
1090
|
-
# -
|
1090
|
+
# - Apps can optionally retrieve the value set by this function by using the GetLastError function
|
1091
1091
|
# immediately after a function fails.
|
1092
1092
|
# - Error codes are 32-bit values (bit 31 is the most significant bit). Bit 29 is reserved for
|
1093
|
-
#
|
1094
|
-
# code for your
|
1095
|
-
#
|
1093
|
+
# App-defined error codes; no system error code has this bit set. If you are defining an error
|
1094
|
+
# code for your App, set this bit to indicate that the error code has been defined by your
|
1095
|
+
# App and to ensure that your error code does not conflict with any system-defined error codes.
|
1096
1096
|
# ---
|
1097
1097
|
# <b>Enhanced (snake_case) API: </b>
|
1098
1098
|
#
|
@@ -1116,16 +1116,16 @@ module Win
|
|
1116
1116
|
# The last-error code is kept in thread local storage so that multiple threads do not overwrite each
|
1117
1117
|
# other's values.
|
1118
1118
|
# This function is intended primarily for use by dynamic-link libraries (DLL). A DLL can provide the
|
1119
|
-
#
|
1119
|
+
# Apps that are using it with additional diagnostic information by calling this function after
|
1120
1120
|
# an error occurs. Most functions call SetLastError or SetLastErrorEx only when they fail. However, some
|
1121
1121
|
# system functions call SetLastError or SetLastErrorEx under conditions of success; those cases are
|
1122
1122
|
# noted in each function's documentation.
|
1123
|
-
#
|
1123
|
+
# Apps can optionally retrieve the value set by this function by using the GetLastError function
|
1124
1124
|
# immediately after a function fails.
|
1125
1125
|
# Error codes are 32-bit values (bit 31 is the most significant bit). Bit 29 is reserved for
|
1126
|
-
#
|
1127
|
-
# code for your
|
1128
|
-
#
|
1126
|
+
# App-defined error codes; no system error code has this bit set. If you are defining an error
|
1127
|
+
# code for your App, set this bit to indicate that the error code has been defined by the
|
1128
|
+
# App and to ensure that your error code does not conflict with any system-defined error codes.
|
1129
1129
|
#
|
1130
1130
|
# :call-seq:
|
1131
1131
|
# set_last_error_ex(err_code, dw_type)
|
@@ -1145,19 +1145,19 @@ module Win
|
|
1145
1145
|
# SEM_FAILCRITICALERRORS:: The system does not display the critical-error-handler message box. Instead,
|
1146
1146
|
# the system sends the error to the calling process.
|
1147
1147
|
# SEM_NOALIGNMENTFAULTEXCEPT:: The system automatically fixes memory alignment faults and makes them
|
1148
|
-
# invisible to the
|
1148
|
+
# invisible to the App. It does this for the calling process and
|
1149
1149
|
# any descendant processes. This feature is only supported by certain
|
1150
1150
|
# processor architectures. For more information, see the Remarks section.
|
1151
1151
|
# After this value is set for a process, subsequent attempts to clear the
|
1152
1152
|
# value are ignored.
|
1153
1153
|
# SEM_NOGPFAULTERRORBOX:: The system does not display the general-protection-fault message box. This
|
1154
|
-
# flag should only be set by debugging
|
1154
|
+
# flag should only be set by debugging Apps that handle general
|
1155
1155
|
# protection (GP) faults themselves with an exception handler.
|
1156
1156
|
# SEM_NOOPENFILEERRORBOX:: The system does not display a message box when it fails to find a file.
|
1157
1157
|
# Instead, the error is returned to the calling process.
|
1158
1158
|
# ---
|
1159
1159
|
# *Remarks*:
|
1160
|
-
# Each process has an associated error mode that indicates to the system how the
|
1160
|
+
# Each process has an associated error mode that indicates to the system how the App is going to
|
1161
1161
|
# respond to serious errors. A child process inherits the error mode of its parent process.
|
1162
1162
|
# To change the error mode for the process, use the SetErrorMode function.
|
1163
1163
|
# ------
|
@@ -1180,13 +1180,13 @@ module Win
|
|
1180
1180
|
# SEM_FAILCRITICALERRORS:: The system does not display the critical-error-handler message box. Instead,
|
1181
1181
|
# the system sends the error to the calling process.
|
1182
1182
|
# SEM_NOALIGNMENTFAULTEXCEPT:: The system automatically fixes memory alignment faults and makes them
|
1183
|
-
# invisible to the
|
1183
|
+
# invisible to the App. It does this for the calling process and any
|
1184
1184
|
# descendant processes. This feature is only supported by certain processor
|
1185
1185
|
# architectures. For more information, see the Remarks section.
|
1186
1186
|
# After this value is set for a process, subsequent attempts to clear the
|
1187
1187
|
# value are ignored.
|
1188
1188
|
# SEM_NOGPFAULTERRORBOX:: The system does not display the general-protection-fault message box. This flag
|
1189
|
-
# should only be set by debugging
|
1189
|
+
# should only be set by debugging Apps that handle general protection (GP)
|
1190
1190
|
# faults themselves with an exception handler.
|
1191
1191
|
# SEM_NOOPENFILEERRORBOX:: The system does not display a message box when it fails to find a file. Instead,
|
1192
1192
|
# the error is returned to the calling process.
|
@@ -1194,12 +1194,12 @@ module Win
|
|
1194
1194
|
# *Returns*:: The return value is the previous state of the error-mode bit flags.
|
1195
1195
|
# ---
|
1196
1196
|
# *Remarks*:
|
1197
|
-
# Each process has an associated error mode that indicates to the system how the
|
1197
|
+
# Each process has an associated error mode that indicates to the system how the App is going to
|
1198
1198
|
# respond to serious errors. A child process inherits the error mode of its parent process. To retrieve
|
1199
1199
|
# the process error mode, use the GetErrorMode function.
|
1200
|
-
# Because the error mode is set for the entire process, you must ensure that multi-threaded
|
1200
|
+
# Because the error mode is set for the entire process, you must ensure that multi-threaded Apps
|
1201
1201
|
# do not set different error-mode flags. Doing so can lead to inconsistent error handling.
|
1202
|
-
# The system does not make alignment faults visible to an
|
1202
|
+
# The system does not make alignment faults visible to an App on all processor architectures.
|
1203
1203
|
# Therefore, specifying SEM_NOALIGNMENTFAULTEXCEPT is not an error on such architectures, but the system
|
1204
1204
|
# is free to silently ignore the request. This means that code sequences such as the following are not
|
1205
1205
|
# always valid on x86 computers:
|
@@ -1208,9 +1208,9 @@ module Win
|
|
1208
1208
|
# fuOldErrorMode = SetErrorMode(0);
|
1209
1209
|
# ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);
|
1210
1210
|
#
|
1211
|
-
# Itanium:: An
|
1211
|
+
# Itanium:: An App must explicitly call SetErrorMode with SEM_NOALIGNMENTFAULTEXCEPT to have the
|
1212
1212
|
# system automatically fix alignment faults. The default setting is for the system to make alignment
|
1213
|
-
# faults visible to an
|
1213
|
+
# faults visible to an App.
|
1214
1214
|
# Visual Studio 2005:: When declaring a pointer to a structure that may not have aligned data, you can use
|
1215
1215
|
# __unaligned keyword to indicate that the type must be read one byte at a time. For more
|
1216
1216
|
# information, see Windows Data Alignment.
|
data/lib/win/gui.rb
CHANGED
@@ -2,6 +2,7 @@ require 'win/gui/window'
|
|
2
2
|
require 'win/gui/input'
|
3
3
|
require 'win/gui/message'
|
4
4
|
require 'win/gui/dialog'
|
5
|
+
require 'win/gui/menu'
|
5
6
|
|
6
7
|
module Win
|
7
8
|
|
@@ -12,5 +13,6 @@ module Win
|
|
12
13
|
include Win::Gui::Input
|
13
14
|
include Win::Gui::Message
|
14
15
|
include Win::Gui::Dialog
|
16
|
+
include Win::Gui::Menu
|
15
17
|
end
|
16
18
|
end
|
data/lib/win/gui/dialog.rb
CHANGED
@@ -71,7 +71,7 @@ module Win
|
|
71
71
|
|
72
72
|
# The user must respond to the message box before continuing work in the window identified by the hWnd
|
73
73
|
# parameter. However, the user can move to the windows of other threads and work in those windows.
|
74
|
-
# Depending on the hierarchy of windows in the
|
74
|
+
# Depending on the hierarchy of windows in the App, the user may be able to move to other
|
75
75
|
# windows within the thread. All child windows of the parent of the message box are automatically
|
76
76
|
# disabled, but pop-up windows are not.
|
77
77
|
# MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor MB_TASKMODAL is specified.
|
@@ -82,7 +82,7 @@ module Win
|
|
82
82
|
# windows other than those associated with hWnd.
|
83
83
|
MB_SYSTEMMODAL = 0x00001000
|
84
84
|
# Same as MB_APPLMODAL except that all the top-level windows belonging to the current thread are
|
85
|
-
# disabled if the hWnd parameter is NULL. Use this flag when the calling
|
85
|
+
# disabled if the hWnd parameter is NULL. Use this flag when the calling App or library does not
|
86
86
|
# have a window handle available but still needs to prevent input to other windows in the calling thread
|
87
87
|
# without suspending other threads.
|
88
88
|
MB_TASKMODAL = 0x00002000
|
@@ -145,10 +145,10 @@ module Win
|
|
145
145
|
ErrorIcon = 0x14 # ID of Error Icon (this dialog informs about some Error)
|
146
146
|
|
147
147
|
##
|
148
|
-
# DialogProc is an
|
148
|
+
# DialogProc is an App-defined callback function used with the CreateDialog and DialogBox
|
149
149
|
# families of functions. It processes messages sent to a modal or modeless dialog box. The DLGPROC
|
150
150
|
# type defines a pointer to this callback function. DialogProc is a placeholder for the
|
151
|
-
#
|
151
|
+
# App-defined function name.
|
152
152
|
#
|
153
153
|
# [*Syntax*] INT_PTR CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
154
154
|
#
|
@@ -215,7 +215,7 @@ module Win
|
|
215
215
|
# :call-seq:
|
216
216
|
# control_handle = [get_]dlg_item( dialog_handle, control_id )
|
217
217
|
#
|
218
|
-
function :GetDlgItem, [:ulong, :int], :ulong,
|
218
|
+
function :GetDlgItem, [:ulong, :int], :ulong, fails: 0
|
219
219
|
|
220
220
|
##
|
221
221
|
# The GetDlgCtrlID function retrieves the identifier of the specified control. In other words,
|
@@ -232,7 +232,7 @@ module Win
|
|
232
232
|
# ---
|
233
233
|
# *Remarks*:
|
234
234
|
# GetDlgCtrlID accepts child window handles as well as handles of controls in dialog boxes. An
|
235
|
-
#
|
235
|
+
# App sets the identifier for a child window when it creates the window by assigning the
|
236
236
|
# identifier value to the hmenu parameter when calling the CreateWindow or CreateWindowEx function.
|
237
237
|
# Although GetDlgCtrlID may return a value if hwndCtl is a handle to a top-level window, top-level
|
238
238
|
# windows cannot have identifiers and such a return value is never valid.
|
@@ -245,13 +245,13 @@ module Win
|
|
245
245
|
# :call-seq:
|
246
246
|
# control_id = get_dlg_ctrl_id(control_handle)
|
247
247
|
#
|
248
|
-
function :GetDlgCtrlID, [:HWND], :int,
|
248
|
+
function :GetDlgCtrlID, [:HWND], :int, fails: 0
|
249
249
|
|
250
250
|
##
|
251
251
|
# MessageBox Function
|
252
252
|
# --------------------------------------------------------------------------------
|
253
253
|
# The MessageBox function creates, displays, and operates a message box. The message box contains an
|
254
|
-
#
|
254
|
+
# App-defined message and title, along with any combination of predefined icons and push
|
255
255
|
# buttons.
|
256
256
|
#
|
257
257
|
# [*Syntax*] int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
|
@@ -324,7 +324,7 @@ module Win
|
|
324
324
|
# :call-seq:
|
325
325
|
# selected_item = message_box(owner_handle, text, caption, type)
|
326
326
|
#
|
327
|
-
function :MessageBox, [:HWND, :LPCTSTR, :LPCTSTR, :UINT], :int,
|
327
|
+
function :MessageBox, [:HWND, :LPCTSTR, :LPCTSTR, :UINT], :int, fails: 0,
|
328
328
|
&->(api, handle, text, caption, type=MB_OK) {
|
329
329
|
text_pointer = FFI::MemoryPointer.from_string(text)
|
330
330
|
caption_pointer = FFI::MemoryPointer.from_string(caption)
|
data/lib/win/gui/input.rb
CHANGED
@@ -153,7 +153,7 @@ module Win
|
|
153
153
|
# <b>NO Return Value</b>
|
154
154
|
# ---
|
155
155
|
# *Remarks*:
|
156
|
-
# - An
|
156
|
+
# - An App can simulate a press of the PRINTSCRN key in order to obtain a screen snapshot
|
157
157
|
# and save it to the clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT.
|
158
158
|
#
|
159
159
|
# - Windows NT/2000/XP: The keybd_event function can toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK keys.
|
@@ -201,7 +201,7 @@ module Win
|
|
201
201
|
# - If flags is not MOUSEEVENTF_WHEEL, MOUSEEVENTF_XDOWN, or MOUSEEVENTF_XUP, then data should be zero.
|
202
202
|
# XBUTTON1 - Set if the first X button was pressed or released.
|
203
203
|
# XBUTTON2 - Set if the second X button was pressed or released.
|
204
|
-
# dwExtraInfo:: <in> Specifies an additional value associated with the mouse event. An
|
204
|
+
# dwExtraInfo:: <in> Specifies an additional value associated with the mouse event. An App
|
205
205
|
# calls GetMessageExtraInfo to obtain this extra information.
|
206
206
|
# <b>NO Return Value</b>
|
207
207
|
# ---
|
@@ -214,8 +214,8 @@ module Win
|
|
214
214
|
# - If the MOUSEEVENTF_ABSOLUTE value is not specified, dx and dy specify relative motions from when the
|
215
215
|
# last mouse event was generated (the last reported position). Positive values mean the mouse moved right
|
216
216
|
# (or down); negative values mean the mouse moved left (or up). Relative mouse motion is subject to the
|
217
|
-
# settings for mouse speed and acceleration level. An end user sets these values using the Mouse
|
218
|
-
# in Control Panel. An
|
217
|
+
# settings for mouse speed and acceleration level. An end user sets these values using the Mouse App
|
218
|
+
# in Control Panel. An App obtains and sets these values with the SystemParametersInfo function.
|
219
219
|
# - The system applies two tests to the specified relative mouse motion when applying acceleration. If the
|
220
220
|
# specified distance along either the x or y axis is greater than the first mouse threshold value, and the
|
221
221
|
# mouse acceleration level is not zero, the operating system doubles the distance. If the specified distance
|
@@ -227,12 +227,12 @@ module Win
|
|
227
227
|
# Mouse speed can range from 1 (slowest) to 20 (fastest) and represents how much the pointer moves based
|
228
228
|
# on the distance the mouse moves. The default value is 10, which results in no additional modification
|
229
229
|
# to the mouse motion.
|
230
|
-
# - The mouse_event function is used to synthesize mouse events by
|
231
|
-
# used by
|
232
|
-
# For example, if a tablet manufacturer wants to pass pen-based information to its own
|
230
|
+
# - The mouse_event function is used to synthesize mouse events by Apps that need to do so. It is also
|
231
|
+
# used by Apps that need to obtain more information from the mouse than its position and button state.
|
232
|
+
# For example, if a tablet manufacturer wants to pass pen-based information to its own Apps, it can
|
233
233
|
# write a DLL that communicates directly to the tablet hardware, obtains the extra information, and saves it
|
234
234
|
# in a queue. The DLL then calls mouse_event with the standard button and x/y position data, along with,
|
235
|
-
# in the dwExtraInfo parameter, some pointer or index to the queued extra information. When the
|
235
|
+
# in the dwExtraInfo parameter, some pointer or index to the queued extra information. When the App
|
236
236
|
# needs the extra information, it calls the DLL with the pointer or index stored in dwExtraInfo, and the DLL
|
237
237
|
# returns the extra information.
|
238
238
|
#
|
data/lib/win/gui/menu.rb
ADDED
@@ -0,0 +1,740 @@
|
|
1
|
+
require 'win/library'
|
2
|
+
#require 'win/gui/window'
|
3
|
+
#require 'win/gui/message' # needed because SC_... constants defined there
|
4
|
+
|
5
|
+
module Win
|
6
|
+
module Gui
|
7
|
+
|
8
|
+
# Contains constants and Win32 API functions related to Window menus manipulation.
|
9
|
+
# Menu basics can be found here:
|
10
|
+
# http://msdn.microsoft.com/en-us/library/ms646977%28v=VS.85%29.aspx
|
11
|
+
module Menu
|
12
|
+
extend Win::Library
|
13
|
+
# include Win::Gui::Window
|
14
|
+
|
15
|
+
# Menu Flags
|
16
|
+
|
17
|
+
MF_INSERT = 0x00000000
|
18
|
+
MF_CHANGE = 0x00000080
|
19
|
+
MF_APPEND = 0x00000100
|
20
|
+
MF_DELETE = 0x00000200
|
21
|
+
MF_REMOVE = 0x00001000
|
22
|
+
MF_BYCOMMAND = 0x00000000
|
23
|
+
MF_BYPOSITION = 0x00000400
|
24
|
+
MF_SEPARATOR = 0x00000800
|
25
|
+
MF_ENABLED = 0x00000000
|
26
|
+
MF_GRAYED = 0x00000001
|
27
|
+
MF_DISABLED = 0x00000002
|
28
|
+
MF_UNCHECKED = 0x00000000
|
29
|
+
MF_CHECKED = 0x00000008
|
30
|
+
MF_USECHECKBITMAPS = 0x00000200
|
31
|
+
MF_STRING = 0x00000000
|
32
|
+
MF_BITMAP = 0x00000004
|
33
|
+
MF_OWNERDRAW = 0x00000100
|
34
|
+
MF_POPUP = 0x00000010
|
35
|
+
MF_MENUBARBREAK = 0x00000020
|
36
|
+
MF_MENUBREAK = 0x00000040
|
37
|
+
MF_UNHILITE = 0x00000000
|
38
|
+
MF_HILITE = 0x00000080
|
39
|
+
MF_DEFAULT = 0x00001000
|
40
|
+
MF_SYSMENU = 0x00002000
|
41
|
+
MF_HELP = 0x00004000
|
42
|
+
MF_RIGHTJUSTIFY = 0x00004000
|
43
|
+
MF_MOUSESELECT = 0x00008000
|
44
|
+
MF_END = 0x00000080
|
45
|
+
|
46
|
+
# System Objects
|
47
|
+
|
48
|
+
OBJID_WINDOW = 0x00000000
|
49
|
+
OBJID_SYSMENU = 0xFFFFFFFF
|
50
|
+
OBJID_TITLEBAR = 0xFFFFFFFE
|
51
|
+
OBJID_MENU = 0xFFFFFFFD
|
52
|
+
OBJID_CLIENT = 0xFFFFFFFC
|
53
|
+
OBJID_VSCROLL = 0xFFFFFFFB
|
54
|
+
OBJID_HSCROLL = 0xFFFFFFFA
|
55
|
+
OBJID_SIZEGRIP = 0xFFFFFFF9
|
56
|
+
OBJID_CARET = 0xFFFFFFF8
|
57
|
+
OBJID_CURSOR = 0xFFFFFFF7
|
58
|
+
OBJID_ALERT = 0xFFFFFFF6
|
59
|
+
OBJID_SOUND = 0xFFFFFFF5
|
60
|
+
OBJID_QUERYCLASSNAMEIDX = 0xFFFFFFF4
|
61
|
+
OBJID_NATIVEOM = 0xFFFFFFF0
|
62
|
+
|
63
|
+
# From atlres.h:
|
64
|
+
|
65
|
+
# operation messages sent to DLGINIT
|
66
|
+
# LB_ADDSTRING (WM_USER+1)
|
67
|
+
# CB_ADDSTRING (WM_USER+3)
|
68
|
+
|
69
|
+
# Standard window components
|
70
|
+
|
71
|
+
ID_SEPARATOR = 0 # special separator value
|
72
|
+
ID_DEFAULT_PANE = 0 # default status bar pane
|
73
|
+
|
74
|
+
# standard control bars (IDW = window ID)
|
75
|
+
ATL_IDW_TOOLBAR = 0xE800 # main Toolbar for window
|
76
|
+
ATL_IDW_STATUS_BAR = 0xE801 # Status bar window
|
77
|
+
ATL_IDW_COMMAND_BAR = 0xE802 # Command bar window
|
78
|
+
|
79
|
+
# parts of a frame window
|
80
|
+
ATL_IDW_CLIENT = 0xE900
|
81
|
+
ATL_IDW_PANE_FIRST = 0xE900 # first pane (256 max)
|
82
|
+
ATL_IDW_PANE_LAST = 0xE9FF
|
83
|
+
ATL_IDW_HSCROLL_FIRST = 0xEA00 # first Horz scrollbar (16 max)
|
84
|
+
ATL_IDW_VSCROLL_FIRST = 0xEA10 # first Vert scrollbar (16 max)
|
85
|
+
ATL_IDW_SIZE_BOX = 0xEA20 # size box for splitters
|
86
|
+
ATL_IDW_PANE_SAVE = 0xEA21 # to shift ATL_IDW_PANE_FIRST
|
87
|
+
|
88
|
+
# bands for a rebar
|
89
|
+
ATL_IDW_BAND_FIRST = 0xEB00
|
90
|
+
ATL_IDW_BAND_LAST = 0xEBFF
|
91
|
+
|
92
|
+
# Standard Commands
|
93
|
+
|
94
|
+
# File commands
|
95
|
+
ID_FILE_NEW = 0xE100
|
96
|
+
ID_FILE_OPEN = 0xE101
|
97
|
+
ID_FILE_CLOSE = 0xE102
|
98
|
+
ID_FILE_SAVE = 0xE103
|
99
|
+
ID_FILE_SAVE_AS = 0xE104
|
100
|
+
ID_FILE_PAGE_SETUP = 0xE105
|
101
|
+
ID_FILE_PRINT_SETUP = 0xE106
|
102
|
+
ID_FILE_PRINT = 0xE107
|
103
|
+
ID_FILE_PRINT_DIRECT = 0xE108
|
104
|
+
ID_FILE_PRINT_PREVIEW = 0xE109
|
105
|
+
ID_FILE_UPDATE = 0xE10A
|
106
|
+
ID_FILE_SAVE_COPY_AS = 0xE10B
|
107
|
+
ID_FILE_SEND_MAIL = 0xE10C
|
108
|
+
ID_FILE_MRU_FIRST = 0xE110
|
109
|
+
ID_FILE_MRU_FILE1 = 0xE110 # range - 16 max
|
110
|
+
ID_FILE_MRU_FILE2 = 0xE111
|
111
|
+
ID_FILE_MRU_FILE3 = 0xE112
|
112
|
+
ID_FILE_MRU_FILE4 = 0xE113
|
113
|
+
ID_FILE_MRU_FILE5 = 0xE114
|
114
|
+
ID_FILE_MRU_FILE6 = 0xE115
|
115
|
+
ID_FILE_MRU_FILE7 = 0xE116
|
116
|
+
ID_FILE_MRU_FILE8 = 0xE117
|
117
|
+
ID_FILE_MRU_FILE9 = 0xE118
|
118
|
+
ID_FILE_MRU_FILE10 = 0xE119
|
119
|
+
ID_FILE_MRU_FILE11 = 0xE11A
|
120
|
+
ID_FILE_MRU_FILE12 = 0xE11B
|
121
|
+
ID_FILE_MRU_FILE13 = 0xE11C
|
122
|
+
ID_FILE_MRU_FILE14 = 0xE11D
|
123
|
+
ID_FILE_MRU_FILE15 = 0xE11E
|
124
|
+
ID_FILE_MRU_FILE16 = 0xE11F
|
125
|
+
ID_FILE_MRU_LAST = 0xE11F
|
126
|
+
|
127
|
+
# Edit commands
|
128
|
+
ID_EDIT_CLEAR = 0xE120
|
129
|
+
ID_EDIT_CLEAR_ALL = 0xE121
|
130
|
+
ID_EDIT_COPY = 0xE122
|
131
|
+
ID_EDIT_CUT = 0xE123
|
132
|
+
ID_EDIT_FIND = 0xE124
|
133
|
+
ID_EDIT_PASTE = 0xE125
|
134
|
+
ID_EDIT_PASTE_LINK = 0xE126
|
135
|
+
ID_EDIT_PASTE_SPECIAL = 0xE127
|
136
|
+
ID_EDIT_REPEAT = 0xE128
|
137
|
+
ID_EDIT_REPLACE = 0xE129
|
138
|
+
ID_EDIT_SELECT_ALL = 0xE12A
|
139
|
+
ID_EDIT_UNDO = 0xE12B
|
140
|
+
ID_EDIT_REDO = 0xE12C
|
141
|
+
|
142
|
+
# Window commands
|
143
|
+
ID_WINDOW_NEW = 0xE130
|
144
|
+
ID_WINDOW_ARRANGE = 0xE131
|
145
|
+
ID_WINDOW_CASCADE = 0xE132
|
146
|
+
ID_WINDOW_TILE_HORZ = 0xE133
|
147
|
+
ID_WINDOW_TILE_VERT = 0xE134
|
148
|
+
ID_WINDOW_SPLIT = 0xE135
|
149
|
+
ATL_IDM_WINDOW_FIRST = 0xE130
|
150
|
+
ATL_IDM_WINDOW_LAST = 0xE13F
|
151
|
+
ATL_IDM_FIRST_MDICHILD = 0xFF00 # window list starts here
|
152
|
+
|
153
|
+
# Help and App commands
|
154
|
+
ID_APP_ABOUT = 0xE140
|
155
|
+
ID_APP_EXIT = 0xE141
|
156
|
+
ID_HELP_INDEX = 0xE142
|
157
|
+
ID_HELP_FINDER = 0xE143
|
158
|
+
ID_HELP_USING = 0xE144
|
159
|
+
ID_CONTEXT_HELP = 0xE145 # shift-F1
|
160
|
+
ID_HELP = 0xE146 # first attempt for F1
|
161
|
+
ID_DEFAULT_HELP = 0xE147 # last attempt
|
162
|
+
|
163
|
+
# Misc
|
164
|
+
ID_NEXT_PANE = 0xE150
|
165
|
+
ID_PREV_PANE = 0xE151
|
166
|
+
ID_PANE_CLOSE = 0xE152
|
167
|
+
|
168
|
+
# Format
|
169
|
+
ID_FORMAT_FONT = 0xE160
|
170
|
+
|
171
|
+
# Scroll
|
172
|
+
ID_SCROLL_UP = 0xE170
|
173
|
+
ID_SCROLL_DOWN = 0xE171
|
174
|
+
ID_SCROLL_PAGE_UP = 0xE172
|
175
|
+
ID_SCROLL_PAGE_DOWN = 0xE173
|
176
|
+
ID_SCROLL_TOP = 0xE174
|
177
|
+
ID_SCROLL_BOTTOM = 0xE175
|
178
|
+
ID_SCROLL_LEFT = 0xE176
|
179
|
+
ID_SCROLL_RIGHT = 0xE177
|
180
|
+
ID_SCROLL_PAGE_LEFT = 0xE178
|
181
|
+
ID_SCROLL_PAGE_RIGHT = 0xE179
|
182
|
+
ID_SCROLL_ALL_LEFT = 0xE17A
|
183
|
+
ID_SCROLL_ALL_RIGHT = 0xE17B
|
184
|
+
|
185
|
+
# OLE commands
|
186
|
+
ID_OLE_INSERT_NEW = 0xE200
|
187
|
+
ID_OLE_EDIT_LINKS = 0xE201
|
188
|
+
ID_OLE_EDIT_CONVERT = 0xE202
|
189
|
+
ID_OLE_EDIT_CHANGE_ICON = 0xE203
|
190
|
+
ID_OLE_EDIT_PROPERTIES = 0xE204
|
191
|
+
ID_OLE_VERB_FIRST = 0xE210 # range - 16 max
|
192
|
+
ID_OLE_VERB_LAST = 0xE21F
|
193
|
+
|
194
|
+
# View commands (same number used as IDW used for toolbar and status bar)
|
195
|
+
ID_VIEW_TOOLBAR = 0xE800
|
196
|
+
ID_VIEW_STATUS_BAR = 0xE801
|
197
|
+
ID_VIEW_REFRESH = 0xE803
|
198
|
+
|
199
|
+
# Standard control IDs
|
200
|
+
|
201
|
+
IDC_STATIC = -1 # all static controls
|
202
|
+
|
203
|
+
# Standard string error/warnings
|
204
|
+
|
205
|
+
# idle status bar message
|
206
|
+
ATL_IDS_IDLEMESSAGE = 0xE001
|
207
|
+
ATL_IDS_SCFIRST = 0xEF00
|
208
|
+
ATL_IDS_SCSIZE = 0xEF00
|
209
|
+
ATL_IDS_SCMOVE = 0xEF01
|
210
|
+
ATL_IDS_SCMINIMIZE = 0xEF02
|
211
|
+
ATL_IDS_SCMAXIMIZE = 0xEF03
|
212
|
+
ATL_IDS_SCNEXTWINDOW = 0xEF04
|
213
|
+
ATL_IDS_SCPREVWINDOW = 0xEF05
|
214
|
+
ATL_IDS_SCCLOSE = 0xEF06
|
215
|
+
ATL_IDS_SCRESTORE = 0xEF12
|
216
|
+
ATL_IDS_SCTASKLIST = 0xEF13
|
217
|
+
ATL_IDS_MDICHILD = 0xEF1F
|
218
|
+
ATL_IDS_MRU_FILE = 0xEFDA
|
219
|
+
|
220
|
+
# Misc. control IDs
|
221
|
+
|
222
|
+
# Property Sheet control id's (determined with Spy++)
|
223
|
+
ID_APPLY_NOW = 0x3021
|
224
|
+
ID_WIZBACK = 0x3023
|
225
|
+
ID_WIZNEXT = 0x3024
|
226
|
+
ID_WIZFINISH = 0x3025
|
227
|
+
ATL_IDC_TAB_CONTROL = 0x3020
|
228
|
+
|
229
|
+
##
|
230
|
+
# The GetMenu function retrieves a handle to the menu assigned to the specified window.
|
231
|
+
#
|
232
|
+
# [*Syntax*] HMENU GetMenu( HWND hWnd );
|
233
|
+
#
|
234
|
+
# hWnd:: <in> Handle to the window whose menu handle is to be retrieved.
|
235
|
+
#
|
236
|
+
# *Returns*:: The return value is a handle to the menu. If the specified window has no menu, the return
|
237
|
+
# value is NULL. If the window is a child window, the return value is undefined.
|
238
|
+
# ---
|
239
|
+
# *Remarks*:
|
240
|
+
# GetMenu does not work on floating menu bars. Floating menu bars are custom controls that mimic
|
241
|
+
# standard menus; they are not menus. To get the handle on a floating menu bar, use the Active
|
242
|
+
# Accessibility APIs.
|
243
|
+
# ---
|
244
|
+
# Minimum DLL Version user32.dll
|
245
|
+
# Header Declared in Winuser.h, include Windows.h
|
246
|
+
# Import library User32.lib
|
247
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
248
|
+
# ---
|
249
|
+
# *See* *Also*
|
250
|
+
# GetSubMenu, SetMenu
|
251
|
+
# Menus: http://msdn.microsoft.com/en-us/library/ms646977%28v=VS.85%29.aspx
|
252
|
+
# ---
|
253
|
+
# <b>Enhanced (snake_case) API: returns nil if no menu handle associated with this window. </b>
|
254
|
+
#
|
255
|
+
# :call-seq:
|
256
|
+
# menu_handle = [get_]menu(window_handle)
|
257
|
+
#
|
258
|
+
function :GetMenu, [:HWND], :HMENU, fails: 0
|
259
|
+
|
260
|
+
##
|
261
|
+
# The GetSystemMenu function allows the application to access the window menu (also known as the system
|
262
|
+
# menu or the control menu) for copying and modifying.
|
263
|
+
#
|
264
|
+
# [*Syntax*] HMENU GetSystemMenu( HWND hWnd, BOOL bRevert );
|
265
|
+
#
|
266
|
+
# hWnd:: <in> Handle to the window that will own a copy of the window menu.
|
267
|
+
# bRevert:: <in> Specifies the action to be taken. If this parameter is FALSE, GetSystemMenu returns a
|
268
|
+
# handle to the copy of the window menu currently in use. The copy is initially identical to
|
269
|
+
# the window menu, but it can be modified. If this parameter is TRUE, GetSystemMenu resets the
|
270
|
+
# window menu back to the default state. The previous window menu, if any, is destroyed.
|
271
|
+
#
|
272
|
+
# *Returns*:: If the bRevert parameter is FALSE, the return value is a handle to a copy of the window
|
273
|
+
# menu. If the bRevert parameter is TRUE, the return value is NULL.
|
274
|
+
# ---
|
275
|
+
# *Remarks*:
|
276
|
+
# Any window that does not use the GetSystemMenu function to make its own copy of the window menu
|
277
|
+
# receives the standard window menu.
|
278
|
+
# The window menu initially contains items with various identifier values, such as SC_CLOSE, SC_MOVE, SC_SIZE.
|
279
|
+
# Menu items on the window menu send WM_SYSCOMMAND messages.
|
280
|
+
# All predefined window menu items have identifier numbers greater than 0xF000. If an application adds
|
281
|
+
# commands to the window menu, it should use identifier numbers less than 0xF000.
|
282
|
+
# The system automatically grays items on the standard window menu, depending on the situation. The
|
283
|
+
# application can perform its own checking or graying by responding to the WM_INITMENU message that is
|
284
|
+
# sent before any menu is displayed.
|
285
|
+
# ---
|
286
|
+
# Minimum DLL Version user32.dll
|
287
|
+
# Header Declared in Winuser.h, include Windows.h
|
288
|
+
# Import library User32.lib
|
289
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
290
|
+
# ---
|
291
|
+
# *See* *Also*:
|
292
|
+
# GetMenu, InsertMenuItem, SetMenuItemInfo, WM_INITMENU, WM_SYSCOMMAND
|
293
|
+
# Menus: http://msdn.microsoft.com/en-us/library/ms646977%28v=VS.85%29.aspx
|
294
|
+
#
|
295
|
+
# ---
|
296
|
+
# <b>Enhanced (snake_case) API: reset is optional, defaults to false(do not reset)</b>
|
297
|
+
#
|
298
|
+
# :call-seq:
|
299
|
+
# menu_handle = [get_]system_menu(window_handle, reset)
|
300
|
+
#
|
301
|
+
function :GetSystemMenu, [:HWND, :int8], :HMENU, fails: 0,
|
302
|
+
&->(api, window_handle, reset=false) {
|
303
|
+
api.call window_handle, (reset == 0 || reset == false) ? 0 : 1 }
|
304
|
+
# weird lambda literal instead of normal block is needed because current version of RDoc
|
305
|
+
# goes crazy if block is attached to meta-definition
|
306
|
+
|
307
|
+
##
|
308
|
+
# The GetMenuItemCount function determines the number of items in the specified menu.
|
309
|
+
#
|
310
|
+
# [*Syntax*] int GetMenuItemCount( HMENU hMenu );
|
311
|
+
#
|
312
|
+
# hMenu:: <in> Handle to the menu to be examined.
|
313
|
+
#
|
314
|
+
# *Returns*:: If the function succeeds, the return value specifies the number of items in the menu.
|
315
|
+
# If the function fails, the return value is -1. To get extended error information, call GetLastError.
|
316
|
+
# ---
|
317
|
+
# Minimum DLL Version user32.dll
|
318
|
+
# Header Declared in Winuser.h, include Windows.h
|
319
|
+
# Import library User32.lib
|
320
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
321
|
+
# ---
|
322
|
+
# *See* *Also*:
|
323
|
+
# GetMenuItemID
|
324
|
+
#
|
325
|
+
# ---
|
326
|
+
# <b>Enhanced (snake_case) API: returns nil instead of -1 if function fails </b>
|
327
|
+
#
|
328
|
+
# :call-seq:
|
329
|
+
# num_items = [get_]menu_item_count(menu_handle)
|
330
|
+
#
|
331
|
+
function :GetMenuItemCount, [:HMENU], :int32, fails: -1
|
332
|
+
|
333
|
+
##
|
334
|
+
# The GetMenuItemID function retrieves the menu item identifier of a menu item located at the specified
|
335
|
+
# position in a menu.
|
336
|
+
#
|
337
|
+
# [*Syntax*] UINT GetMenuItemID( HMENU hMenu, int nPos );
|
338
|
+
#
|
339
|
+
# hMenu:: <in> Handle to the menu that contains the item whose identifier is to be retrieved.
|
340
|
+
# nPos:: <in> Specifies the zero-based relative position of the menu item whose identifier is to be
|
341
|
+
# retrieved.
|
342
|
+
#
|
343
|
+
# *Returns*:: The return value is the identifier of the specified menu item. If the menu item identifier
|
344
|
+
# is NULL or if the specified item opens a submenu, the return value is -1.
|
345
|
+
# --
|
346
|
+
# Minimum DLL Version user32.dll
|
347
|
+
# Header Declared in Winuser.h, include Windows.h
|
348
|
+
# Import library User32.lib
|
349
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
350
|
+
# ---
|
351
|
+
# See Also:
|
352
|
+
# GetMenuItemCount
|
353
|
+
#
|
354
|
+
# ---
|
355
|
+
# <b>Enhanced (snake_case) API: returns nil instead of -1 if function fails </b>
|
356
|
+
#
|
357
|
+
# :call-seq:
|
358
|
+
# item_id = [get_]menu_item_id(@menu_handle, pos)
|
359
|
+
#
|
360
|
+
function :GetMenuItemID, [:HMENU, :int], :int32, fails: -1
|
361
|
+
|
362
|
+
##
|
363
|
+
# The GetSubMenu function retrieves a handle to the drop-down menu or submenu activated by the specified
|
364
|
+
# menu item.
|
365
|
+
#
|
366
|
+
# [*Syntax*] HMENU GetSubMenu( HMENU hMenu, int nPos );
|
367
|
+
#
|
368
|
+
# hMenu:: <in> Handle to the menu.
|
369
|
+
# nPos:: <in> Specifies the zero-based relative position in the specified menu of an item that activates
|
370
|
+
# a drop-down menu or submenu.
|
371
|
+
#
|
372
|
+
# *Returns*:: If the function succeeds, the return value is a handle to the drop-down menu or submenu
|
373
|
+
# activated by the menu item. If the menu item does not activate a drop-down menu or
|
374
|
+
# submenu, the return value is NULL.
|
375
|
+
# ---
|
376
|
+
# Minimum DLL Version user32.dll
|
377
|
+
# Header Declared in Winuser.h, include Windows.h
|
378
|
+
# Import library User32.lib
|
379
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
380
|
+
# ---
|
381
|
+
# See Also: CreatePopupMenu, GetMenu
|
382
|
+
#
|
383
|
+
# ---
|
384
|
+
# <b>Enhanced (snake_case) API: </b>
|
385
|
+
#
|
386
|
+
# :call-seq:
|
387
|
+
# sub_menu = [get_]sub_menu(menu_handle, pos)
|
388
|
+
#
|
389
|
+
function :GetSubMenu, [:HMENU, :int], :HMENU, fails: 0
|
390
|
+
|
391
|
+
##
|
392
|
+
# The IsMenu function determines whether a handle is a menu handle.
|
393
|
+
#
|
394
|
+
# [*Syntax*] BOOL IsMenu( HMENU hMenu );
|
395
|
+
#
|
396
|
+
# hMenu:: <in> Handle to be tested.
|
397
|
+
#
|
398
|
+
# *Returns*:: If hMenu is a menu handle, the return value is nonzero.
|
399
|
+
# If hMenu is not a menu handle, the return value is zero.
|
400
|
+
# ---
|
401
|
+
# Minimum DLL Version user32.dll
|
402
|
+
# Header Declared in Winuser.h, include Windows.h
|
403
|
+
# Import library User32.lib
|
404
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
405
|
+
# Unicode Implemented as Unicode version.
|
406
|
+
#
|
407
|
+
# ---
|
408
|
+
# <b>Enhanced (snake_case) API: returns true/false instead of 1/0</b>
|
409
|
+
#
|
410
|
+
# :call-seq:
|
411
|
+
# success = menu?(menu_handle)
|
412
|
+
#
|
413
|
+
function :IsMenu, [:HMENU], :int8, boolean: true
|
414
|
+
|
415
|
+
##
|
416
|
+
# The CreateMenu function creates a menu. The menu is initially empty, but it can be filled with menu
|
417
|
+
# items by using the InsertMenuItem, AppendMenu, and InsertMenu functions.
|
418
|
+
#
|
419
|
+
# [*Syntax*] HMENU CreateMenu( void );
|
420
|
+
#
|
421
|
+
# *Returns*:: If the function succeeds, the return value is a handle to the newly created menu.
|
422
|
+
# If the function fails, the return value is NULL. To get extended error information, call GetLastError.
|
423
|
+
# ---
|
424
|
+
# *Remarks*:
|
425
|
+
# Resources associated with a menu that is assigned to a window are freed automatically. If the menu is
|
426
|
+
# not assigned to a window, an application must free system resources associated with the menu before
|
427
|
+
# closing. An application frees menu resources by calling the DestroyMenu function.
|
428
|
+
# Windows 95/98/Me:The system can support a maximum of 16,364 menu handles.
|
429
|
+
# ---
|
430
|
+
# Minimum DLL Version user32.dll
|
431
|
+
# Header Declared in Winuser.h, include Windows.h
|
432
|
+
# Import library User32.lib
|
433
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
434
|
+
# Unicode Implemented as Unicode version.
|
435
|
+
# ---
|
436
|
+
# See Also: AppendMenu, CreatePopupMenu, DestroyMenu, InsertMenu, SetMenu, InsertMenuItem
|
437
|
+
#
|
438
|
+
# :call-seq:
|
439
|
+
# menu_handle = create_menu()
|
440
|
+
#
|
441
|
+
function :CreateMenu, [], :HMENU
|
442
|
+
|
443
|
+
##
|
444
|
+
# The DestroyMenu function destroys the specified menu and frees any memory that the menu occupies.
|
445
|
+
#
|
446
|
+
# [*Syntax*] BOOL DestroyMenu( HMENU hMenu );
|
447
|
+
#
|
448
|
+
# hMenu:: <in> Handle to the menu to be destroyed.
|
449
|
+
#
|
450
|
+
# *Returns*:: If the function succeeds, the return value is nonzero.
|
451
|
+
# If the function fails, the return value is zero. To get extended error information, call GetLastError.
|
452
|
+
# ---
|
453
|
+
# *Remarks*:
|
454
|
+
# Before closing, an application must use the DestroyMenu function to destroy a menu not assigned to a
|
455
|
+
# window. A menu that is assigned to a window is automatically destroyed when the application closes.
|
456
|
+
# DestroyMenu is recursive, that is, it will destroy the menu and all its submenus.
|
457
|
+
# ---
|
458
|
+
# Minimum DLL Version user32.dll
|
459
|
+
# Header Declared in Winuser.h, include Windows.h
|
460
|
+
# Import library User32.lib
|
461
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
462
|
+
# Unicode Implemented as Unicode version.
|
463
|
+
# ---
|
464
|
+
# See Also: CreateMenu, DeleteMenu, RemoveMenu, SetMenuItemInfo
|
465
|
+
#
|
466
|
+
# ---
|
467
|
+
# <b>Enhanced (snake_case) API: returns true/false instead of 1/0</b>
|
468
|
+
#
|
469
|
+
# :call-seq:
|
470
|
+
# success = destroy_menu(menu_handle)
|
471
|
+
#
|
472
|
+
function :DestroyMenu, [:HMENU], :int8, boolean: true
|
473
|
+
|
474
|
+
##
|
475
|
+
# The SetMenu function assigns a new menu to the specified window.
|
476
|
+
#
|
477
|
+
# [*Syntax*] BOOL SetMenu( HWND hWnd, HMENU hMenu );
|
478
|
+
#
|
479
|
+
# hWnd:: <in> Handle to the window to which the menu is to be assigned.
|
480
|
+
# hMenu:: <in> Handle to the new menu. If this parameter is NULL, the window's current menu is removed.
|
481
|
+
#
|
482
|
+
# *Returns*:: If the function succeeds, the return value is nonzero.
|
483
|
+
# If the function fails, the return value is zero. To get extended error information, call GetLastError.
|
484
|
+
# ---
|
485
|
+
# *Remarks*:
|
486
|
+
# The window is redrawn to reflect the menu change. A menu can be assigned to any window that is not a
|
487
|
+
# child window.
|
488
|
+
# The SetMenu function replaces the previous menu, if any, but it does not destroy it. An application
|
489
|
+
# should call the DestroyMenu function to accomplish this task.
|
490
|
+
# ---
|
491
|
+
# Minimum DLL Version user32.dll
|
492
|
+
# Header Declared in Winuser.h, include Windows.h
|
493
|
+
# Import library User32.lib
|
494
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
495
|
+
# Unicode Implemented as Unicode version.
|
496
|
+
# ---
|
497
|
+
# See Also: DestroyMenu, GetMenu
|
498
|
+
#
|
499
|
+
# ---
|
500
|
+
# <b>Enhanced (snake_case) API: menu_handle argument optional</b>
|
501
|
+
#
|
502
|
+
# :call-seq:
|
503
|
+
# success = set_menu(window_handle, menu_handle)
|
504
|
+
#
|
505
|
+
function :SetMenu, [:HWND, :HMENU], :int8, boolean: true,
|
506
|
+
&->(api, window_handle, menu_handle=nil){
|
507
|
+
api.call window_handle, menu_handle ? menu_handle : 0}
|
508
|
+
|
509
|
+
##
|
510
|
+
# The AppendMenu function appends a new ITEM to the end of the specified menu bar, drop-down menu, submenu, or
|
511
|
+
# shortcut menu. You can use this function to specify the content, appearance, and behavior of the menu item.
|
512
|
+
#
|
513
|
+
# [*Syntax*] BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR lpNewItem );
|
514
|
+
#
|
515
|
+
# hMenu:: <in> Handle to the menu bar, drop-down menu, submenu, or shortcut menu to be changed.
|
516
|
+
# uFlags:: <in> Specifies flags to control the appearance and behavior of the new menu item. This
|
517
|
+
# parameter can be a combination of the values listed in the following Remarks section.
|
518
|
+
# uIDNewItem:: <in> Specifies either the identifier of the new menu item or, if the uFlags parameter is
|
519
|
+
# set to MF_POPUP, a handle to the drop-down menu or submenu.
|
520
|
+
# lpNewItem:: <in> Specifies the content of the new menu item. The interpretation of lpNewItem depends
|
521
|
+
# on whether the uFlags parameter includes the MF_BITMAP, MF_OWNERDRAW, or MF_STRING flag,
|
522
|
+
# as shown in the following table.
|
523
|
+
# MF_BITMAP:: Contains a bitmap handle.
|
524
|
+
# MF_OWNERDRAW:: Contains an application-supplied value that can be used to maintain additional
|
525
|
+
# data related to the menu item. The value is in the itemData member of the structure
|
526
|
+
# pointed to by the lParam parameter of the WM_MEASUREITEM or WM_DRAWITEM message
|
527
|
+
# sent when the menu is created or its appearance is updated.
|
528
|
+
# MF_STRING:: Contains a pointer to a null-terminated string.
|
529
|
+
#
|
530
|
+
# *Returns*:: If the function succeeds, the return value is nonzero. If the function fails, the return
|
531
|
+
# value is zero. To get extended error information, call GetLastError.
|
532
|
+
# ---
|
533
|
+
# *Remarks*:
|
534
|
+
# The application must call the DrawMenuBar function whenever a menu changes, whether or not the menu is
|
535
|
+
# in a displayed window.
|
536
|
+
# To get keyboard accelerators to work with bitmap or owner-drawn menu items, the owner of the menu must
|
537
|
+
# process the WM_MENUCHAR message. For more information, see Owner-Drawn Menus and the WM_MENUCHAR Message.
|
538
|
+
# The following flags can be set in the uFlags parameter:
|
539
|
+
# MF_BITMAP:: Uses a bitmap as the menu item. The lpNewItem parameter contains a handle to the bitmap.
|
540
|
+
# MF_CHECKED:: Places a check mark next to the menu item. If the application provides check-mark bitmaps
|
541
|
+
# (see SetMenuItemBitmaps, this flag displays the check-mark bitmap next to the menu item.)
|
542
|
+
# MF_DISABLED:: Disables the menu item so that it cannot be selected, but the flag does not gray it.
|
543
|
+
# MF_ENABLED:: Enables the menu item so that it can be selected, and restores it from its grayed state.
|
544
|
+
# MF_GRAYED:: Disables the menu item and grays it so that it cannot be selected.
|
545
|
+
# MF_MENUBARBREAK:: Functions the same as the MF_MENUBREAK flag for a menu bar. For a drop-down menu, submenu,
|
546
|
+
# or shortcut menu, the new column is separated from the old column by a vertical line.
|
547
|
+
# MF_MENUBREAK:: Places the item on a new line (for a menu bar) or in a new column (for a drop-down menu,
|
548
|
+
# submenu, or shortcut menu) without separating columns.
|
549
|
+
# MF_OWNERDRAW:: Specifies that the item is an owner-drawn item. Before the menu is displayed for the
|
550
|
+
# first time, the window that owns the menu receives a WM_MEASUREITEM message to retrieve
|
551
|
+
# the width and height of the menu item. The WM_DRAWITEM message is then sent to the window
|
552
|
+
# procedure of the owner window whenever the appearance of the menu item must be updated.
|
553
|
+
# MF_POPUP:: Specifies that the menu item opens a drop-down menu or submenu. The uIDNewItem parameter
|
554
|
+
# specifies a handle to the drop-down menu or submenu. This flag is used to add a menu name to a menu
|
555
|
+
# bar, or a menu item that opens a submenu to a drop-down menu, submenu, or shortcut menu.
|
556
|
+
# MF_SEPARATOR:: Draws a horizontal dividing line. This flag is used only in a drop-down menu, submenu, or
|
557
|
+
# shortcut menu. The line cannot be grayed, disabled, or highlighted. The lpNewItem and uIDNewItem
|
558
|
+
# parameters are ignored.
|
559
|
+
# MF_STRING:: Specifies that the menu item is a text string; the lpNewItem parameter is a pointer to the string.
|
560
|
+
# MF_UNCHECKED:: Does not place a check mark next to the item (default). If the application supplies check-mark
|
561
|
+
# bitmaps (see SetMenuItemBitmaps), this flag displays the clear bitmap next to the menu item.
|
562
|
+
# The following groups of flags cannot be used together:
|
563
|
+
# MF_BITMAP, MF_STRING, and MF_OWNERDRAW
|
564
|
+
# MF_CHECKED and MF_UNCHECKED
|
565
|
+
# MF_DISABLED, MF_ENABLED, and MF_GRAYED
|
566
|
+
# MF_MENUBARBREAK and MF_MENUBREAK
|
567
|
+
# ---
|
568
|
+
# Minimum DLL Version user32.dll
|
569
|
+
# Header Declared in Winuser.h, include Windows.h
|
570
|
+
# Import library User32.lib
|
571
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
572
|
+
# Unicode Implemented as ANSI and Unicode versions.
|
573
|
+
# ---
|
574
|
+
# See Also:
|
575
|
+
# CreateMenu, DeleteMenu, DestroyMenu, DrawMenuBar, InsertMenu, InsertMenuItem, ModifyMenu,
|
576
|
+
# RemoveMenu, SetMenuItemBitmaps
|
577
|
+
#
|
578
|
+
# ---
|
579
|
+
# <b>Enhanced (snake_case) API: </b>
|
580
|
+
#
|
581
|
+
# :call-seq:
|
582
|
+
# success = append_menu(menu_handle, flags, id_new_item, lp_new_item)
|
583
|
+
#
|
584
|
+
function :AppendMenu, [:HMENU, :UINT, :UINT, :pointer], :int8, boolean: true
|
585
|
+
|
586
|
+
##
|
587
|
+
# The InsertMenu function inserts a new menu item into a menu, moving other items down the menu.
|
588
|
+
# Note The InsertMenu function has been superseded by the InsertMenuItem function. You can still use
|
589
|
+
# InsertMenu, however, if you do not need any of the extended features of InsertMenuItem.
|
590
|
+
#
|
591
|
+
# [*Syntax*] BOOL InsertMenu( HMENU hMenu, UINT uPosition, UINT uFlags, PTR uIDNewItem, LPCTSTR
|
592
|
+
# lpNewItem );
|
593
|
+
#
|
594
|
+
# hMenu:: <in> Handle to the menu to be changed.
|
595
|
+
# uPosition:: <in> Specifies the menu item before which the new menu item is to be inserted, as
|
596
|
+
# determined by the uFlags parameter.
|
597
|
+
# uFlags:: <in> Specifies flags that control the interpretation of the uPosition parameter and the content,
|
598
|
+
# appearance, and behavior of the new menu item. This parameter must be a combination of one of the
|
599
|
+
# following required values and at least one of the values listed in the following Remarks section.
|
600
|
+
# MF_BYCOMMAND:: Indicates that the uPosition parameter gives the identifier of the menu item.
|
601
|
+
# MF_BYCOMMAND flag is the default if neither MF_BYCOMMAND nor MF_BYPOSITION specified.
|
602
|
+
# MF_BYPOSITION:: Indicates that the uPosition parameter gives the zero-based relative position of the
|
603
|
+
# new menu item. If uPosition is -1, new menu item is appended to the end of the menu.
|
604
|
+
# uIDNewItem:: <in> Specifies either the identifier of the new menu item or, if the uFlags parameter has
|
605
|
+
# the MF_POPUP flag set, a handle to the drop-down menu or submenu.
|
606
|
+
# lpNewItem:: <in> Specifies the content of the new menu item. The interpretation of lpNewItem depends on whether
|
607
|
+
# the uFlags parameter includes the MF_BITMAP, MF_OWNERDRAW, or MF_STRING flag, as follows:
|
608
|
+
# MF_BITMAP:: Contains a bitmap handle.
|
609
|
+
# MF_OWNERDRAW:: Contains an application-supplied value that can be used to maintain additional data
|
610
|
+
# related to the menu item. The value is in the itemData member of the structure
|
611
|
+
# pointed to by the lParam parameter of the WM_MEASUREITEM or WM_DRAWITEM message sent
|
612
|
+
# when the menu item is created or its appearance is updated.
|
613
|
+
# MF_STRING:: Contains a pointer to a null-terminated string (the default).
|
614
|
+
#
|
615
|
+
# *Returns*:: If the function succeeds, the return value is nonzero.
|
616
|
+
# If the function fails, the return value is zero. To get extended error information, call GetLastError.
|
617
|
+
# ---
|
618
|
+
# *Remarks*:
|
619
|
+
# The application must call the DrawMenuBar function whenever a menu changes, whether or not the menu is
|
620
|
+
# in a displayed window.
|
621
|
+
# The following list describes the flags that can be set in the uFlags parameter:
|
622
|
+
# MF_BITMAP:: Uses a bitmap as the menu item. The lpNewItem parameter contains a handle to the bitmap.
|
623
|
+
# MF_CHECKED:: Places a check mark next to the menu item. If the application provides check-mark bitmaps
|
624
|
+
# (see SetMenuItemBitmaps), this flag displays the check-mark bitmap next to the menu item.
|
625
|
+
# MF_DISABLED:: Disables the menu item so that it cannot be selected, but does not gray it.
|
626
|
+
# MF_ENABLED:: Enables the menu item so that it can be selected and restores it from its grayed state.
|
627
|
+
# MF_GRAYED:: Disables the menu item and grays it so it cannot be selected.
|
628
|
+
# MF_MENUBARBREAK:: Functions the same as the MF_MENUBREAK flag for a menu bar. For a drop-down menu, submenu, or
|
629
|
+
# shortcut menu, the new column is separated from the old column by a vertical line.
|
630
|
+
# MF_MENUBREAK:: Places the item on a new line (for menu bars) or in a new column (for a drop-down menu,
|
631
|
+
# submenu, or shortcut menu) without separating columns.
|
632
|
+
# MF_OWNERDRAW:: Specifies that the item is an owner-drawn item. Before the menu is displayed for the first time,
|
633
|
+
# the window that owns the menu receives a WM_MEASUREITEM message to retrieve the width and
|
634
|
+
# height of the menu item. The WM_DRAWITEM message is then sent to the window procedure of the
|
635
|
+
# owner window whenever the appearance of the menu item must be updated.
|
636
|
+
# MF_POPUP:: Specifies that the menu item opens a drop-down menu or submenu. The uIDNewItem parameter
|
637
|
+
# specifies a handle to the drop-down menu or submenu. This flag is used to add a menu name to a menu
|
638
|
+
# bar or a menu item that opens a submenu to a drop-down menu, submenu, or shortcut menu.
|
639
|
+
# MF_SEPARATOR:: Draws a horizontal dividing line. This flag is used only in a drop-down menu, submenu, or
|
640
|
+
# shortcut menu. The line cannot be grayed, disabled, or highlighted. The lpNewItem and uIDNewItem
|
641
|
+
# parameters are ignored.
|
642
|
+
# MF_STRING:: Specifies that the menu item is a text string; the lpNewItem parameter is a pointer to the string.
|
643
|
+
# MF_UNCHECKED:: Does not place a check mark next to the menu item (default). If the application supplies
|
644
|
+
# check-mark bitmaps (see the SetMenuItemBitmaps function), this flag displays the clear bitmap
|
645
|
+
# next to the menu item.
|
646
|
+
# The following groups of flags cannot be used together:
|
647
|
+
# MF_BYCOMMAND and MF_BYPOSITION
|
648
|
+
# MF_DISABLED, MF_ENABLED, and MF_GRAYED
|
649
|
+
# MF_BITMAP, MF_STRING, MF_OWNERDRAW, and MF_SEPARATOR
|
650
|
+
# MF_MENUBARBREAK and MF_MENUBREAK
|
651
|
+
# MF_CHECKED and MF_UNCHECKED
|
652
|
+
# ---
|
653
|
+
# Minimum DLL Version user32.dll
|
654
|
+
# Header Declared in Winuser.h, include Windows.h
|
655
|
+
# Import library User32.lib
|
656
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
657
|
+
# Unicode Implemented as ANSI and Unicode versions.
|
658
|
+
# ---
|
659
|
+
# See Also: AppendMenu, DeleteMenu, DrawMenuBar, InsertMenuItem, ModifyMenu, RemoveMenu,
|
660
|
+
# SetMenuItemBitmaps, WM_DRAWITEM, WM_MEASUREITEM
|
661
|
+
#
|
662
|
+
# ---
|
663
|
+
# <b>Enhanced (snake_case) API: returns true/false instead of 1/0</b>
|
664
|
+
#
|
665
|
+
# :call-seq:
|
666
|
+
# success = insert_menu(menu_handle, position, flags, id_new_item, lp_new_item)
|
667
|
+
#
|
668
|
+
function :InsertMenu, [:HMENU, :UINT, :UINT, :UINT, :pointer], :int8, boolean: true
|
669
|
+
|
670
|
+
##
|
671
|
+
# The DeleteMenu function deletes an item from the specified menu. If the menu item opens a menu or submenu,
|
672
|
+
# this function destroys the handle to the menu or submenu and frees the memory used by the menu or submenu.
|
673
|
+
#
|
674
|
+
# [*Syntax*] BOOL DeleteMenu( HMENU hMenu, UINT uPosition, UINT uFlags );
|
675
|
+
#
|
676
|
+
# hMenu:: <in> Handle to the menu to be changed.
|
677
|
+
# uPosition:: <in> Specifies the menu item to be deleted, as determined by the uFlags parameter.
|
678
|
+
# uFlags:: <in> Specifies how the uPosition parameter is interpreted. This parameter must be one of the
|
679
|
+
# following values.
|
680
|
+
# MF_BYCOMMAND:: Indicates that uPosition gives the identifier of the menu item. The MF_BYCOMMAND
|
681
|
+
# flag is the default flag if neither MF_BYCOMMAND nor MF_BYPOSITION flag is specified.
|
682
|
+
# MF_BYPOSITION:: Indicates that uPosition gives the zero-based relative position of the menu item.
|
683
|
+
#
|
684
|
+
# *Returns*:: If the function succeeds, the return value is nonzero.
|
685
|
+
# If the function fails, the return value is zero. To get extended error information, call GetLastError.
|
686
|
+
# ---
|
687
|
+
# *Remarks*:
|
688
|
+
# The application must call the DrawMenuBar function whenever a menu changes, whether or not the menu is
|
689
|
+
# in a displayed window.
|
690
|
+
# ---
|
691
|
+
# Minimum DLL Version user32.dll
|
692
|
+
# Header Declared in Winuser.h, include Windows.h
|
693
|
+
# Import library User32.lib
|
694
|
+
# Minimum operating systems Windows 95, Windows NT 3.1
|
695
|
+
# Unicode Implemented as Unicode version.
|
696
|
+
# ---
|
697
|
+
# See Also: DrawMenuBar, RemoveMenu
|
698
|
+
#
|
699
|
+
# ---
|
700
|
+
# <b>Enhanced (snake_case) API: returns true/false instead of 1/0</b>
|
701
|
+
#
|
702
|
+
# :call-seq:
|
703
|
+
# success = delete_menu(menu_handle, position, flags)
|
704
|
+
#
|
705
|
+
function :DeleteMenu, [:HMENU, :UINT, :UINT], :int8, boolean: true
|
706
|
+
|
707
|
+
|
708
|
+
# Untested:
|
709
|
+
|
710
|
+
function :CheckMenuItem, 'LII', 'L'
|
711
|
+
function :CheckMenuRadioItem, 'LIIII', :int8, boolean: true
|
712
|
+
function :CreatePopupMenu, [], 'L'
|
713
|
+
function :DrawMenuBar, 'L', :int8, boolean: true
|
714
|
+
function :EnableMenuItem, 'LII', :int8, boolean: true
|
715
|
+
function :EndMenu, [], :int8, boolean: true
|
716
|
+
function :GetMenuBarInfo, 'LLLP', :int8, boolean: true
|
717
|
+
function :GetMenuCheckMarkDimensions, [], 'L'
|
718
|
+
function :GetMenuDefaultItem, 'LII', 'I'
|
719
|
+
function :GetMenuInfo, 'LP', :int8, boolean: true
|
720
|
+
function :GetMenuItemInfo, 'LIIP', :int8, boolean: true
|
721
|
+
function :GetMenuItemRect, 'LLIP', :int8, boolean: true
|
722
|
+
function :GetMenuState, 'LLI', 'I'
|
723
|
+
function :GetMenuString, 'LIPII', 'I'
|
724
|
+
function :HiliteMenuItem, 'LLII', :int8, boolean: true
|
725
|
+
function :InsertMenuItem, 'LIIP', :int8, boolean: true
|
726
|
+
function :LoadMenu, 'LP', 'L'
|
727
|
+
function :LoadMenuIndirect, 'P', 'L'
|
728
|
+
function :MenuItemFromPoint, 'LLP', 'I'
|
729
|
+
function :ModifyMenu, 'LIIPP', :int8, boolean: true
|
730
|
+
function :RemoveMenu, 'LII', :int8, boolean: true
|
731
|
+
function :SetMenuDefaultItem, 'LLL', :int8, boolean: true
|
732
|
+
function :SetMenuInfo, 'LP', :int8, boolean: true
|
733
|
+
function :SetMenuItemBitmaps, 'LIILL', :int8, boolean: true
|
734
|
+
function :SetMenuItemInfo, 'LIIP', :int8, boolean: true
|
735
|
+
function :TrackPopupMenu, 'LIIIILP', :int8, boolean: true
|
736
|
+
function :TrackPopupMenuEx, 'LIIILP', :int8, boolean: true
|
737
|
+
|
738
|
+
end
|
739
|
+
end
|
740
|
+
end
|