171 lines
4.9 KiB
C++
171 lines
4.9 KiB
C++
#pragma once
|
|
|
|
#include "thread.h"
|
|
|
|
#ifdef _DEBUG
|
|
#import "..\\..\\Target\\Debug\\ButtonWPForm.tlb"
|
|
#else
|
|
#import "..\\..\\Target\\Release\\ButtonWPForm.tlb"
|
|
#endif
|
|
using namespace ButtonWPForm;
|
|
|
|
namespace Ooganizer
|
|
{
|
|
|
|
enum BUTTON_STATE
|
|
{
|
|
// These are the states that coincide with the states defined
|
|
// in ButtonWPFormCCW
|
|
BUTTON_NONE = 1,
|
|
BUTTON_DOWN = 2, // BUTTON_ADD
|
|
BUTTON_TOGGLED = 3, // BUTTON_DELETE
|
|
|
|
// Button Up is the Hover image (Used on Mouse Over),
|
|
// it is NOT DEFINED in BHInteracter
|
|
BUTTON_UP = 1000
|
|
};
|
|
|
|
////
|
|
// ButtonThemeSetting, this static holds our current Button Theme Setting
|
|
// ~This structure can be reloaded when a ThemeChange occured (WM_THEMECHANGED)
|
|
////
|
|
struct ButtonThemeSetting
|
|
{
|
|
// Init Flags
|
|
bool bIsInitialized;
|
|
bool bIsChanged;
|
|
|
|
// Int Button Dimension/Location
|
|
long Top;
|
|
long Right;
|
|
long Height;
|
|
long Width;
|
|
|
|
// String Button Locations
|
|
_bstr_t bstrBUTTON_UP;
|
|
_bstr_t bstrBUTTON_DOWN;
|
|
_bstr_t bstrTOGGLE_UP;
|
|
|
|
ButtonThemeSetting()
|
|
{
|
|
Top = 0;
|
|
Right = 0;
|
|
Height = 0;
|
|
Width = 0;
|
|
bIsInitialized = false;
|
|
bIsChanged = false;
|
|
}
|
|
};
|
|
|
|
class CWHPaccess;
|
|
class WPFCaller;
|
|
|
|
#define BLANK_HookWndItem(n) HookWndItem n = {NULL,NULL,NULL,NULL}
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Strc: HookWndItem
|
|
// Desc: Hook Item is used in the HookedWndList. Each HookWndItem keeps track
|
|
// of all the addresses needed for each hook for each Windows,
|
|
// as well as each Window's WPFCaller.
|
|
//////////////////////////////////////////////////////////////////////
|
|
struct HookWndItem
|
|
{
|
|
HWND hWnd;
|
|
WNDPROC HookWndProc;
|
|
WNDPROC DefWndProc;
|
|
WPFCaller* wpfcaller;
|
|
};
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Clss: WPFCaller
|
|
// Desc: This class is responsible for overriding wndproc draw routines
|
|
// and communicate to the WPF COM object
|
|
//////////////////////////////////////////////////////////////////////
|
|
class WPFCaller : Thread
|
|
{
|
|
public:
|
|
// All Windows Messages *Except NCDestroy & UnHook* enter here
|
|
virtual LRESULT OnDefault (HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
|
|
WPFCaller(HookWndItem Item, HINSTANCE hInstance);
|
|
~WPFCaller();
|
|
|
|
// Each WPFCaller is mapped to a HookWndItem (Hooked Window)
|
|
HWND m_hWnd;
|
|
WNDPROC m_HookWndProc;
|
|
WNDPROC m_DefWndProc;
|
|
HINSTANCE m_hInst;
|
|
|
|
// Window W32 State Settings
|
|
// ~we are keeping track of the Hooked W32 sizes
|
|
int m_wndHeight;
|
|
int m_wndWidth;
|
|
RECT m_wndRECT;
|
|
|
|
// We need to keep track of the Button State in order
|
|
// to know what to draw
|
|
BUTTON_STATE m_ButtonState;
|
|
BUTTON_STATE m_ButtonToggledState; // We can overwrite buttonDown state
|
|
// with another state. this allows us to
|
|
// specify which state to use to overwrite.
|
|
|
|
BUTTON_STATE m_ButtonStateLastSaved;
|
|
BUTTON_STATE m_ButtonToggledStateLastSaved;
|
|
bool m_bButtonIsArtificiallyHidden_MOVE;
|
|
bool m_bButtonIsMinimized;
|
|
bool m_bButtonIsBeingRestored;
|
|
|
|
// Transparency / Fade Effect
|
|
BYTE GetAlpha();
|
|
void SetAlpha(BYTE bAlpha);
|
|
void StartRestoreEventFadeTimer();
|
|
|
|
// Client Events
|
|
void StartCloseButNotDestroyTimer();
|
|
int m_StartCloseButNotDestroyTimerCount;
|
|
|
|
// Drag N' Dropped Files
|
|
int m_nDragDroppedFilesCount;
|
|
_bstr_t m_bstrDragDroppedFilesSemiColonSep;
|
|
|
|
// OpenFile or FileSaveAs Dialog Prms Passing
|
|
wchar_t m_strFileNameLocationBuf[MAX_PATH + 1];
|
|
wchar_t m_strFileTypesBuf[MAX_PATH + 1];
|
|
|
|
// WPFProc Will load the Button Settings via COM which
|
|
// we'll use to draw the Icon
|
|
ButtonThemeSetting m_ButtonThemeSetting;
|
|
|
|
// Window Handles
|
|
HWND m_hwndWPForm; // passed back to us by ButtonWPForm
|
|
HWND m_hwndW32Window; // our w32 Button
|
|
|
|
// ThreadStuff (WPFComThread)
|
|
bool m_bThreadIsReady;
|
|
HANDLE m_thread;
|
|
DWORD m_threadID;
|
|
|
|
private:
|
|
|
|
// OnDefault() uses this function to possible send messages
|
|
// to the EventDispatcher in C# for further processing
|
|
void EventDispatcherHandler(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
|
|
|
|
// We don't need to right now, but we may need it more in the future.
|
|
// Office passes in startup file prms via DDE (other apps may too)
|
|
void HandleDDEMessages(HWND hWnd, UINT Msg,WPARAM wParam,LPARAM lParam);
|
|
|
|
// Win32 Button Window * Created for better speed *
|
|
// Responsible for setting up the WNDCLASSEX struct and register the Window
|
|
BOOL InitApplication(HINSTANCE hInstance);
|
|
|
|
// Responsible for Creating and Showing a new Window Class Instance
|
|
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
|
|
|
|
// Thread Entry
|
|
int WINAPI threadproc(HINSTANCE hinstance, HINSTANCE hPrevInstance, void* vArg, int nCmdShow);
|
|
|
|
// Thread Entry
|
|
virtual DWORD Run(LPVOID vArg)
|
|
{
|
|
return(threadproc(m_hInst,NULL,vArg,TRUE));
|
|
}
|
|
};
|
|
} |