タスクトレイにアイコンを置き、バルーンチップを表示するプログラムサンプル。
WM_CREATEでトレイアイコンを設置。
ボタンを押すとトレイアイコンの位置にバルーンチップを表示します。
参考になれば幸い。
#define _WIN32_WINNT 0x501 #include <windows.h> #define CLASS_NAME TEXT("BalloonTest") #define WINDOW_TITLE TEXT("BalloonTest") #define BUTTON_TITLE TEXT("Balloon") #define IDC_BTN_BALLOON 1 #define TASKTRAY_ID 2 #define WM_TASKTRAY (WM_APP+1) void balloon( HWND hWnd ) { if ( hWnd ) { NOTIFYICONDATA notifyIcon = {0}; notifyIcon.cbSize = sizeof(notifyIcon); notifyIcon.hWnd = hWnd; notifyIcon.uID = TASKTRAY_ID; notifyIcon.uFlags = NIF_INFO; notifyIcon.dwInfoFlags = NIIF_ERROR; lstrcpy( notifyIcon.szInfoTitle, TEXT("バルーンタイトル") ); lstrcpy( notifyIcon.szInfo, TEXT("バルーン文字") ); Shell_NotifyIcon( NIM_MODIFY, ¬ifyIcon ); } } void putTrayIcon( HWND hWnd ) { // タスクトレイアイコン追加 NOTIFYICONDATA notifyIcon = {0}; notifyIcon.cbSize = sizeof(notifyIcon); notifyIcon.uID = TASKTRAY_ID; notifyIcon.hWnd = hWnd; notifyIcon.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; notifyIcon.uCallbackMessage = WM_TASKTRAY; notifyIcon.hIcon = LoadIcon( NULL, IDI_APPLICATION ); lstrcpy( notifyIcon.szTip, WINDOW_TITLE ); Shell_NotifyIcon( NIM_ADD, ¬ifyIcon ); } void removeTrayIcon( HWND hWnd ) { NOTIFYICONDATA notifyIcon = {0}; notifyIcon.cbSize = sizeof(notifyIcon); notifyIcon.hWnd = hWnd; notifyIcon.uID = TASKTRAY_ID; Shell_NotifyIcon( NIM_DELETE, ¬ifyIcon ); } LRESULT CALLBACK wndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ) { static UINT uiTaskbarRestart = WM_NULL; switch ( msg ) { case WM_CREATE: putTrayIcon( hWnd ); uiTaskbarRestart = RegisterWindowMessage( TEXT("TaskbarCreated") ); break; case WM_CLOSE: removeTrayIcon( hWnd ); break; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch( LOWORD(wp) ) { case IDC_BTN_BALLOON: balloon( hWnd ); break; } return 0; case WM_TASKTRAY: switch ( lp ) { case WM_LBUTTONDOWN: MessageBox( hWnd, TEXT("タスクトレイクリック"), WINDOW_TITLE, MB_OK ); return 0; case NIN_BALLOONUSERCLICK: MessageBox( hWnd, TEXT("バルーンクリック"), WINDOW_TITLE, MB_OK ); return 0; } break; } // タスクバー再起動時のアイコン再設定処理 if ( msg == uiTaskbarRestart ) { removeTrayIcon( hWnd ); putTrayIcon( hWnd ); } return DefWindowProc( hWnd , msg , wp , lp ); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow ) { WNDCLASS winc = {0}; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = wndProc; winc.cbClsExtra = 0; winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = CLASS_NAME; if ( !RegisterClass(&winc) ) return 0; HWND hWnd = CreateWindow( CLASS_NAME, WINDOW_TITLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, hInstance, NULL ); if ( hWnd == NULL ) return 0; CreateWindow( TEXT("BUTTON"), BUTTON_TITLE, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 10, 300, 100, hWnd, reinterpret_castちなみに、dwInfoFlags にNIIF_ERRORを指定するとバルーンのアイコンがこうなります。(IDC_BTN_BALLOON), hInstance, NULL ); MSG msg; while ( GetMessage(&msg, NULL, 0, 0) ) { DispatchMessage(&msg); } return msg.wParam; }
NIIF_NONEだとアイコンなしに。
2015-03-19
uiTaskbarRestart の初期値を WM_NULL に変更。存在を忘れてた。
0 件のコメント:
コメントを投稿