OSDN Git Service

Add TortoiseProc
[tortoisegit/TortoiseGitJp.git] / Utils / MiscUI / ScrollTool.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2006 - Stefan Kueng\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "stdafx.h"\r
20 #include "ScrollTool.h"\r
21 \r
22 \r
23 CScrollTool::CScrollTool() : m_bInitCalled(false)\r
24 {\r
25 }\r
26 \r
27 CScrollTool::~CScrollTool()\r
28 {\r
29 }\r
30 \r
31 \r
32 BEGIN_MESSAGE_MAP(CScrollTool, CWnd)\r
33 END_MESSAGE_MAP()\r
34 \r
35 \r
36 bool CScrollTool::Init(LPPOINT pos, bool bRightAligned /* = false */)\r
37 {\r
38     if (!m_bInitCalled)\r
39     {\r
40         // create the tooltip window\r
41         if (!CreateEx(WS_EX_TOPMOST,\r
42                                          TOOLTIPS_CLASS,\r
43                                          NULL,\r
44                                          TTS_NOPREFIX | TTS_ALWAYSTIP,      \r
45                                          CW_USEDEFAULT,\r
46                                          CW_USEDEFAULT,\r
47                                          CW_USEDEFAULT,\r
48                                          CW_USEDEFAULT,\r
49                                          NULL,\r
50                                          NULL,\r
51                                          NULL))\r
52                 {\r
53                         return false;\r
54                 }\r
55 \r
56         ti.cbSize = sizeof(TOOLINFO);\r
57         ti.uFlags = TTF_TRACK;\r
58         ti.hwnd = NULL;\r
59         ti.hinst = NULL;\r
60         ti.uId = 0;\r
61         ti.lpszText = _T(" ");\r
62 \r
63                 // ToolTip control will cover the whole window\r
64         ti.rect.left = 0;\r
65         ti.rect.top = 0;\r
66         ti.rect.right = 0;\r
67         ti.rect.bottom = 0;\r
68 \r
69         CPoint point;\r
70         ::GetCursorPos(&point);\r
71 \r
72         SendMessage(TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);\r
73 \r
74                 SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)(DWORD) MAKELONG(point.x, point.y));\r
75         SendMessage(TTM_TRACKACTIVATE, true, (LPARAM)(LPTOOLINFO) &ti);\r
76                 SendMessage(TTM_TRACKPOSITION, 0, MAKELONG(pos->x, pos->y));\r
77                 m_bRightAligned = bRightAligned;\r
78         m_bInitCalled = true;\r
79     }\r
80         return true;\r
81 }\r
82 \r
83 void CScrollTool::SetText(LPPOINT pos, const TCHAR * fmt, ...)\r
84 {\r
85     CString s;\r
86     va_list marker;\r
87 \r
88     va_start( marker, fmt );\r
89     s.FormatV(fmt, marker);\r
90     va_end( marker );\r
91         \r
92         CSize textsize(0);\r
93         if (m_bRightAligned)\r
94         {\r
95                 CDC *pDC = GetDC();\r
96                 textsize = pDC->GetTextExtent(s);\r
97                 ReleaseDC(pDC);\r
98         }\r
99 \r
100         ti.lpszText = s.GetBuffer();       \r
101     SendMessage(TTM_UPDATETIPTEXT, 0, (LPARAM)(LPTOOLINFO) &ti);\r
102         SendMessage(TTM_TRACKPOSITION, 0, MAKELONG(pos->x-textsize.cx, pos->y));\r
103         s.ReleaseBuffer();\r
104 }\r
105 \r
106 void CScrollTool::Clear()\r
107 {\r
108         if (m_bInitCalled)\r
109         {\r
110                 SendMessage(TTM_DELTOOL, 0, (LPARAM)(LPTOOLINFO) &ti);\r
111                 DestroyWindow();\r
112         }\r
113     m_bInitCalled = false;\r
114 }\r
115 \r
116 LONG CScrollTool::GetTextWidth(LPCTSTR szText)\r
117 {\r
118         CDC *pDC = GetDC();\r
119         CSize textsize = pDC->GetTextExtent(szText, _tcslen(szText));\r
120         ReleaseDC(pDC);\r
121         return textsize.cx;\r
122 }