アットウィキロゴ

C言語 バルーンヘルプ

// タスクトレイにアイコンを追加する基本
//
// : 最小化ボタンでタスクトレイに格納(同時にバルーン情報を表示)
// : タスクトレイのアイコンをクリックして復帰
// : タスクトレイのアイコンを右クリックしてアイコンを変更
//
#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
#define _WIN32_IE 0x0600
#include <windows.h>
 
#define IDD_DIALOG1                     101
 
LRESULT CALLBACK DlgWndProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
    int wmId, wmEvent;
    static const int ID_MYTRAY      = WM_APP + 1;
    static const int MYTRAY_MESSAGE = WM_APP + 2;
    static NOTIFYICONDATA ni;
    static bool bIcon = true;
 
    switch(msg) {
    case MYTRAY_MESSAGE:
        if(wp == ID_MYTRAY)
            switch(lp)
            {
            case WM_LBUTTONDOWN:
                ShowWindow(hDlg, SW_SHOW);
                Shell_NotifyIcon(NIM_DELETE, &ni);
                    // タスクトレイからアイコンを削除
                break;
            case WM_RBUTTONDOWN:
                if(bIcon) {
                    ni.hIcon = (HICON)LoadIcon(NULL, IDI_WARNING);
                    bIcon = false;
                } else {
                    ni.hIcon = (HICON)LoadIcon(NULL, IDI_QUESTION);
                    bIcon = true;
                }
                Shell_NotifyIcon(NIM_MODIFY, &ni);
                    // タスクトレイのアイコンを変更
                Shell_NotifyIcon(NIM_MODIFY, &ni);
                    // タスクトレイ情報の更新
                break;
            }
        break;
    case WM_INITDIALOG:
        SetWindowText(hDlg, "最小化ボタンでタスクトレイに格納");
        memset(&ni, 0, sizeof(NOTIFYICONDATA));
        ni.cbSize = sizeof(NOTIFYICONDATA);
        ni.hWnd = hDlg;
        ni.uID = ID_MYTRAY;
        ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
        ni.hIcon = (HICON)LoadIcon(NULL, IDI_QUESTION);
        ni.uCallbackMessage = MYTRAY_MESSAGE;
        lstrcpy(ni.szTip, "クリックでタスクトレイから出す"); 
 
        // バルーン表示
        lstrcpy(ni.szInfoTitle,"情報!");
        lstrcpy(ni.szInfo,"只今、最小化されました!");
        ni.dwInfoFlags = NIIF_INFO;
        break;
    case WM_SYSCOMMAND:
        wmId    = LOWORD(wp); 
        wmEvent = HIWORD(wp); 
        switch(wmId) {
        case SC_MINIMIZE:
            ShowWindow(hDlg, SW_HIDE);
 
            /* バルーン表示機能のセット */
            ni.uFlags = (ni.uFlags | NIF_INFO);
            Shell_NotifyIcon(NIM_ADD, &ni);// タスクトレイにアイコンを追加
                                           // 同時にバルーン情報を表示
            /* バルーン表示機能の解除 */
            ni.uFlags = (ni.uFlags & ~NIF_INFO);
            Shell_NotifyIcon(NIM_MODIFY, &ni);// タスクトレイ情報の更新
            break;
        default:
            return FALSE;
        }// switch(wmId)
        break;
        // デフォルトのウインドウプロシージャには渡さないため
        // break して TRUE を返す
    case WM_CLOSE:
        DestroyWindow(hDlg);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return FALSE;
    }// switch(msg)
    return TRUE;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int nCmdShow)
{
    BYTE data[] = { 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 
                    0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0xca, 0x80, 
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 
                    0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 
                    0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x6f, 0x00, 
                    0x67, 0x00, 0x00, 0x00, 0x08, 0x00, 0x90, 0x01, 
                    0x00, 0x01, 0x4d, 0x00, 0x53, 0x00, 0x20, 0x00, 
                    0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 
                    0x6c, 0x00, 0x20, 0x00, 0x44, 0x00, 0x6c, 0x00, 
                    0x67, 0x00, 0x00, 0x00 };
 
    HWND hWnd = CreateDialogIndirectParam(hInstance,
                (LPCDLGTEMPLATEA)data, NULL, (DLGPROC)DlgWndProc, 0);
 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);    
 
     MSG msg;
    while(GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int)msg.wParam;
}
最終更新:2011年07月23日 00:12