指定の範囲のメニュー項目をグループ化
Declare Function CheckMenuRadioItem Lib "user32.dll" _
(ByVal hmenu As Long, ByVal idFirst As Long, ByVal idLast As Long, _
ByVal idCheck As Long, ByVal uFlag As Long) As Long
Declare Function CheckMenuRadioItem Lib "user32.dll" _
(ByVal hmenu As Integer, ByVal idFirst As Integer, ByVal idLast As Integer, _
ByVal idCheck As Integer, ByVal uFlag As Integer) As Integer
BOOL CheckMenuRadioItem(
HMENU hmenu,
UINT idFirst,
UINT idLast,
UINT idCheck,
UINT uFlags
);
引数
hmenu
メニューのハンドルidFirst
グループ化する最初のメニューの項目のインデックス or IDidLast
グループ化する最後のメニューの項目のインデックス or IDidCheck
はじめからチェックしておくメニュー項目のインデックス or IDuFlag
項目を指定する定数戻り値
正常終了のとき 0以外uFlagの定数
エラーのとき 0
MF_BYCOMMAND = &H0 idFirst・idLast・idCheckの指定した値はメニュー項目のIDサンプル
MF_BYPOSITION = &H400 idFirst・idLast・idCheckの指定した値はメニュー項目のインデックス
ダウンロード(CheckMenuRadioItem.lzh 9.24KB)Public Const IDM_MENU0 = &H100 'メニューのコマンド名 Public Const IDM_MENU0_1 = &H101 'サブメニュー
Public Sub Main() '<-----------C++では「WinMain」に当たる Dim hWnd As Long, MSG As Message, wcl As WNDCLASSEX Dim ClassName As String, hParentWnd As Long 'クラス名 ClassName = "Test" With wcl .cbSize = Len(wcl) .hInstance = App.hInstance .lpszClassName = ClassName .lpfnWndProc = ChangeAddressOf(AddressOf TestProc) .style = 0 .hIcon = LoadIcon(0, ByVal IDI_APPLICATION) .hIconSm = LoadIcon(0, ByVal IDI_APPLICATION) .hCursor = LoadCursor(0, 32512) .lpszMenuName = 0 .cbClsExtra = 0 .cbWndExtra = 0 .hbrBackground = GetStockObject(LTGRAY_BRUSH) End With Call RegisterClassEx(wcl) hParentWnd = CreateWindowEx(WS_EX_APPWINDOW Or WS_EX_WINDOWEDGE _ , wcl.lpszClassName, "Now Testing!", _ WS_CAPTION Or WS_VISIBLE Or WS_SYSMENU Or WS_MINIMIZEBOX _ , CW_USEDEFAULT _ , CW_USEDEFAULT _ , 100 _ , 100 _ , 0, 0, App.hInstance, 0) Call ShowWindow(hParentWnd, SW_SHOW) Call UpdateWindow(hParentWnd) Do While (GetMessage(MSG, 0, 0, 0)) Call TranslateMessage(MSG) Call DispatchMessage(MSG) Loop End Sub
Public Function TestProc(ByVal hWnd As Long, ByVal MSG As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Dim hMenu As Long, hPopupMenu As Long Select Case MSG Case WM_CREATE '--------初期化 'メニューの作成 hMenu = CreateMenu hPopupMenu = CreatePopupMenu 'メニューを挿入 Call InsertMenu(hMenu, 0, MF_BYPOSITION Or MF_POPUP, hPopupMenu, "グループ") 'サブメニュー Call InsertMenu(hPopupMenu, 0, MF_BYPOSITION, 0, "項目1") Call InsertMenu(hPopupMenu, 1, MF_BYPOSITION, 1, "項目2") Call InsertMenu(hPopupMenu, 2, MF_BYPOSITION, 2, "項目3") 'グループ化する Call CheckMenuRadioItem(hPopupMenu, 0, 2, 1, MF_BYPOSITION) 'メニューをウィンドウに関連付ける Call SetMenu(hWnd, hMenu) 'メニューバーの再描画 Call DrawMenuBar(hWnd) Case WM_DESTROY '終了 'メニューの破棄 Call DestroyMenu(GetMenu(hWnd)) 'ウィンドウの破棄 Call DestroyWindow(Frame) PostQuitMessage (0) End Select TestProc = DefWindowProc(hWnd, MSG, wParam, lParam) End Function
Public Function ChangeAddressOf(ByVal Address As Long) As Long 'AddressOf演算子は変数として使えないので、間接的に使えるようにする ChangeAddressOf = Address End Function