Re: Using WM_LBUTTONUP

From: Michael J. Salamone [eMVP] (mikesa#at#entrek#dot#com)
Date: 02/07/05


Date: Mon, 7 Feb 2005 08:46:52 -0800

I understood that from your original post.

What I'm saying is that WM_LBUTTONUP is the wrong thing - you didn't
actually have to add anything there (and, you missed a break statement).

This app is using TRAY_NOTIFYICON for the message. Set a break on that case
(it's already in the code). From that message, you can examine the
wParam/lParam to determine what caused the event (for example, left button
up. Then take the appropriate action.

-- 
Michael Salamone [eMVP]
Entrek Software, Inc.
www.entrek.com
"Gizmo" <Gizmo@discussions.microsoft.com> wrote in message 
news:C580C711-B333-44F2-8683-9762D368CA38@microsoft.com...
>I put all the code, It will be more simple for me to explain. I've tried to
> modify the sample program, I've added an icon on the dialog box. And now I
> wanna tap on that icon to turn off my PPC. The name of the icon is 
> IDC_CLOSE.
> I've placed 2 comments on the code //Here...
> Thanks
>
> #include "stdafx.h"
>
> #define TRAY_NOTIFYICON WM_USER + 2001
> #define WMO_PALMTRAYAPP WM_USER + 2002
> #define ID_TRAY 5000
>
> // === Function Prototypes
> ====================================================
>
> BOOL WINAPI MainDlgProc(
>    HWND,
>    UINT,
>    WPARAM,
>    LPARAM
>    );
>
> // === Global Variables
> =======================================================
>
> HINSTANCE g_hInst;
>
> BOOL g_bWinHide = FALSE;
> BOOL g_bPalmTrayAppActive = FALSE;
>
> // Tray Icons and Notification ------------------------------
>
> BOOL TrayMessage(
>    HWND hwnd,
>    DWORD dwMessage,
>    UINT uID,
>    HICON hIcon,
>    PTSTR pszTip
>    )
> {
>  BOOL res = FALSE;
>  NOTIFYICONDATA tnd;
>
>  tnd.cbSize = sizeof(NOTIFYICONDATA);
>  tnd.hWnd = hwnd;
>  tnd.uID = uID;
>  tnd.uFlags = NIF_MESSAGE|NIF_ICON;
>  tnd.uCallbackMessage = TRAY_NOTIFYICON;
>  tnd.hIcon = hIcon;
>  tnd.szTip[0] = '\0';
>
>  res = Shell_NotifyIcon(dwMessage, &tnd);
>  return res;
> }
>
> void TrayIconDelete(
>    HWND hwnd,
>    UINT uID,
>    HICON hIcon,
>    PTSTR pszTip
>    )
> {
>    TrayMessage(hwnd, NIM_DELETE, uID, hIcon, NULL);
> }
>
> void TrayIconModify(
>    HWND hwnd,
>    UINT uID,
>    HICON hIcon,
>    PTSTR pszTip
>    )
> {
>    //animate icons
>    TrayMessage(hwnd, NIM_MODIFY, uID, hIcon, NULL);
> }
>
> void TrayIconAdd(
>    HWND hwnd,
>    UINT uID,
>    HICON hIcon,
>    PTSTR pszTip
>    )
> {
>    TrayMessage(hwnd, NIM_ADD, uID,  hIcon, NULL);
> }
>
>
> // === Application Entry Point
> ================================================
>
> int APIENTRY WinMain(
>    HINSTANCE hInstance,
>    HINSTANCE hPrev,
>    LPTSTR lpCmdLine,
>    int nShowCmd
>    )
> {
>    int retcode;
>
>    g_hInst = hInstance;   //  Save instance handle in global
>    InitCommonControls();
>
>    retcode = DialogBox( g_hInst, MAKEINTRESOURCE(IDD_PALMTRAYAPP), NULL,
> (DLGPROC)MainDlgProc );
>
>    return(retcode);
> }
>
> // === Main Window (dialog) Proc
> ==============================================
> BOOL WINAPI MainDlgProc(
>    HWND hDlg,
>    UINT Msg,
>    WPARAM wParam,
>    LPARAM lParam
>    )
> {
>    switch (Msg)
>    {
>
>    case WM_CLOSE:
>        //Clean up on Close and remove tray icons
>        TrayIconDelete(hDlg, ID_TRAY, LoadIcon( g_hInst,
> MAKEINTRESOURCE(IDI_ICON2) ), NULL);
>        EndDialog(hDlg, TRUE);
>        return(TRUE);
>
>    case WM_INITDIALOG:
>        //On Pocket PC devices you normally create all Dialog's as
> fullscreen dialog's
>        // with an OK button in the upper corner.
>        SHINITDLGINFO shidi;
>
>        // Create a Done button and size it.
>         shidi.hDlg = hDlg;
>
>        //initialzes the dialog based on the dwFlags parameter
>        SHInitDialog(&shidi);
>        //Set Tray Icon
>        TrayIconAdd(hDlg, ID_TRAY, LoadIcon(g_hInst,
> MAKEINTRESOURCE(IDI_ICON2)), NULL);
>        SetForegroundWindow(hDlg); // make us come to the front
>        return(TRUE);
>
>         case WM_LBUTTONUP:
>  MessageBox( NULL, NULL, NULL, NULL);  //Here I've added my code
>
> case WM_COMMAND:
>        switch (GET_WM_COMMAND_ID(wParam,lParam))
>        {
>
>        case IDCANCEL:
>            g_bPalmTrayAppActive = FALSE;
>            TrayIconDelete(hDlg, ID_TRAY, LoadIcon( g_hInst,
> MAKEINTRESOURCE(IDI_ICON2) ), NULL);
>            EndDialog( hDlg, TRUE );
>            return(TRUE);
>            break;
>
> case IDOK:
>            //Hide window
>            if (FALSE == g_bWinHide)
>            {
>                ShowWindow(hDlg, SW_HIDE);
>                g_bWinHide = TRUE;
>            }
>            //Active state
>            PostMessage(hDlg, WM_COMMAND, (WPARAM)WMO_PALMTRAYAPP, 0);
>            return(TRUE);
>            break;
>        }
>
>
> case TRAY_NOTIFYICON:
>        switch (lParam)
>        {
>        case WM_LBUTTONDOWN: //Here I've found the example, intercept the
> tap on the icon
>            if (ID_TRAY == wParam)
>            {
>                g_bPalmTrayAppActive = FALSE;
>                if (TRUE == g_bWinHide)
>                {
>                    ShowWindow(hDlg, SW_SHOW);
>                    SetForegroundWindow(hDlg); // make us come to the front
>                    g_bWinHide = FALSE;
>                }
>                else
>                {
>                    g_bWinHide = TRUE;
>                }
>            }
>            break;
>        }
>
>        break;
>
>    }
>    return( FALSE );
> }
>
>
>
>
>
> "Michael J. Salamone [eMVP]" wrote:
>
>> You're calling Shell_NotifyIcon to add your tray items?
>>
>> In the NOTIFYICONDATA structure passed to Shell_NotifyIcon is a field 
>> called
>> uCallbackMessage.  That is the message (application defined) you will
>> receive when there is an icon event, not WM_LBUTTONUP.
>> -- 
>>
>> Michael Salamone [eMVP]
>> Entrek Software, Inc.
>> www.entrek.com
>>
>>
>>
>> "Gizmo" <Gizmo@discussions.microsoft.com> wrote in message
>> news:EBC4037D-CB1C-42F9-9A60-C110B18C3306@microsoft.com...
>> > Hi,
>> > I'm writing a small app with Embedded Visual C++, I need to handle a
>> > message
>> > when I tap over tree Icons or Immages. I've started from the demo of
>> > TrayApp
>> > Sample code.
>> > I've write the code after the WM_INITDIALOG
>> >
>> > case WM_LBUTTONUP:
>> >  MessageBox( NULL, NULL, NULL, NULL);  //Only for testing
>> >
>> > It works on the entire of the dialog box and i need to use only on the 
>> > 3
>> > icons.
>> > Can anybody help me? Please be patient I'm new with C++
>> > Thanks
>>
>>
>> 

Loading