// HotfixOCX.h : Declaration of the CHotfixOCX #ifndef __HOTFIXOCX_H_ #define __HOTFIXOCX_H_ #include #include "resource.h" // main symbols #include #include #include "CListViews.h" ///////////////////////////////////////////////////////////////////////////// // CHotfixOCX class ATL_NO_VTABLE CHotfixOCX : public CComObjectRootEx, public CStockPropImpl, public CComControl, public IPersistStreamInitImpl, public IOleControlImpl, public IOleObjectImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public ISupportErrorInfo, public IConnectionPointContainerImpl, public IPersistStorageImpl, public ISpecifyPropertyPagesImpl, public IQuickActivateImpl, public IDataObjectImpl, public IProvideClassInfo2Impl<&CLSID_HotfixOCX, &DIID__IHotfixOCXEvents, &LIBID_HOTFIXMANAGERLib>, public IPropertyNotifySinkCP, public CComCoClass { public: CHotfixOCX() { m_bWindowOnly = TRUE; _tcscpy(ComputerName,_T("\0")); } DECLARE_REGISTRY_RESOURCEID(IDR_HOTFIXOCX) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CHotfixOCX) COM_INTERFACE_ENTRY(IHotfixOCX) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IViewObjectEx) COM_INTERFACE_ENTRY(IViewObject2) COM_INTERFACE_ENTRY(IViewObject) COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceObject) COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY(IOleControl) COM_INTERFACE_ENTRY(IOleObject) COM_INTERFACE_ENTRY(IPersistStreamInit) COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(ISpecifyPropertyPages) COM_INTERFACE_ENTRY(IQuickActivate) COM_INTERFACE_ENTRY(IPersistStorage) COM_INTERFACE_ENTRY(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) END_COM_MAP() BEGIN_PROP_MAP(CHotfixOCX) PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) PROP_ENTRY("Font", DISPID_FONT, CLSID_StockFontPage) // Example entries // PROP_ENTRY("Property Description", dispid, clsid) // PROP_PAGE(CLSID_StockColorPage) END_PROP_MAP() BEGIN_CONNECTION_POINT_MAP(CHotfixOCX) CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink) END_CONNECTION_POINT_MAP() BEGIN_MSG_MAP(CHotfixOCX) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_NOTIFY,OnNotify) MESSAGE_HANDLER(WM_COMMAND,OnCommand) MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu) CHAIN_MSG_MAP(CComControl) DEFAULT_REFLECTION_HANDLER() END_MSG_MAP() // Handler prototypes: // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid) { static const IID* arr[] = { &IID_IHotfixOCX, }; for (int i=0; i m_pFont; CListViews ListViews; HWND WebButton; HWND UninstButton; HWND RptButton; _TCHAR ComputerName[256]; BOOL m_bInitComplete; LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { _TCHAR TempName[255]; DWORD dwLength = 255; m_bInitComplete = FALSE; // TODO : Add Code for message handler. Call DefWindowProc if necessary. RECT rc; GetClientRect(&rc); CreateButton(_Module.GetModuleInstance(),m_hWnd,&rc); ::EnableWindow( WebButton,FALSE); ::EnableWindow(UninstButton,FALSE); ListViews.Initialize(m_hWnd, _Module.GetModuleInstance(),ComputerName, WebButton, UninstButton, RptButton); ListViews.ShowLists(&rc); GetComputerName(TempName, &dwLength); // MessageBox(TempName, ComputerName,MB_OK); m_bInitComplete = TRUE; return 0; } LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { RECT rc; rc.top = 0; rc.left = 0; rc.right = LOWORD(lParam); rc.bottom = HIWORD(lParam); // TODO : Add Code for message handler. Call DefWindowProc if necessary. ListViews.Resize(&rc); ResizeButtons(&rc); return 0; } LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { return ListViews.OnNotify( uMsg, wParam, lParam, bHandled,m_hWnd); } LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { switch (HIWORD (wParam)) { case BN_CLICKED: if ( WebButton == (HWND)lParam) { ShowWebPage(ListViews.GetCurrentHotfix()); return 0; } else if (UninstButton == (HWND)lParam) { ListViews.Uninstall(); } else if (RptButton == (HWND)lParam) { ListViews.PrintReport(); } break; } switch (LOWORD (wParam)) { case IDM_VIEW_WEB: ShowWebPage(ListViews.GetCurrentHotfix()); break; case IDM_UNINSTALL: ListViews.Uninstall(); break; case IDM_EXPORT_LIST: ListViews.SaveToCSV(); break; case IDM_VIEW_FILE: ListViews.SetViewMode(VIEW_BY_FILE); break; case IDM_VIEW_HOTFIX: ListViews.SetViewMode(VIEW_BY_HOTFIX); break; case ID_CONTEXTMENU_PRINT: ListViews.PrintReport(); break; } bHandled = FALSE; return 0; } LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // TODO : Add Code for message handler. Call DefWindowProc if necessary. HMENU hMenuLoad, hMenu; DWORD dwCurrentState =0; hMenuLoad = LoadMenu(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDR_MENU1)); hMenu = GetSubMenu(hMenuLoad, 0); dwCurrentState = ListViews.GetState (); if (!(dwCurrentState&UNINSTALL_OK) ) ::EnableMenuItem(hMenu,IDM_UNINSTALL,MF_BYCOMMAND | MF_GRAYED); if (!(dwCurrentState&HOTFIX_SELECTED)) { ::EnableMenuItem(hMenu,IDM_VIEW_WEB,MF_BYCOMMAND | MF_GRAYED); } if ( ! (dwCurrentState & DATA_TO_SAVE)) { ::EnableMenuItem(hMenu,IDM_EXPORT_LIST,MF_BYCOMMAND | MF_GRAYED); } if (! (dwCurrentState & OK_TO_PRINT)) ::EnableMenuItem(hMenu,ID_CONTEXTMENU_PRINT,MF_BYCOMMAND | MF_GRAYED); if ( dwCurrentState & STATE_VIEW_FILE) { ::CheckMenuItem(hMenu, IDM_VIEW_FILE, MF_BYCOMMAND|MF_CHECKED); ::CheckMenuItem(hMenu, IDM_VIEW_HOTFIX, MF_BYCOMMAND|MF_UNCHECKED); } else { ::CheckMenuItem(hMenu, IDM_VIEW_HOTFIX, MF_BYCOMMAND|MF_CHECKED); ::CheckMenuItem(hMenu, IDM_VIEW_FILE, MF_BYCOMMAND|MF_UNCHECKED); } TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, m_hWnd, NULL); DestroyMenu(hMenuLoad); return 0; } }; #endif //__HOTFIXOCX_H_