掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ポップアップメニューについて (ID:68808)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
// 動くみたい // tasktray.cpp #include <windows.h> #include <shellapi.h> #include "resource.h" #define WM_TASKTRAY ( WM_APP + 1 ) HINSTANCE hInst ; HMENU hMenu, hSubMenu ; NOTIFYICONDATA nid ; INT_PTR CALLBACK DialogProc ( HWND, UINT, WPARAM, LPARAM ) ; BOOL On_Close ( HWND ) ; BOOL On_Command ( HWND, WPARAM ) ; BOOL id_Tasktray ( HWND ) ; BOOL id_Return ( HWND ) ; BOOL On_InitDialog ( HWND ) ; BOOL On_RButtonUp ( HWND, LPARAM ) ; BOOL On_Tasktray ( HWND, LPARAM ) ; int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE, LPSTR, int ) { hInst = hInstance ; DialogBox ( hInst, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DialogProc ) ; return 0 ; } INT_PTR CALLBACK DialogProc ( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { switch ( msg ) { case WM_INITDIALOG : return On_InitDialog ( hDlg ) ; case WM_COMMAND : return On_Command ( hDlg, wParam ) ; case WM_RBUTTONUP : return On_RButtonUp ( hDlg, lParam ) ; case WM_CLOSE : return On_Close ( hDlg ) ; case WM_TASKTRAY : return On_Tasktray ( hDlg, lParam ) ; } return FALSE ; } BOOL On_Tasktray ( HWND hDlg, LPARAM lParam ) { POINT pt ; if ( lParam == WM_RBUTTONUP ) { GetCursorPos ( &pt ) ; SetForegroundWindow ( hDlg ) ; TrackPopupMenu ( hSubMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hDlg, NULL ) ; return TRUE ; } return FALSE ; } BOOL On_InitDialog ( HWND hDlg ) { hMenu = LoadMenu ( hInst, MAKEINTRESOURCE ( IDR_MENU1 ) ) ; hSubMenu = GetSubMenu ( hMenu, 0 ) ; EnableMenuItem ( hSubMenu, ID_RETURN, MF_GRAYED | MF_DISABLED ) ; nid.cbSize = sizeof ( nid ) ; nid.hWnd = hDlg ; nid.uID = IDI_ICON1 ; nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP ; nid.uCallbackMessage = WM_TASKTRAY ; nid.hIcon = LoadIcon ( hInst, MAKEINTRESOURCE ( IDI_ICON1 ) ) ; lstrcpy ( nid.szTip, TEXT ( "tray" ) ) ; return TRUE ; } BOOL On_RButtonUp (HWND hDlg, LPARAM lParam) { POINT pt = { LOWORD ( lParam ), HIWORD ( lParam ) } ; ClientToScreen ( hDlg, &pt ) ; TrackPopupMenu ( hSubMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hDlg, NULL ) ; return TRUE ; } BOOL On_Command ( HWND hDlg, WPARAM wParam ) { switch ( LOWORD ( wParam ) ) { case ID_TASKTRAY : return id_Tasktray ( hDlg ) ; case ID_RETURN : return id_Return ( hDlg ) ; case IDCANCEL : return On_Close ( hDlg ) ; } return FALSE ; } BOOL id_Tasktray ( HWND hDlg ) { Shell_NotifyIcon ( NIM_ADD, &nid ) ; ShowWindow ( hDlg, SW_HIDE ) ; EnableMenuItem ( hSubMenu, ID_RETURN, MF_ENABLED ) ; EnableMenuItem ( hSubMenu, ID_TASKTRAY, MF_GRAYED | MF_DISABLED ) ; return TRUE ; } BOOL id_Return ( HWND hDlg ) { Shell_NotifyIcon ( NIM_DELETE, &nid ) ; ShowWindow ( hDlg, SW_SHOW ) ; EnableMenuItem ( hSubMenu, ID_TASKTRAY, MF_ENABLED ) ; EnableMenuItem ( hSubMenu, ID_RETURN, MF_GRAYED | MF_DISABLED ) ; return TRUE ; } BOOL On_Close ( HWND hDlg ) { DestroyMenu ( hMenu ) ; EndDialog ( hDlg, 0 ) ; return TRUE ; } // resource.h IDR_MENU1 MENU BEGIN POPUP "dummy" BEGIN MENUITEM "タスクトレイに移動(&T)", ID_TASKTRAY MENUITEM "ダイアログボックスに移動(&D)", ID_RETURN END END
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.