Je suis en train de faire un menu qui apparaitra dans la barre des
taches.
Ca marche plutot bien sauf que :
1 - l'ic=F4ne n'apparait pas m=EAme si l'emplacement est disponible et que
les actions de la souris y sont disponnibles. Tout ce passe comme si
l'application ne trouvait pas le visuel de l'ic=F4ne.
2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle
marche et fait disparaitre le menu, mais en suite il n'est plus
disponible.
Je suis sous xp familial.
Voici le code source complet, cr=E9=E9 en partie par le appwizard :
// neurocom.cpp : Defines the entry point for the application.
//
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HHOOK hHook; // Handle du hook global
// keyboard hook
LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam)
{
// Si une touche a =E9t=E9 press=E9e
if ((nCode =3D=3D HC_ACTION) && (wParam =3D=3D WM_KEYDOWN))
{
// Structure de r=E9cup=E9ration d'infos sur la touche tap=E9e
// MOUSEHOOKSTRUCT - HARDWAREHOOKSTRUCT - DESKTOP_HOOKCONTROL -
SHELLHOOKINFO - DEBUGHOOKINFO
KBDLLHOOKSTRUCT hookstruct =3D *((KBDLLHOOKSTRUCT*)lParam);
// Si la touche press=E9e est la touche PrintScreen
if(hookstruct.vkCode =3D=3D VK_LSHIFT)
{
MessageBox(NULL, _T("VK_LSHIFT Pressed"), _T("alert"), MB_OK);
}
if(hookstruct.vkCode =3D=3D VK_ESCAPE){
PostQuitMessage(0);
}
}
// Renvoi des messages au syt=E8me pour permettre d'autres hooks
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
UnhookWindowsHookEx(hHook);
Shell_NotifyIcon(NIM_DELETE,&TrayIcon);
return (int) msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage are only necessary if you want this
code
// to be compatible with Win32 systems prior to the
'RegisterClassEx'
// function that was added to Windows 95. It is important to call
this function
// so that the application will get 'well formed' small icons
associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global
variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst =3D hInstance; // Store instance handle in our global variable
//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
Tu as bien vérifié que TrayIcon.hIcon n'était pas NULL ?
Stephane13
acropole wrote:
1 - l'icône n'apparait pas même si l'emplacement est disponible et que les actions de la souris y sont disponnibles. Tout ce passe comme si l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle marche et fait disparaitre le menu, mais en suite il n'est plus disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ... pourquoi le détruis-tu ?
acropole wrote:
1 - l'icône n'apparait pas même si l'emplacement est disponible et que
les actions de la souris y sont disponnibles. Tout ce passe comme si
l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle
marche et fait disparaitre le menu, mais en suite il n'est plus
disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ...
pourquoi le détruis-tu ?
1 - l'icône n'apparait pas même si l'emplacement est disponible et que les actions de la souris y sont disponnibles. Tout ce passe comme si l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle marche et fait disparaitre le menu, mais en suite il n'est plus disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ... pourquoi le détruis-tu ?
acropole
On 17 avr, 11:50, Stephane13 wrote:
acropole wrote: > 1 - l'icône n'apparait pas même si l'emplacement est disponible et que > les actions de la souris y sont disponnibles. Tout ce passe comme si > l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
> 2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle > marche et fait disparaitre le menu, mais en suite il n'est plus > disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ... pourquoi le détruis-tu ?
Effectivement l'icone était null. Je m'en suis rendu compte aprés. J'ai trouvé la solution en chargent directement IDI_NEUROCOM et il apparait correctement. Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans ce tutoriel : http://chgi.developpez.com/windows/trayicon/ Je n'ai pas vu de fonction HideMenu, je vais vérifier.
Merci.
On 17 avr, 11:50, Stephane13 <step...@om.com> wrote:
acropole wrote:
> 1 - l'icône n'apparait pas même si l'emplacement est disponible et que
> les actions de la souris y sont disponnibles. Tout ce passe comme si
> l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
> 2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle
> marche et fait disparaitre le menu, mais en suite il n'est plus
> disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ...
pourquoi le détruis-tu ?
Effectivement l'icone était null. Je m'en suis rendu compte aprés.
J'ai trouvé la solution en chargent directement IDI_NEUROCOM et il
apparait correctement.
Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans
ce tutoriel : http://chgi.developpez.com/windows/trayicon/
Je n'ai pas vu de fonction HideMenu, je vais vérifier.
acropole wrote: > 1 - l'icône n'apparait pas même si l'emplacement est disponible et que > les actions de la souris y sont disponnibles. Tout ce passe comme si > l'application ne trouvait pas le visuel de l'icône.
le handle de l'icone est certainement = 0
> 2 - j'ai mis une action close qui appelle DestroyMenu(hmenu); Elle > marche et fait disparaitre le menu, mais en suite il n'est plus > disponible.
C'est logique, si tu détruis ton menu, il va disparaitre ... pourquoi le détruis-tu ?
Effectivement l'icone était null. Je m'en suis rendu compte aprés. J'ai trouvé la solution en chargent directement IDI_NEUROCOM et il apparait correctement. Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans ce tutoriel : http://chgi.developpez.com/windows/trayicon/ Je n'ai pas vu de fonction HideMenu, je vais vérifier.
Merci.
Stephane13
acropole wrote:
Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans ce tutoriel : http://.../.../trayicon/ Je n'ai pas vu de fonction HideMenu, je vais vérifier
Mouais, pas terrible ce "tutoriel", DestroyMenu() ça se fait presque jamais, à part pour remplacer un menu existant et encore, on fait ModifyMenu() Pour la systray, suis plutôt l'exemple TrayNot de Microsoft du SDK qui est dans ...SamplesWinUIShell
acropole wrote:
Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans
ce tutoriel : http://.../.../trayicon/
Je n'ai pas vu de fonction HideMenu, je vais vérifier
Mouais, pas terrible ce "tutoriel", DestroyMenu() ça se fait presque
jamais, à part pour remplacer un menu existant et encore, on fait
ModifyMenu()
Pour la systray, suis plutôt l'exemple TrayNot de Microsoft du SDK qui
est dans ...SamplesWinUIShell
Pour le menu je fais destroyMenu() parce que c'est ce que j'ai lu dans ce tutoriel : http://.../.../trayicon/ Je n'ai pas vu de fonction HideMenu, je vais vérifier
Mouais, pas terrible ce "tutoriel", DestroyMenu() ça se fait presque jamais, à part pour remplacer un menu existant et encore, on fait ModifyMenu() Pour la systray, suis plutôt l'exemple TrayNot de Microsoft du SDK qui est dans ...SamplesWinUIShell