dllreg_ctxm.cpp
上传用户:sencon168
上传日期:2007-01-04
资源大小:22k
文件大小:3k
源码类别:

Shell编程

开发平台:

Visual C++

  1. #include "dllreg_xhdr.h"
  2. #include "dllregshex.h"
  3. #include "dllreg_util.h"
  4. #include "resource.h"
  5. extern UINT g_cRefThisDll;
  6. extern HINSTANCE g_hmodThisDll;
  7. extern HBITMAP hBmp_Install;
  8. extern HBITMAP hBmp_Uninstall;
  9. extern HBITMAP hBmp_About;
  10. extern HMENU hSubMenu;
  11. // IContextMenu
  12. STDMETHODIMP 
  13. CShellExt::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
  14. {
  15. _UNUSED_PARAMETER(idCmdLast);
  16.     UINT idCmd = idCmdFirst;
  17. char *szMenuText_Popup = "Shell e&xtension";
  18.     char *szMenuText_Install = "&Install";
  19. char *szMenuText_Uninstall = "&Uninstall";
  20. char *szMenuText_About = "&About...";
  21. BOOL bAppendItems = TRUE;
  22. if((uFlags & 0x000F) == CMF_NORMAL)
  23. bAppendItems = TRUE;
  24. else if (uFlags & CMF_VERBSONLY)
  25. bAppendItems = TRUE;
  26. else if (uFlags & CMF_EXPLORE)
  27. bAppendItems = TRUE;
  28. else
  29. bAppendItems = FALSE;
  30.     if(bAppendItems)
  31.     {
  32.         InsertMenu(hMenu, indexMenu, MF_SEPARATOR | MF_BYPOSITION, 0, NULL);  
  33. indexMenu++;
  34. HMENU hSubMenu = CreateMenu();
  35. if(hSubMenu)
  36. {
  37. InsertMenu(hSubMenu, 0, MF_STRING  | MF_BYPOSITION, idCmd++, szMenuText_Install);
  38. SetMenuItemBitmaps(hSubMenu, 0, MF_BYPOSITION, hBmp_Install, hBmp_Install);
  39. InsertMenu(hSubMenu, 1, MF_STRING  | MF_BYPOSITION, idCmd++, szMenuText_Uninstall);
  40. SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION, hBmp_Uninstall, hBmp_Uninstall);
  41. InsertMenu(hSubMenu, 2, MF_SEPARATOR | MF_BYPOSITION, 0, NULL);
  42. InsertMenu(hSubMenu, 3, MF_STRING  | MF_BYPOSITION, idCmd++, szMenuText_About);
  43. SetMenuItemBitmaps(hSubMenu, 3, MF_BYPOSITION, hBmp_About, hBmp_About);
  44. }
  45. InsertMenu(hMenu, indexMenu, MF_STRING | MF_POPUP | MF_BYPOSITION, (UINT_PTR)hSubMenu, szMenuText_Popup);
  46. indexMenu++;
  47.         InsertMenu(hMenu, indexMenu, MF_SEPARATOR | MF_BYPOSITION, 0, NULL);
  48. indexMenu++;
  49.         return ResultFromShort(idCmd - idCmdFirst);
  50.    }
  51.    return NOERROR;
  52. }
  53. STDMETHODIMP 
  54. CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
  55. {
  56. HRESULT hr = E_INVALIDARG;
  57. if (!HIWORD(lpcmi->lpVerb))
  58.     {
  59.         UINT idCmd = LOWORD(lpcmi->lpVerb);
  60.         switch (idCmd)
  61.         {
  62.             case 0:
  63.                 hr = DoInstall(lpcmi->hwnd, lpcmi->lpDirectory, lpcmi->lpVerb, lpcmi->lpParameters, lpcmi->nShow);
  64.                 break;
  65.             case 1:
  66.                 hr = DoUninstall(lpcmi->hwnd, lpcmi->lpDirectory, lpcmi->lpVerb, lpcmi->lpParameters, lpcmi->nShow);
  67.                 break;
  68.             case 2:
  69.                 hr = DoAbout(lpcmi->hwnd, lpcmi->lpDirectory, lpcmi->lpVerb, lpcmi->lpParameters, lpcmi->nShow);
  70.                 break;
  71. default:
  72.                 break;
  73.         }
  74.     }
  75.     return hr;
  76. }
  77. STDMETHODIMP 
  78. CShellExt::GetCommandString(UINT idCmd, UINT uFlags, UINT FAR *reserved, LPSTR pszName, UINT cchMax)
  79. {
  80. _UNUSED_PARAMETER(reserved);
  81. _UNUSED_PARAMETER(uFlags);
  82. *pszName = 0;
  83. cchMax   = 40;
  84. char psz[40];
  85.     switch (idCmd)
  86.     {
  87.         case 0:
  88. LoadString(g_hmodThisDll, IDCMD_INSTALL, psz, cchMax);
  89.             break;
  90.         case 1:
  91. LoadString(g_hmodThisDll, IDCMD_UNINSTALL, psz, cchMax);
  92.             break;
  93.         case 2:
  94. LoadString(g_hmodThisDll, IDCMD_ABOUT, psz, cchMax);
  95.             break;
  96. default:
  97. break;
  98.     }
  99. wcscpy((unsigned short *)pszName, _WCSTR(psz));
  100.     return NOERROR;
  101. }