summaryrefslogtreecommitdiffabout
path: root/DragPad.cpp
Unidiff
Diffstat (limited to 'DragPad.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--DragPad.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/DragPad.cpp b/DragPad.cpp
new file mode 100644
index 0000000..9b0aa31
--- a/dev/null
+++ b/DragPad.cpp
@@ -0,0 +1,213 @@
1// DragPad.cpp : implementation file
2//
3
4#include "stdafx.h"
5#include "Dipstick.h"
6#include "DragPad.h"
7#include "DipstickDlg.h"
8
9#ifdef _DEBUG
10#define new DEBUG_NEW
11#undef THIS_FILE
12static char THIS_FILE[] = __FILE__;
13#endif
14
15/////////////////////////////////////////////////////////////////////////////
16// CDragPad dialog
17
18
19CDragPad::CDragPad(CWnd* pParent /*=NULL*/)
20 : CDialog(CDragPad::IDD, pParent)
21{
22 //{{AFX_DATA_INIT(CDragPad)
23 //}}AFX_DATA_INIT
24 m_DropTarget.m_Pad = this;
25}
26
27CDragPad::~CDragPad()
28{
29}
30
31void CDragPad::DoDataExchange(CDataExchange* pDX)
32{
33 CDialog::DoDataExchange(pDX);
34 //{{AFX_DATA_MAP(CDragPad)
35 DDX_Control(pDX, IDC_DNDTARGET, m_DragNDropTarget);
36 //}}AFX_DATA_MAP
37}
38
39
40BEGIN_MESSAGE_MAP(CDragPad, CDialog)
41 //{{AFX_MSG_MAP(CDragPad)
42 ON_WM_WINDOWPOSCHANGED()
43 ON_WM_NCACTIVATE()
44 ON_WM_DESTROY()
45 ON_WM_CREATE()
46 ON_WM_LBUTTONDBLCLK()
47 ON_WM_RBUTTONDOWN()
48 ON_WM_LBUTTONDOWN()
49 ON_WM_HELPINFO()
50 //}}AFX_MSG_MAP
51END_MESSAGE_MAP()
52
53/////////////////////////////////////////////////////////////////////////////
54// CDragPad message handlers
55
56BOOL CDragPad::OnInitDialog()
57{
58 CDialog::OnInitDialog();
59
60 m_DropTarget.Register(&m_DragNDropTarget);
61 m_DragNDropTarget.Open(IDR_DNDAVI);
62CRect rc;
63 m_DragNDropTarget.GetClientRect(rc);
64 m_DragNDropTarget.MoveWindow(rc,FALSE);
65CRect wrc,crc,drc, nrc;
66 GetWindowRect(wrc);
67 GetClientRect(crc);
68 GetDesktopWindow()->GetClientRect(drc);
69 nrc.left = drc.right-(rc.Width()+(wrc.Width()-crc.Width())) - 5;
70 nrc.top = drc.bottom-(rc.Height()+(wrc.Height()-crc.Height())) - 5;
71CWinApp *app = AfxGetApp();
72 ASSERT(app);
73 ScreenToClient(nrc);
74 nrc.top=app->GetProfileInt("Windows","DragPadTop",nrc.top);
75 nrc.left=app->GetProfileInt("Windows","DragPadLeft",nrc.left);
76 nrc.right = nrc.left+(rc.Width()+(wrc.Width()-crc.Width()));
77 nrc.bottom = nrc.top+(rc.Height()+(wrc.Height()-crc.Height()));
78 MoveWindow(nrc,FALSE);
79
80 // CG: The following block was added by the ToolTips component.
81 {
82 // Create the ToolTip control.
83 m_tooltip.Create(this);
84 m_tooltip.Activate(TRUE);
85 }
86
87 return TRUE; // return TRUE unless you set the focus to a control
88 // EXCEPTION: OCX Property Pages should return FALSE
89}
90
91void CDragPad::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
92{
93 CDialog::OnWindowPosChanged(lpwndpos);
94 if(lpwndpos->hwnd!=m_hWnd)
95 SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);
96}
97
98BOOL CDragPad::PreCreateWindow(CREATESTRUCT& cs)
99{
100 cs.dwExStyle|=WS_EX_TOPMOST;
101 return CDialog::PreCreateWindow(cs);
102}
103
104BOOL CDragPad::OnNcActivate(BOOL bActive)
105{
106 if(!bActive)
107 SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);
108 return CDialog::OnNcActivate(bActive);
109}
110
111void CDragPad::OnDestroy()
112{
113 CDialog::OnDestroy();
114 TRACE0("DestroyPad\n");
115 RevokeDragDrop(m_DragNDropTarget.m_hWnd);
116}
117
118int CDragPad::OnCreate(LPCREATESTRUCT lpCreateStruct)
119{
120 if (CDialog::OnCreate(lpCreateStruct) == -1)
121 return -1;
122CRect rc,drc, nrc;
123CWinApp *app = AfxGetApp();
124 ASSERT(app);
125 GetWindowRect(rc);
126 GetDesktopWindow()->GetClientRect(drc);
127 nrc.left = drc.right-rc.Width() - 5;
128 nrc.top = drc.bottom-rc.Height() - 5;
129 ScreenToClient(nrc);
130 nrc.top=app->GetProfileInt("Windows","DragPadTop",nrc.top);
131 nrc.left=app->GetProfileInt("Windows","DragPadLeft",nrc.left);
132 nrc.right = nrc.left+rc.Width();
133 nrc.bottom = nrc.top+rc.Height();
134 MoveWindow(nrc);
135 return 0;
136}
137
138void CDragPad::OnLButtonDblClk(UINT nFlags, CPoint point)
139{
140 ToggleMainWindowDisplay();
141 CDialog::OnLButtonDblClk(nFlags, point);
142}
143
144void CDragPad::OnRButtonDown(UINT nFlags, CPoint point)
145{
146CMenu menus;
147 VERIFY(menus.LoadMenu(IDR_MENU));
148 CMenu *dpm = menus.GetSubMenu(0);// *** Position?
149 ASSERT(dpm);
150CPoint pt = point;
151 ClientToScreen(&pt);
152 m_Daddy->UpdateControlButtons();
153 dpm->CheckMenuItem(ID_DRAGPAD_SHOWMAINWINDOW,MF_BYCOMMAND|(m_Daddy->m_bShown?MF_CHECKED:MF_UNCHECKED));
154 dpm->EnableMenuItem(ID_DRAGPAD_REPINGALL,MF_BYCOMMAND|(m_Daddy->m_RepingAllCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED));
155 dpm->EnableMenuItem(ID_DRAGPAD_REMOVEALL,MF_BYCOMMAND|(m_Daddy->m_ClearListCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED));
156 dpm->EnableMenuItem(ID_DRAGPAD_PASTEURL,MF_BYCOMMAND|(m_Daddy->IsPasteableClipboard()?MF_ENABLED:MF_GRAYED));
157 dpm->EnableMenuItem(ID_DRAGPAD_ADVANCED_EXPORTLIST,MF_BYCOMMAND|(m_Daddy->m_HostList.GetItemCount()?MF_ENABLED:MF_GRAYED));
158 dpm->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,m_Daddy,NULL);
159 CDialog::OnRButtonDown(nFlags, point);
160}
161
162void CDragPad::OnLButtonDown(UINT nFlags, CPoint point)
163{
164 ToggleMainWindowDisplay();
165 CDialog::OnLButtonDown(nFlags, point);
166}
167
168void CDragPad::ToggleMainWindowDisplay()
169{
170 if(m_Daddy->IsWindowVisible()){
171 m_Daddy->m_bShown=FALSE;
172 m_Daddy->ShowWindow(SW_HIDE);
173 }else{
174 m_Daddy->m_bShown=TRUE;
175 m_Daddy->ShowWindow(SW_SHOW);
176 }
177}
178
179BOOL CDragPad::PreTranslateMessage(MSG* pMsg)
180{
181 // CG: The following block was added by the ToolTips component.
182 {
183 // Let the ToolTip process this message.
184 m_tooltip.RelayEvent(pMsg);
185
186 return CDialog::PreTranslateMessage(pMsg);
187 }
188}
189
190DROPEFFECT CDUTarget::OnDragEnter(CWnd* pWnd,COleDataObject* pDO,DWORD dwKeyState,CPoint pt)
191{
192 if(m_Pad->m_Daddy->CollectURLs(pDO,TRUE))
193 return m_dropAsEntered=DROPEFFECT_LINK|DROPEFFECT_COPY|DROPEFFECT_MOVE;
194 else
195 return m_dropAsEntered=DROPEFFECT_NONE;
196}
197DROPEFFECT CDUTarget::OnDragOver(CWnd* pWnd,COleDataObject* pDO,DWORD dwKeyState,CPoint pt)
198{
199 return m_dropAsEntered;
200}
201DROPEFFECT CDUTarget::OnDropEx(CWnd* pWnd,COleDataObject* pDO,DROPEFFECT dropDefault,DROPEFFECT dropList,CPoint pt)
202{
203 if(m_Pad->m_Daddy->CollectURLs(pDO,FALSE))
204 return DROPEFFECT_LINK|DROPEFFECT_COPY|DROPEFFECT_MOVE;
205 else
206 return DROPEFFECT_NONE;
207}
208
209BOOL CDragPad::OnHelpInfo(HELPINFO* pHelpInfo)
210{
211 WinHelp(IDD|0x20000l);
212 return TRUE;
213}