|
|
// window class name of More Programs pane control
#define WC_MOREPROGRAMS TEXT("Desktop More Programs Pane")
class CMorePrograms : public IDropTarget , public CAccessible { public: /*
* Interface stuff... */
// *** IUnknown ***
STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvOut); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
// *** IDropTarget ***
STDMETHODIMP DragEnter(IDataObject *pdto, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); STDMETHODIMP DragLeave(); STDMETHODIMP Drop(IDataObject *pdto, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
// *** IAccessible overridden methods ***
STDMETHODIMP get_accRole(VARIANT varChild, VARIANT *pvarRole); STDMETHODIMP get_accState(VARIANT varChild, VARIANT *pvarState); STDMETHODIMP get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKeyboardShortcut); STDMETHODIMP get_accDefaultAction(VARIANT varChild, BSTR *pszDefAction); STDMETHODIMP accDoDefaultAction(VARIANT varChild);
private: CMorePrograms(HWND hwnd); ~CMorePrograms();
static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnNCCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnDestroy(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnNCDestroy(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnCtlColorBtn(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnDrawItem(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnCommand(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnSysColorChange(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnDisplayChange(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnSettingChange(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnContextMenu(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnEraseBkgnd(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnNotify(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT _OnSMNFindItem(PSMNDIALOGMESSAGE pdm); LRESULT _OnSMNShowNewAppsTip(PSMNMBOOL psmb); LRESULT _OnSMNDismiss();
void _InitMetrics(); HWND _CreateTooltip(); void _PopBalloon(); void _TrackShellMenu(DWORD dwFlags);
friend BOOL MorePrograms_RegisterClass();
enum { IDC_BUTTON = 1, IDC_KEYPRESS = 2 };
private: HWND _hwnd; HWND _hwndButton; HWND _hwndTT; HWND _hwndBalloon;
HTHEME _hTheme;
HFONT _hf; HFONT _hfTTBold; // Bold tooltip font
HFONT _hfMarlett; HBRUSH _hbrBk; // Always a stock object
IDropTargetHelper *_pdth; // For friendly-looking drag/drop
COLORREF _clrText; COLORREF _clrTextHot; COLORREF _clrBk;
int _colorHighlight; // GetSysColor
int _colorHighlightText; // GetSysColor
DWORD _tmHoverStart; // When did the user start a drag/drop hover?
// Assorted metrics for painting
int _tmAscent; // Ascent of main font
int _tmAscentMarlett; // Ascent of Marlett font
int _cxText; // width of entire client text
int _cxTextIndent; // distance to beginning of text
int _cxArrow; // width of the arrow image or glyph
MARGINS _margins; // margins for the proglist listview
int _iTextCenterVal; // space added to top of text to center with arrow bitmap
RECT _rcExclude; // Exclusion rectangle for when the menu comes up
// More random stuff
LONG _lRef; // reference count
TCHAR _chMnem; // Mnemonic
BOOL _fMenuOpen; // Is the menu open?
IShellMenu *_psmPrograms; // Cached ShellMenu for perf
// Large things go at the end
TCHAR _szMessage[128]; };
|