.486 .model flat, stdcall option casemap:none
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include "calendrier.h" HINSTANCE hInst; BOOL AffichageMenu = FALSE; // fonction pour ajouter l'icone a la systray BOOL AddIcone(HINSTANCE hInst, HWND hWnd, UINT id, LPTSTR IconName, char *infobulle) { BOOL res; NOTIFYICONDATA trid; trid.cbSize = sizeof(NOTIFYICONDATA); trid.hWnd = hWnd; trid.uID = id; trid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; trid.uCallbackMessage = WM_TRAY_ICONE; trid.hIcon = LoadIcon(hInst, IconName); if (infobulle) lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip)); else trid.szTip[0] = '\0'; res = Shell_NotifyIcon(NIM_ADD, &trid); return res; } // fonction pour enlever l'icone de la systray BOOL RetIcone(HWND hWnd, UINT id) { BOOL res; NOTIFYICONDATA trid; trid.cbSize = sizeof(NOTIFYICONDATA); trid.hWnd = hWnd; trid.uID = id; res = Shell_NotifyIcon(NIM_DELETE, &trid); return res; } // fonction pour la console void StartConsole() { AllocConsole(); // affiche console SetConsoleTitle("Calendrier by A&Nexus"); // titre console // redirection flux entree/sortie freopen("conin$", "r", stdin); freopen("conout$", "w", stdout); freopen("conout$", "w", stderr); // le reste de la fonction est le code du programme console que l'on souhaite qu'il // realise, comme un programme console "normal" main_console(); FreeConsole(); } // fonction permettant de quitter le menu A Propos BOOL CALLBACK APDDialogProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_APROPOS_OK: EndDialog(hWnd, 0); return TRUE; } break; } return FALSE; } // fonction principal du programme BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // initialisation de la boite de dialogue (on ajoute le prog a la systray) case WM_INITDIALOG: SetClassLong(hWnd, GCL_HICON, (long)LoadIcon(hInst, (LPCTSTR)IDI_ICON)); AddIcone(hInst, hWnd, 2, MAKEINTRESOURCE(IDI_ICON), "Calendrier by A&Nexus"); // on rend invisible le dialog WINDOWPLACEMENT My_Hwnd; My_Hwnd.length = sizeof(WINDOWPLACEMENT); My_Hwnd.showCmd = SW_HIDE; SetWindowPlacement(hWnd,&My_Hwnd); break; case WM_COMMAND: { switch(LOWORD(wParam)) { case IDCANCEL: // on ferme le programme { EndDialog(hWnd, FALSE); return TRUE; } case ID_TRAY_ITEM_1: // Affichage Console { StartConsole(); return TRUE; } case ID_TRAY_ITEM_2: // Affichage A Propos { DialogBox((HINSTANCE) GetModuleHandle (NULL), MAKEINTRESOURCE(IDD_APROPOS), hWnd, APDDialogProc); return TRUE; } case ID_TRAY_ITEM_3: // quitter le programme { RetIcone(hWnd, 2); // on retire l'icone de la systray EndDialog(hWnd, FALSE); // on ferme la boite de dialogue return TRUE; } } } case WM_TRAY_ICONE: // pour l'affichage menu { // seulement si double clik gauche ou clic droit if(AffichageMenu || (lParam != WM_RBUTTONUP && lParam != WM_LBUTTONDBLCLK)) return FALSE; HMENU menu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENUTRAY)); if(!menu) return FALSE; HMENU submenu = GetSubMenu(menu, 0); if(!submenu) return FALSE; // si clique droit if(lParam == WM_RBUTTONUP) { AffichageMenu = TRUE; POINT mouse; GetCursorPos(&mouse); SetMenuDefaultItem(submenu, ID_TRAY_ITEM_1, FALSE); SetForegroundWindow(hWnd); TrackPopupMenu(submenu, TPM_RETURNCMD || TPM_RIGHTALIGN, mouse.x, mouse.y, 0, hWnd, NULL); AffichageMenu = FALSE; DestroyMenu(submenu); DestroyMenu(menu); return TRUE; } else // sinon c'est un double clique gauche { StartConsole(); return TRUE; } } default: return FALSE; } return TRUE; } // fonction permettant que le prog n'apparaisse pas dans la taskbar BOOL CALLBACK DemDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: // initialisation de ma boite de dialogue PostMessage(hWnd, bnuSWOW_APP, 0, 0); return TRUE; case bnuSWOW_APP: DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_MAIN), hWnd, MainDlgProc, 0 ); EndDialog(hWnd, 0); } return 0; } // fonction WinMain int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hInst = hInstance; StartConsole(); DialogBox(hInst, MAKEINTRESOURCE(IDD_DEM), 0, (DLGPROC)DemDlgProc); return 0; }
// fonction pour la console void StartConsole() { AllocConsole(); // affiche console SetConsoleTitle("Calendrier by A&Nexus"); // titre console // redirection flux entree/sortie freopen("conin$", "r", stdin); freopen("conout$", "w", stdout); freopen("conout$", "w", stderr); // le reste de la fonction est le code du programme console que l'on souhaite qu'il // realise, comme un programme console "normal" main_console(); //Quitte la console FreeConsole(); }