OSDN Git Service

Change Dir Structure to be same as TortoiseSVN'
[tortoisegit/TortoiseGitJp.git] / Utils / MiscUI / MessageBox.cpp
diff --git a/Utils/MiscUI/MessageBox.cpp b/Utils/MiscUI/MessageBox.cpp
deleted file mode 100644 (file)
index ff45392..0000000
+++ /dev/null
@@ -1,919 +0,0 @@
-// TortoiseSVN - a Windows shell extension for easy version control\r
-\r
-// Copyright (C) 2003-2008 - TortoiseSVN\r
-\r
-// This program is free software; you can redistribute it and/or\r
-// modify it under the terms of the GNU General Public License\r
-// as published by the Free Software Foundation; either version 2\r
-// of the License, or (at your option) any later version.\r
-\r
-// This program is distributed in the hope that it will be useful,\r
-// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-// GNU General Public License for more details.\r
-\r
-// You should have received a copy of the GNU General Public License\r
-// along with this program; if not, write to the Free Software Foundation,\r
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
-//\r
-#include "StdAfx.h"\r
-//#include "resource.h"                        //if you defined some IDS_MSGBOX_xxxx this include is needed!\r
-#include "messagebox.h"\r
-#include ".\messagebox.h"\r
-\r
-\r
-CMessageBox::CMessageBox(void)\r
-{\r
-       m_hIcon = NULL;\r
-       m_uButton1Ret = 1;\r
-       m_uButton2Ret = 2;\r
-       m_uButton3Ret = 3;\r
-       m_uCancelRet = 0;\r
-       m_bShowCheck = FALSE;\r
-       m_bDestroyIcon = FALSE;\r
-}\r
-\r
-CMessageBox::~CMessageBox(void)\r
-{\r
-       if (m_bDestroyIcon)\r
-               ::DestroyIcon(m_hIcon);\r
-}\r
-\r
-UINT CMessageBox::ShowCheck(HWND hWnd, UINT nMessage, UINT nCaption, int nDef, LPCTSTR icon, UINT nButton1, UINT nButton2, UINT nButton3, LPCTSTR lpRegistry, UINT nCheckMessage/* = NULL*/)\r
-{\r
-       CString sButton1;\r
-       CString sButton2;\r
-       CString sButton3;\r
-       CString sMessage;\r
-       CString sCaption;\r
-       CString nCheckMsg;\r
-       sButton1.LoadString(nButton1);\r
-       sButton2.LoadString(nButton2);\r
-       sButton3.LoadString(nButton3);\r
-       sMessage.LoadString(nMessage);\r
-       sCaption.LoadString(nCaption);\r
-       nCheckMsg.LoadString(nCheckMessage);\r
-       return CMessageBox::ShowCheck(hWnd, sMessage, sCaption, nDef, icon, sButton1, sButton2, sButton3, lpRegistry, nCheckMsg);\r
-}\r
-\r
-UINT CMessageBox::ShowCheck(HWND hWnd, LPCTSTR lpMessage, LPCTSTR lpCaption, int nDef, LPCTSTR icon, LPCTSTR lpButton1, LPCTSTR lpButton2, LPCTSTR lpButton3, LPCTSTR lpRegistry, LPCTSTR lpCheckMessage/* = NULL*/)\r
-{\r
-       //check the registry if we have to show the box or just return with the last used return value\r
-       //this would be the case if the user pressed "do not show again".\r
-       DWORD dwRetVal;\r
-       HKEY hKey;\r
-       CString path;\r
-#ifdef XMESSAGEBOX_APPREGPATH\r
-       path = XMESSAGEBOX_APPREGPATH;\r
-#else\r
-       path = "Software\\";\r
-       path += AfxGetAppName();\r
-#endif\r
-       if (RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_EXECUTE, &hKey)==ERROR_SUCCESS)\r
-       {\r
-               int size = sizeof(dwRetVal);\r
-               DWORD type;\r
-               if (RegQueryValueEx(hKey, lpRegistry, NULL, &type, (BYTE*) &dwRetVal,(LPDWORD) &size)==ERROR_SUCCESS)\r
-               {\r
-                       ASSERT(type==REG_DWORD);\r
-                       RegCloseKey(hKey);\r
-                       return (UINT)dwRetVal;                  //return with the last saved value\r
-               }\r
-               else\r
-               {\r
-                       RegCloseKey(hKey);\r
-               }\r
-       }\r
-\r
-       CMessageBox box;\r
-       box.m_bShowCheck = TRUE;\r
-       box.m_sRegistryValue = lpRegistry;\r
-       if (lpCheckMessage == NULL)\r
-       {\r
-#ifndef IDS_MSGBOX_DONOTSHOWAGAIN\r
-               box.m_sCheckbox = _T("do not show again");\r
-#else\r
-               CString m_i18l;\r
-               m_i18l.LoadString(IDS_MSGBOX_DONOTSHOWAGAIN);\r
-               box.m_sCheckbox = m_i18l;\r
-#endif\r
-       }\r
-       else\r
-               box.m_sCheckbox = lpCheckMessage;\r
-       box.m_sButton1 = lpButton1;\r
-       box.m_sButton2 = lpButton2;\r
-       box.m_sButton3 = lpButton3;\r
-       box.m_hIcon = (HICON)::LoadImage(AfxGetResourceHandle(), icon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
-       if (box.m_hIcon == NULL)\r
-               box.m_hIcon = (HICON)::LoadImage(NULL, icon, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-       else\r
-               box.m_bDestroyIcon = TRUE;\r
-       if (!IsWindow(hWnd))\r
-               hWnd = NULL;\r
-       return box.GoModal(CWnd::FromHandle(hWnd), lpCaption, lpMessage, nDef); \r
-}\r
-\r
-UINT CMessageBox::Show(HWND hWnd, LPCTSTR lpMessage, LPCTSTR lpCaption, int nDef, LPCTSTR icon, LPCTSTR lpButton1, LPCTSTR lpButton2/* = NULL*/, LPCTSTR lpButton3/* = NULL*/)\r
-{\r
-       CMessageBox box;\r
-       box.m_sButton1 = lpButton1;\r
-       box.m_sButton2 = lpButton2;\r
-       box.m_sButton3 = lpButton3;\r
-       box.m_hIcon = (HICON)::LoadImage(AfxGetResourceHandle(), icon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);\r
-       if (box.m_hIcon == NULL)\r
-               box.m_hIcon = (HICON)::LoadImage(NULL, icon, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-       else\r
-               box.m_bDestroyIcon = TRUE;\r
-       if (!IsWindow(hWnd))\r
-               hWnd = NULL;\r
-       return box.GoModal(CWnd::FromHandle(hWnd), lpCaption, lpMessage, nDef);\r
-}\r
-\r
-UINT CMessageBox::Show(HWND hWnd, UINT nMessage, UINT nCaption, int nDef, LPCTSTR icon, UINT nButton1, UINT nButton2, UINT nButton3)\r
-{\r
-       CString sButton1;\r
-       CString sButton2;\r
-       CString sButton3;\r
-       CString sMessage;\r
-       CString sCaption;\r
-       sButton1.LoadString(nButton1);\r
-       sButton2.LoadString(nButton2);\r
-       sButton3.LoadString(nButton3);\r
-       sMessage.LoadString(nMessage);\r
-       sCaption.LoadString(nCaption);\r
-       return CMessageBox::Show(hWnd, sMessage, sCaption, nDef, icon, sButton1, sButton2, sButton3);\r
-}\r
-\r
-\r
-UINT CMessageBox::ShowCheck(HWND hWnd, UINT nMessage, UINT nCaption, UINT uType, LPCTSTR lpRegistry, UINT nCheckMessage)\r
-{\r
-       CString sMessage;\r
-       CString sCaption;\r
-       CString sCheckMsg;\r
-       sMessage.LoadString(nMessage);\r
-       sCaption.LoadString(nCaption);\r
-       sCheckMsg.LoadString(nCheckMessage);\r
-       return CMessageBox::ShowCheck(hWnd, sMessage, sCaption, uType, lpRegistry, sCheckMsg);\r
-}\r
-\r
-UINT CMessageBox::ShowCheck(HWND hWnd, LPCTSTR lpMessage, LPCTSTR lpCaption, UINT uType, LPCTSTR lpRegistry, LPCTSTR lpCheckMessage)\r
-{\r
-       //check the registry if we have to show the box or just return with the last used return value\r
-       //this would be the case if the user pressed "do not show again".\r
-       DWORD dwRetVal;\r
-       HKEY hKey;\r
-       CString path;\r
-#ifdef XMESSAGEBOX_APPREGPATH\r
-       path = XMESSAGEBOX_APPREGPATH;\r
-#else\r
-       path = "Software\\";\r
-       path += AfxGetAppName();\r
-#endif\r
-       if (RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_EXECUTE, &hKey)==ERROR_SUCCESS)\r
-       {\r
-               int size = sizeof(dwRetVal);\r
-               DWORD type;\r
-               if (RegQueryValueEx(hKey, lpRegistry, NULL, &type, (BYTE*) &dwRetVal,(LPDWORD) &size)==ERROR_SUCCESS)\r
-               {\r
-                       ASSERT(type==REG_DWORD);\r
-                       RegCloseKey(hKey);\r
-                       return (UINT)dwRetVal;                  //return with the last saved value\r
-               }\r
-               else\r
-               {\r
-                       RegCloseKey(hKey);\r
-               }\r
-       }\r
-\r
-       CMessageBox box;\r
-       box.m_bShowCheck = TRUE;\r
-       box.m_sRegistryValue = lpRegistry;\r
-       if (lpCheckMessage == NULL)\r
-       {\r
-#ifndef IDS_MSGBOX_DONOTSHOWAGAIN\r
-               box.m_sCheckbox = _T("do not show again");\r
-#else\r
-               CString m_i18l;\r
-               m_i18l.LoadString(IDS_MSGBOX_DONOTSHOWAGAIN);\r
-               box.m_sCheckbox = m_i18l;\r
-#endif\r
-       }\r
-       else\r
-               box.m_sCheckbox = lpCheckMessage;\r
-       if (!IsWindow(hWnd))\r
-               hWnd = NULL;\r
-       return box.GoModal(CWnd::FromHandle(hWnd), lpCaption, lpMessage, box.FillBoxStandard(uType));\r
-}\r
-\r
-UINT CMessageBox::Show(HWND hWnd, UINT nMessage, UINT nCaption, UINT uType, LPCTSTR sHelpPath)\r
-{\r
-       CString sMessage;\r
-       CString sCaption;\r
-       sMessage.LoadString(nMessage);\r
-       sCaption.LoadString(nCaption);\r
-       return CMessageBox::Show(hWnd, sMessage, sCaption, uType, sHelpPath);\r
-}\r
-\r
-UINT CMessageBox::Show(HWND hWnd, LPCTSTR lpMessage, LPCTSTR lpCaption, UINT uType, LPCTSTR sHelpPath)\r
-{\r
-       CMessageBox box;\r
-       \r
-       if (!IsWindow(hWnd))\r
-               hWnd = NULL;\r
-       if (sHelpPath)\r
-               box.SetHelpPath(sHelpPath);\r
-       return box.GoModal(CWnd::FromHandle(hWnd), lpCaption, lpMessage, box.FillBoxStandard(uType));\r
-}\r
-\r
-UINT CMessageBox::Show(HWND hWnd, UINT nMessage, UINT nCaption, UINT uType, UINT nHelpID)\r
-{\r
-       CMessageBox box;\r
-       CString sMessage;\r
-       CString sCaption;\r
-       sMessage.LoadString(nMessage);\r
-       sCaption.LoadString(nCaption);\r
-\r
-       if (!IsWindow(hWnd))\r
-               hWnd = NULL;\r
-       box.SetHelpID(nHelpID);\r
-\r
-       return box.GoModal(CWnd::FromHandle(hWnd), sCaption, sMessage, box.FillBoxStandard(uType));\r
-}\r
-\r
-int CMessageBox::FillBoxStandard(UINT uType)\r
-{\r
-       int ret = 1;\r
-       m_uType = uType;\r
-       m_uCancelRet = IDCANCEL;\r
-       //load the icons according to uType\r
-       switch (uType & 0xf0)\r
-       {\r
-       case MB_ICONEXCLAMATION:\r
-               m_hIcon = (HICON)::LoadImage(NULL, IDI_EXCLAMATION, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-               ::MessageBeep(MB_ICONEXCLAMATION);\r
-               break;\r
-       case MB_ICONASTERISK:\r
-               m_hIcon = (HICON)::LoadImage(NULL, IDI_ASTERISK, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-               ::MessageBeep(MB_ICONASTERISK);\r
-               break;\r
-       case MB_ICONQUESTION:\r
-               m_hIcon = (HICON)::LoadImage(NULL, IDI_QUESTION, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-               ::MessageBeep(MB_ICONQUESTION);\r
-               break;\r
-       case MB_ICONHAND:\r
-               m_hIcon = (HICON)::LoadImage(NULL, IDI_HAND, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);\r
-               ::MessageBeep(MB_ICONHAND);\r
-               break;\r
-       }\r
-       //set up the button texts\r
-       switch (uType & 0xf)\r
-       {\r
-       case MB_ABORTRETRYIGNORE:\r
-#ifndef IDS_MSGBOX_ABORT\r
-               m_sButton1 = "Abort";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_ABORT);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDABORT;\r
-#ifndef IDS_MSGBOX_RETRY\r
-               m_sButton2 = "Retry";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_RETRY);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDRETRY;\r
-#ifndef IDS_MSGBOX_IGNORE\r
-               m_sButton3 = "Ignore";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_IGNORE);\r
-               m_sButton3 = m_i18l;\r
-#endif\r
-               m_uButton3Ret = IDIGNORE;\r
-               break;\r
-       case MB_CANCELTRYCONTINUE:\r
-#ifndef IDS_MSGBOX_CANCEL\r
-               m_sButton1 = "Cancel";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_CANCEL);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDCANCEL;\r
-#ifndef IDS_MSGBOX_TRYAGAIN\r
-               m_sButton2 = "Try Again";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_TRYAGAIN);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDTRYAGAIN;\r
-#ifndef IDS_MSGBOX_CONTINUE\r
-               m_sButton3 = "Continue";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_CONTINUE);\r
-               m_sButton3 = m_i18l;\r
-#endif\r
-               m_uButton3Ret = IDCONTINUE;\r
-               break;\r
-       case MB_OKCANCEL:\r
-#ifndef IDS_MSGBOX_OK\r
-               m_sButton1 = "Ok";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_OK);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDOK;\r
-#ifndef IDS_MSGBOX_CANCEL\r
-               m_sButton2 = "Cancel";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_CANCEL);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDCANCEL;\r
-               break;\r
-       case MB_RETRYCANCEL:\r
-#ifndef IDS_MSGBOX_RETRY\r
-               m_sButton1 = "Retry";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_RETRY);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDRETRY;\r
-#ifndef IDS_MSGBOX_CANCEL\r
-               m_sButton2 = "Cancel";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_CANCEL);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDCANCEL;\r
-               break;\r
-       case MB_YESNO:\r
-#ifndef IDS_MSGBOX_YES\r
-               m_sButton1 = "Yes";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_YES);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDYES;\r
-#ifndef IDS_MSGBOX_NO\r
-               m_sButton2 = "No";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_NO);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDNO;\r
-               break;\r
-       case MB_YESNOCANCEL:\r
-#ifndef IDS_MSGBOX_YES\r
-               m_sButton1 = "Yes";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_YES);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-               m_uButton1Ret = IDYES;\r
-#ifndef IDS_MSGBOX_NO\r
-               m_sButton2 = "No";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_NO);\r
-               m_sButton2 = m_i18l;\r
-#endif\r
-               m_uButton2Ret = IDNO;\r
-#ifndef IDS_MSGBOX_CANCEL\r
-               m_sButton3 = "Cancel";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_CANCEL);\r
-               m_sButton3 = m_i18l;\r
-#endif\r
-               m_uButton3Ret = IDCANCEL;\r
-               break;\r
-       case MB_OK:\r
-       default:\r
-#ifndef IDS_MSGBOX_OK\r
-               m_sButton1 = "Ok";\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_OK);\r
-               m_sButton1 = m_i18l;\r
-#endif\r
-       }\r
-       //now set the default button\r
-       switch (uType & 0xf00)\r
-       {\r
-       case MB_DEFBUTTON2:\r
-               ret = 2;\r
-               break;\r
-       case MB_DEFBUTTON3:\r
-               ret = 3;\r
-               break;\r
-       }\r
-       // do we need to add a help button?\r
-       if (uType & MB_HELP)\r
-       {\r
-               CString sHelpText;\r
-#ifndef IDS_MSGBOX_HELP\r
-               sHelpText = _T("Help");\r
-#else\r
-               m_i18l.LoadString(IDS_MSGBOX_HELP);\r
-               sHelpText = m_i18l;\r
-#endif\r
-               if (m_sButton2.IsEmpty())\r
-               {\r
-                       m_sButton2 = sHelpText;\r
-                       m_uButton2Ret = IDHELP;\r
-               }\r
-               else if (m_sButton3.IsEmpty())\r
-               {\r
-                       m_sButton3 = sHelpText;\r
-                       m_uButton3Ret = IDHELP;\r
-               }\r
-       }\r
-       return ret;\r
-}\r
-\r
-UINT CMessageBox::GoModal(CWnd * pWnd, const CString& title, const CString& msg, int nDefaultButton)\r
-{\r
-       NONCLIENTMETRICS ncm;\r
-       memset(&ncm,0,sizeof(NONCLIENTMETRICS));\r
-       ncm.cbSize = sizeof(NONCLIENTMETRICS);\r
-       SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);\r
-       \r
-    memcpy(&m_LogFont, &(ncm.lfMessageFont), sizeof(LOGFONT));\r
-\r
-       //the problem with the LOGFONT lfHeight is that it is not in pixels,\r
-       //but the dialog template needs the height in pixels.\r
-       //We need to convert those values first:\r
-       CDC * pDC;\r
-       if (pWnd)\r
-               pDC = pWnd->GetDC();\r
-       else\r
-               pDC = GetDesktopWindow()->GetDC();\r
-       int pix = -MulDiv(m_LogFont.lfHeight, 72, GetDeviceCaps(pDC->m_hDC, LOGPIXELSY));\r
-       CDlgTemplate dialogTemplate = CDlgTemplate(title, WS_CAPTION | DS_CENTER,\r
-               0, 0, 0, 0, m_LogFont.lfFaceName, pix);\r
-       dialogTemplate.AddButton(_T("Button1"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | ((nDefaultButton == 1) ? BS_DEFPUSHBUTTON : 0), 0,\r
-               2 + 3, 62, 56, 13, IDC_MESSAGEBOX_BUTTON1);\r
-       dialogTemplate.AddButton(_T("Button2"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | ((nDefaultButton == 2) ? BS_DEFPUSHBUTTON : 0), 0,\r
-               2 + 3, 62, 56, 13, IDC_MESSAGEBOX_BUTTON2);\r
-       dialogTemplate.AddButton(_T("Button3"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | ((nDefaultButton == 3) ? BS_DEFPUSHBUTTON : 0), 0,\r
-               2 + 3, 62, 56, 13, IDC_MESSAGEBOX_BUTTON3);\r
-       dialogTemplate.AddButton(_T("Checkbox"), WS_CHILD | WS_TABSTOP | BS_AUTOCHECKBOX, 0,\r
-               0, 0, 0, 0, IDC_MESSAGEBOX_CHECKBOX);\r
-       \r
-       m_nDefButton = nDefaultButton;\r
-       m_sMessage = msg;\r
-       InitModalIndirect(dialogTemplate, pWnd);\r
-\r
-       return (UINT)DoModal();\r
-}\r
-\r
-void CMessageBox::SetRegistryValue(const CString& sValue, DWORD value)\r
-{\r
-       CString path;\r
-#ifdef XMESSAGEBOX_APPREGPATH\r
-       path = XMESSAGEBOX_APPREGPATH;\r
-#else\r
-       path = "Software\\";\r
-       path += AfxGetAppName();\r
-#endif\r
-       DWORD disp;\r
-       HKEY hKey;\r
-       if (RegCreateKeyEx(HKEY_CURRENT_USER, path, 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &disp)!=ERROR_SUCCESS)\r
-       {\r
-               return;\r
-       }\r
-       RegSetValueEx(hKey, sValue, 0, REG_DWORD,(const BYTE*) &value, sizeof(value));\r
-       RegCloseKey(hKey);\r
-}\r
-\r
-CSize CMessageBox::GetTextSize(const CString& str)\r
-{\r
-       CRect rect;\r
-       GetWindowRect(&rect);\r
-\r
-       CDC * pDC = GetDC();\r
-\r
-       CDC memDC;\r
-       CBitmap bitmap;\r
-       memDC.CreateCompatibleDC(pDC);\r
-       bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());\r
-       CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);\r
-\r
-       //get the minimum size of the rectangle of the tooltip\r
-       CSize sz = DrawHTML(&memDC, rect, str, m_LogFont, TRUE);\r
-\r
-       memDC.SelectObject(pOldBitmap);\r
-       memDC.DeleteDC();\r
-       bitmap.DeleteObject();\r
-\r
-       ReleaseDC(pDC);\r
-\r
-       return sz;\r
-}\r
-\r
-CSize CMessageBox::GetIconSize(HICON hIcon)\r
-{\r
-       ICONINFO ii;\r
-       CSize sz (0, 0);\r
-\r
-       if (hIcon != NULL)\r
-       {\r
-               //get icon dimensions\r
-               ::SecureZeroMemory(&ii, sizeof(ICONINFO));\r
-               if (::GetIconInfo(hIcon, &ii))\r
-               {\r
-                       sz.cx = (DWORD)(ii.xHotspot * 2);\r
-                       sz.cy = (DWORD)(ii.yHotspot * 2);\r
-                       //release icon mask bitmaps\r
-                       if(ii.hbmMask)\r
-                               ::DeleteObject(ii.hbmMask);\r
-                       if(ii.hbmColor)\r
-                               ::DeleteObject(ii.hbmColor);\r
-               }\r
-       }\r
-       m_szIcon = sz;\r
-       return sz;\r
-}\r
-\r
-CSize CMessageBox::GetButtonSize()\r
-{\r
-       CSize sz;\r
-       int nButtons = 0;               //number of buttons - 1\r
-\r
-       SetDlgItemText(IDC_MESSAGEBOX_BUTTON1, m_sButton1);\r
-       SetDlgItemText(IDC_MESSAGEBOX_BUTTON2, m_sButton2);\r
-       //GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, 1);\r
-       SetDlgItemText(IDC_MESSAGEBOX_BUTTON3, m_sButton3);\r
-       SetDlgItemText(IDC_MESSAGEBOX_CHECKBOX, m_sCheckbox);\r
-       \r
-       CSize sz1 = GetTextSize(m_sButton1);\r
-       CSize sz2 = GetTextSize(m_sButton2);\r
-       CSize sz3 = GetTextSize(m_sButton3);\r
-\r
-       sz1.cx += 2*MESSAGEBOX_BUTTONX;\r
-       sz1.cy += 2*MESSAGEBOX_BUTTONY;\r
-\r
-       if (sz2.cx)\r
-       {\r
-               sz2.cx += 2*MESSAGEBOX_BUTTONX;\r
-               sz2.cy += 2*MESSAGEBOX_BUTTONY;\r
-               nButtons++;\r
-       }\r
-       if (sz3.cx)\r
-       {\r
-               sz3.cx += 2*MESSAGEBOX_BUTTONX;\r
-               sz3.cy += 2*MESSAGEBOX_BUTTONY;\r
-               nButtons++;\r
-       }\r
-       \r
-       GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->MoveWindow(0, 0, sz1.cx, sz1.cy);\r
-       GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->MoveWindow(0, 0, sz2.cx, sz2.cy);\r
-       GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->MoveWindow(0, 0, sz3.cx, sz3.cy);\r
-\r
-\r
-       sz.cx = sz1.cx + sz2.cx + sz3.cx + (nButtons * MESSAGEBOX_BUTTONMARGIN);\r
-       sz.cy = max(sz1.cy, sz2.cy);\r
-       sz.cy = max(sz.cy, sz3.cy);\r
-       m_szButtons = sz;\r
-       if (m_bShowCheck)\r
-       {\r
-               CSize szCheck = GetTextSize(m_sCheckbox);\r
-               szCheck.cx += 2*GetSystemMetrics(SM_CXMENUCHECK);\r
-               szCheck.cy += 2*MESSAGEBOX_BUTTONY;\r
-               sz.cx = max(sz.cx, szCheck.cx);\r
-               sz.cy += szCheck.cy + MESSAGEBOX_BUTTONCHECKMARGIN;\r
-               GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->MoveWindow(0, 0, szCheck.cx, szCheck.cy);\r
-       }\r
-       m_szAllButtons = sz;\r
-       return sz;\r
-}\r
-\r
-BEGIN_MESSAGE_MAP(CMessageBox, CDialog)\r
-       ON_WM_PAINT()\r
-       ON_WM_MOUSEMOVE()\r
-       ON_WM_LBUTTONUP()\r
-       ON_BN_CLICKED(IDC_MESSAGEBOX_BUTTON1, OnButton1)\r
-       ON_BN_CLICKED(IDC_MESSAGEBOX_BUTTON2, OnButton2)\r
-       ON_BN_CLICKED(IDC_MESSAGEBOX_BUTTON3, OnButton3)\r
-END_MESSAGE_MAP()\r
-\r
-void CMessageBox::OnPaint()\r
-{\r
-       CPaintDC dc(this); // device context for painting\r
-\r
-\r
-       CRect rect;\r
-       CRect drawrect;\r
-       GetClientRect(&rect);\r
-       GetClientRect(&drawrect);\r
-\r
-       //create a memory device-context. This is done to help reduce\r
-       //screen flicker, since we will paint the entire control to the\r
-       //off screen device context first.\r
-       CDC memDC;\r
-       CBitmap bitmap;\r
-       memDC.CreateCompatibleDC(&dc);\r
-       bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());\r
-       CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); \r
-       \r
-       memDC.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dc, 0,0, SRCCOPY);\r
-\r
-       memDC.SetBkMode(TRANSPARENT);\r
-       memDC.SetBkColor(GetSysColor(COLOR_WINDOW));\r
-       memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); \r
-\r
-       //OnDrawBackground();\r
-       drawrect.DeflateRect(MESSAGEBOX_BORDERMARGINX, MESSAGEBOX_BORDERMARGINY);\r
-       if (m_hIcon != NULL)\r
-       {\r
-               DrawIconEx(memDC.m_hDC, drawrect.left, drawrect.top + \r
-                       ((drawrect.Height() - m_szAllButtons.cy - MESSAGEBOX_TEXTBUTTONMARGIN - m_szIcon.cy) / 2), \r
-                       m_hIcon, m_szIcon.cx, m_szIcon.cy, 0, NULL, DI_NORMAL);\r
-\r
-               drawrect.left += m_szIcon.cx + MESSAGEBOX_ICONMARGIN; \r
-       }\r
-\r
-\r
-       DrawHTML(&memDC, drawrect, m_sMessage, m_LogFont);\r
-       \r
-\r
-       //Copy the memory device context back into the original DC.\r
-       dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC, 0,0, SRCCOPY);\r
-       \r
-       //Cleanup resources.\r
-       memDC.SelectObject(pOldBitmap);\r
-       memDC.DeleteDC();\r
-       bitmap.DeleteObject(); \r
-\r
-\r
-}\r
-\r
-void CMessageBox::OnMouseMove(UINT nFlags, CPoint point)\r
-{\r
-       if (IsPointOverALink(point))\r
-       {\r
-               m_Cursor.SetCursor(IDC_HAND);\r
-       }\r
-       else\r
-       {\r
-               m_Cursor.Restore();     \r
-       }\r
-\r
-       __super::OnMouseMove(nFlags, point);\r
-}\r
-\r
-void CMessageBox::OnLButtonUp(UINT nFlags, CPoint point)\r
-{\r
-       if (IsPointOverALink(point))\r
-       {\r
-               CString url = GetLinkForPoint(point);\r
-               ShellExecute(NULL, _T("open"), url, NULL,NULL, 0);\r
-       }\r
-\r
-       __super::OnLButtonUp(nFlags, point);\r
-}\r
-\r
-void CMessageBox::OnButton1()\r
-{\r
-       if (GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->SendMessage(BM_GETCHECK, 0, 0)==BST_CHECKED)\r
-               SetRegistryValue(m_sRegistryValue, m_uButton1Ret);\r
-       EndDialog(m_uButton1Ret);\r
-}\r
-\r
-void CMessageBox::OnButton2()\r
-{\r
-       if (GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->SendMessage(BM_GETCHECK, 0, 0)==BST_CHECKED)\r
-               SetRegistryValue(m_sRegistryValue, m_uButton2Ret);\r
-       if ((m_uButton2Ret == IDHELP)&&(!m_sHelpPath.IsEmpty()))\r
-       {\r
-               typedef HWND (WINAPI* FPHH)(HWND, LPCWSTR, UINT, DWORD);\r
-               FPHH pHtmlHelp=NULL; // Function pointer\r
-               HINSTANCE hInstHtmlHelp = LoadLibrary(_T("HHCtrl.ocx"));\r
-               HWND hHelp = NULL;\r
-               if (hInstHtmlHelp != NULL)\r
-               {\r
-                       (FARPROC&)pHtmlHelp = GetProcAddress(hInstHtmlHelp, "HtmlHelpW");\r
-                       if (pHtmlHelp)\r
-                               hHelp = pHtmlHelp(m_hWnd, (LPCTSTR)m_sHelpPath, HH_DISPLAY_TOPIC, NULL);\r
-               }\r
-               if (hHelp == NULL)\r
-                       ::MessageBox(m_hWnd, _T("could not show help file"), _T("Help"), MB_ICONERROR);\r
-       }\r
-       else if (m_uButton2Ret == IDHELP)\r
-       {\r
-               OnHelp();\r
-       }\r
-       else\r
-               EndDialog(m_uButton2Ret);\r
-}\r
-\r
-void CMessageBox::OnButton3()\r
-{\r
-       if (GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->SendMessage(BM_GETCHECK, 0, 0)==BST_CHECKED)\r
-               SetRegistryValue(m_sRegistryValue, m_uButton3Ret);\r
-       if ((m_uButton3Ret == IDHELP)&&(!m_sHelpPath.IsEmpty()))\r
-       {\r
-               typedef HWND (WINAPI* FPHH)(HWND, LPCWSTR, UINT, DWORD);\r
-               FPHH pHtmlHelp=NULL; // Function pointer\r
-               HINSTANCE hInstHtmlHelp = LoadLibrary(_T("HHCtrl.ocx"));\r
-               HWND hHelp = NULL;\r
-               if (hInstHtmlHelp != NULL)\r
-               {\r
-                       (FARPROC&)pHtmlHelp = GetProcAddress(hInstHtmlHelp, "HtmlHelpW");\r
-                       if (pHtmlHelp)\r
-                               hHelp = pHtmlHelp(m_hWnd, (LPCTSTR)m_sHelpPath, HH_DISPLAY_TOPIC, NULL);\r
-               }\r
-               if (hHelp == NULL)\r
-                       ::MessageBox(m_hWnd, _T("could not show help file"), _T("Help"), MB_ICONERROR);\r
-       }\r
-       else if (m_uButton3Ret == IDHELP)\r
-       {\r
-               OnHelp();\r
-       }\r
-       else\r
-               EndDialog(m_uButton3Ret);\r
-}\r
-\r
-void CMessageBox::OnCancel()\r
-{\r
-       if (m_uCancelRet == IDCANCEL)\r
-               EndDialog(m_uCancelRet);\r
-       //__super::OnCancel();\r
-}\r
-\r
-BOOL CMessageBox::OnInitDialog()\r
-{\r
-       __super::OnInitDialog();\r
-\r
-       CRect rect(0, 0, 0, 0);\r
-\r
-       //determine the required size of the message box\r
-       CSize szText = GetTextSize(m_sMessage);\r
-       CSize szIcon = GetIconSize(m_hIcon);\r
-       CSize szButtons = GetButtonSize();\r
-\r
-       CSize szIconText;\r
-       szIconText.cx = szText.cx + szIcon.cx + ((szIcon.cx == 0) ? MESSAGEBOX_ICONMARGIN : (2*MESSAGEBOX_ICONMARGIN));\r
-       szIconText.cy = max(szIcon.cy, szText.cy);\r
-\r
-       rect.right = max(szButtons.cx, szIconText.cx);\r
-       rect.right += 2*GetSystemMetrics(SM_CXBORDER);\r
-       rect.right += 2*MESSAGEBOX_BORDERMARGINX;\r
-       rect.bottom = szIconText.cy;\r
-       rect.bottom += szButtons.cy;\r
-       rect.bottom += 2*MESSAGEBOX_BORDERMARGINY + MESSAGEBOX_TEXTBUTTONMARGIN;\r
-       rect.bottom += GetSystemMetrics(SM_CYCAPTION);\r
-       rect.bottom += 2*GetSystemMetrics(SM_CYBORDER);\r
-\r
-       MoveWindow(rect);\r
-       CenterWindow();\r
-       \r
-       GetClientRect(rect);\r
-       \r
-       //now size and position the buttons as we need them\r
-       ASSERT(!m_sButton1.IsEmpty());          //at least the first button must be there!\r
-       if (m_sButton2.IsEmpty())\r
-       {\r
-               //only one button\r
-               CRect rt;\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->GetWindowRect(rt);\r
-               ScreenToClient(rt);\r
-               rt.MoveToX(rect.left + ((rect.Width() - m_szButtons.cx)/2));\r
-               rt.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->MoveWindow(rt);\r
-               //hide the other two buttons\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->ShowWindow(SW_HIDE);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->ShowWindow(SW_HIDE);\r
-       }\r
-       else if (m_sButton3.IsEmpty())\r
-       {\r
-               //two buttons\r
-               CRect rt1;\r
-               CRect rt2;\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->GetWindowRect(rt1);\r
-               ScreenToClient(rt1);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->GetWindowRect(rt2);\r
-               ScreenToClient(rt2);\r
-               rt1.MoveToX(rect.left + ((rect.Width() - m_szButtons.cx)/2));\r
-               rt1.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               rt2.MoveToX(rt1.right + MESSAGEBOX_BUTTONMARGIN);\r
-               rt2.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->MoveWindow(rt1);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->MoveWindow(rt2);\r
-               //hide the third button\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->ShowWindow(SW_HIDE);\r
-       }\r
-       else\r
-       {\r
-               //three buttons\r
-               CRect buttonrect;\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->GetWindowRect(buttonrect);\r
-               CRect rt1;\r
-               CRect rt2;\r
-               CRect rt3;\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->GetWindowRect(rt1);\r
-               ScreenToClient(rt1);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->GetWindowRect(rt2);\r
-               ScreenToClient(rt2);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->GetWindowRect(rt3);\r
-               ScreenToClient(rt3);\r
-               rt1.MoveToX(rect.left + ((rect.Width() - m_szButtons.cx)/2));\r
-               rt1.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               rt2.MoveToX(rt1.right + MESSAGEBOX_BUTTONMARGIN);\r
-               rt2.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               rt3.MoveToX(rt2.right + MESSAGEBOX_BUTTONMARGIN);\r
-               rt3.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - m_szButtons.cy);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->MoveWindow(rt1);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->MoveWindow(rt2);\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->MoveWindow(rt3);\r
-       }\r
-       if (m_bShowCheck)\r
-       {\r
-               CRect rt;\r
-               GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->GetWindowRect(rt);\r
-               ScreenToClient(rt);\r
-               rt.MoveToX(rect.left + MESSAGEBOX_BORDERMARGINX/*+ ((rect.Width() - szButtons.cx)/2)*/);\r
-               rt.MoveToY(rect.bottom - MESSAGEBOX_BORDERMARGINY - szButtons.cy);\r
-               GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->MoveWindow(rt);\r
-               GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->ShowWindow(SW_SHOW);\r
-       }\r
-       else\r
-               GetDlgItem(IDC_MESSAGEBOX_CHECKBOX)->ShowWindow(SW_HIDE);\r
-\r
-       if (m_nDefButton == 1)\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON1)->SetFocus();\r
-       if (m_nDefButton == 2)\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON2)->SetFocus();\r
-       if (m_nDefButton == 3)\r
-               GetDlgItem(IDC_MESSAGEBOX_BUTTON3)->SetFocus();\r
-\r
-       SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);\r
-       SetForegroundWindow();\r
-       SetFocus(); //Just playing safe\r
-\r
-       return FALSE;  // return TRUE unless you set the focus to a control\r
-       // EXCEPTION: OCX Property Pages should return FALSE\r
-}\r
-\r
-BOOL CMessageBox::PreTranslateMessage(MSG* pMsg)\r
-{\r
-       if (pMsg->message == WM_KEYDOWN)\r
-       {\r
-               switch (pMsg->wParam)\r
-               {\r
-               case 'C':\r
-               case VK_INSERT:\r
-                       {\r
-                               if (GetAsyncKeyState(VK_CONTROL)&0x8000)\r
-                               {\r
-                                       CStringA sClipboard = CStringA(m_sMessage);\r
-                                       if (OpenClipboard())\r
-                                       {\r
-                                               EmptyClipboard();\r
-                                               HGLOBAL hClipboardData;\r
-                                               hClipboardData = GlobalAlloc(GMEM_DDESHARE, sClipboard.GetLength()+1);\r
-                                               char * pchData;\r
-                                               pchData = (char*)GlobalLock(hClipboardData);\r
-                                               strcpy_s(pchData, sClipboard.GetLength()+1, (LPCSTR)sClipboard);\r
-                                               GlobalUnlock(hClipboardData);\r
-                                               SetClipboardData(CF_TEXT,hClipboardData);\r
-                                               CloseClipboard();\r
-                                       }\r
-                                       return TRUE;\r
-                               }\r
-                       }\r
-                       break;\r
-               case VK_ESCAPE:\r
-                       {\r
-                               switch (m_uType & 0xf)\r
-                               {\r
-                               case MB_ABORTRETRYIGNORE:\r
-                                       EndDialog(m_uButton1Ret);\r
-                                       break;\r
-                               case MB_CANCELTRYCONTINUE:\r
-                                       EndDialog(m_uButton1Ret);\r
-                                       break;\r
-                               case MB_OKCANCEL:\r
-                                       EndDialog(m_uButton2Ret);\r
-                                       break;\r
-                               case MB_RETRYCANCEL:\r
-                                       EndDialog(m_uButton2Ret);\r
-                                       break;\r
-                               case MB_YESNO:\r
-                                       EndDialog(m_uButton2Ret);\r
-                                       break;\r
-                               case MB_YESNOCANCEL:\r
-                                       EndDialog(m_uButton3Ret);\r
-                                       break;\r
-                               }\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-\r
-       return __super::PreTranslateMessage(pMsg);\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r