Index: src/ch/TMsgBox.cpp
===================================================================
diff -u -N
--- src/ch/TMsgBox.cpp	(revision 0)
+++ src/ch/TMsgBox.cpp	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -0,0 +1,353 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#include "stdafx.h"
+#include "TMsgBox.h"
+#include "ch.h"
+
+using namespace ictranslate;
+
+IMPLEMENT_DYNAMIC(TMsgBox, CLanguageDialog)
+
+BEGIN_MESSAGE_MAP(TMsgBox, CLanguageDialog)
+	ON_BN_CLICKED(IDC_FIRST_BUTTON, &TMsgBox::OnFirstButtonClicked)
+	ON_BN_CLICKED(IDC_SECOND_BUTTON, &TMsgBox::OnSecondButtonClicked)
+	ON_BN_CLICKED(IDC_THIRD_BUTTON, &TMsgBox::OnThirdButtonClicked)
+	ON_NOTIFY(EN_REQUESTRESIZE, IDC_MSG_RICHEDIT, OnRichEditResize)
+	ON_NOTIFY(EN_REQUESTRESIZE, IDC_MEASURE_RICHEDIT, OnRichEditResize)
+END_MESSAGE_MAP()
+
+TMsgBox::TMsgBox(UINT uiMsgResourceID, EButtonConfig eButtons, EIconConfig eIcon, CWnd* pParent /*= NULL*/) :
+	CLanguageDialog(IDD_MSGBOX_DIALOG, pParent),
+	m_eButtons(eButtons),
+	m_eIcon(eIcon),
+	m_rcRichEdit(0,0,0,0)
+{
+	m_strMessageText = GetResManager().LoadString(uiMsgResourceID);
+}
+
+TMsgBox::TMsgBox(const CString& strMessage, EButtonConfig eButtons, EIconConfig eIcon, CWnd* pParent /*= NULL*/) :
+	CLanguageDialog(IDD_MSGBOX_DIALOG, pParent),
+	m_strMessageText(strMessage),
+	m_eButtons(eButtons),
+	m_eIcon(eIcon)
+{
+}
+
+TMsgBox::~TMsgBox()
+{
+}
+
+void TMsgBox::DoDataExchange(CDataExchange* pDX)
+{
+	CLanguageDialog::DoDataExchange(pDX);
+
+	DDX_Control(pDX, IDC_MSG_RICHEDIT, m_ctlRichEdit);
+	DDX_Control(pDX, IDC_FIRST_BUTTON, m_ctlButton1);
+	DDX_Control(pDX, IDC_SECOND_BUTTON, m_ctlButton2);
+	DDX_Control(pDX, IDC_THIRD_BUTTON, m_ctlButton3);
+	DDX_Control(pDX, IDC_BASIC_CHECK, m_ctlCheck);
+	DDX_Control(pDX, IDC_IMAGE_STATIC, m_ctlImage);
+	DDX_Control(pDX, IDC_MEASURE_RICHEDIT, m_ctlMeasureRichEdit);
+}
+
+BOOL TMsgBox::OnInitDialog()
+{
+	CLanguageDialog::OnInitDialog();
+
+	m_ctlMeasureRichEdit.SetEventMask(m_ctlRichEdit.GetEventMask() | ENM_REQUESTRESIZE);
+
+	AddResizableControl(IDC_IMAGE_STATIC, 0.0, 0.0, 0.0, 0.0);
+	AddResizableControl(IDC_MSG_RICHEDIT, 0.0, 0.0, 1.0, 1.0);
+	AddResizableControl(IDC_FIRST_BUTTON, 1.0, 1.0, 0.0, 0.0);
+	AddResizableControl(IDC_SECOND_BUTTON, 1.0, 1.0, 0.0, 0.0);
+	AddResizableControl(IDC_THIRD_BUTTON, 1.0, 1.0, 0.0, 0.0);
+	AddResizableControl(IDC_BASIC_CHECK, 0.0, 1.0, 1.0, 0.0);
+
+	InitializeResizableControls();
+
+	m_ctlRichEdit.GetWindowRect(&m_rcRichEdit);
+	ScreenToClient(&m_rcRichEdit);
+
+	// initialize controls' texts
+	InitializeControls();
+
+	return TRUE;
+}
+
+void TMsgBox::OnFirstButtonClicked()
+{
+	const int iUndefinedResult = IDCANCEL;
+
+	switch(m_eButtons)
+	{
+	case eOk:
+		EndDialog(iUndefinedResult);
+		break;
+	case eCancel:
+		EndDialog(iUndefinedResult);
+		break;
+	case eOkCancel:
+		EndDialog(iUndefinedResult);
+		break;
+	case eYesNo:
+		EndDialog(iUndefinedResult);
+		break;
+	case eYesNoCancel:
+		EndDialog(IDYES);
+		break;
+
+	default:
+		{
+			_ASSERTE(FALSE);		// unsupported option
+			EndDialog(iUndefinedResult);
+		}
+	}
+}
+
+void TMsgBox::OnSecondButtonClicked()
+{
+	const int iUndefinedResult = IDCANCEL;
+
+	// the middle button
+	switch(m_eButtons)
+	{
+	case eOk:
+		EndDialog(iUndefinedResult);
+		break;
+	case eCancel:
+		EndDialog(iUndefinedResult);
+		break;
+	case eOkCancel:
+		EndDialog(IDOK);
+		break;
+	case eYesNo:
+		EndDialog(IDYES);
+		break;
+	case eYesNoCancel:
+		EndDialog(IDNO);
+		break;
+
+	default:
+		{
+			_ASSERTE(FALSE);		// unsupported option
+			EndDialog(iUndefinedResult);
+		}
+	}
+}
+
+void TMsgBox::OnThirdButtonClicked()
+{
+	const int iUndefinedResult = IDCANCEL;
+
+	// the rightmost button
+	switch(m_eButtons)
+	{
+	case eOk:
+		EndDialog(IDOK);
+		break;
+	case eCancel:
+		EndDialog(IDCANCEL);
+		break;
+	case eOkCancel:
+		EndDialog(IDCANCEL);
+		break;
+	case eYesNo:
+		EndDialog(IDNO);
+		break;
+	case eYesNoCancel:
+		EndDialog(IDCANCEL);
+		break;
+
+	default:
+		{
+			_ASSERTE(FALSE);		// unsupported option
+			EndDialog(iUndefinedResult);
+		}
+	}
+}
+
+void TMsgBox::SetCheckBoxMessage(UINT uiMsgResourceID)
+{
+	m_strCheckboxText = GetResManager().LoadString(uiMsgResourceID);
+}
+
+void TMsgBox::SetCheckBoxMessage(const CString& strCheckboxMessage)
+{
+	m_strCheckboxText = strCheckboxMessage;
+}
+
+void TMsgBox::InitializeControls()
+{
+	m_ctlRichEdit.SetWindowText(m_strMessageText);
+	m_ctlMeasureRichEdit.SetWindowText(m_strMessageText);
+
+	HICON hIcon = NULL;
+	switch(m_eIcon)
+	{
+	case eIcon_Warning:
+		hIcon = AfxGetApp()->LoadStandardIcon(IDI_WARNING);
+		break;
+
+	case eIcon_Error:
+		hIcon = AfxGetApp()->LoadStandardIcon(IDI_ERROR);
+		break;
+
+	case eIcon_Info:
+	default:
+		hIcon = AfxGetApp()->LoadStandardIcon(IDI_INFORMATION);
+		break;
+	}
+
+	m_ctlImage.SetIcon(hIcon);
+
+	if(m_strCheckboxText.IsEmpty())
+		m_ctlCheck.ShowWindow(SW_HIDE);
+	else
+		m_ctlCheck.SetWindowText(m_strCheckboxText);
+
+	switch(m_eButtons)
+	{
+	case eOk:
+		m_ctlButton1.ShowWindow(SW_HIDE);
+		m_ctlButton2.ShowWindow(SW_HIDE);
+		m_ctlButton3.SetWindowText(GetResManager().LoadString(IDS_OK_STRING));
+		break;
+	case eOkCancel:
+		m_ctlButton1.ShowWindow(SW_HIDE);
+		m_ctlButton2.SetWindowText(GetResManager().LoadString(IDS_OK_STRING));
+		m_ctlButton3.SetWindowText(GetResManager().LoadString(IDS_CANCEL_STRING));
+		break;
+	case eYesNo:
+		m_ctlButton1.ShowWindow(SW_HIDE);
+		m_ctlButton2.SetWindowText(GetResManager().LoadString(IDS_YES_STRING));
+		m_ctlButton3.SetWindowText(GetResManager().LoadString(IDS_NO_STRING));
+		break;
+	case eYesNoCancel:
+		m_ctlButton1.SetWindowText(GetResManager().LoadString(IDS_YES_STRING));
+		m_ctlButton2.SetWindowText(GetResManager().LoadString(IDS_NO_STRING));
+		m_ctlButton3.SetWindowText(GetResManager().LoadString(IDS_CANCEL_STRING));
+		break;
+
+	case eCancel:
+	default:
+		m_ctlButton1.ShowWindow(SW_HIDE);
+		m_ctlButton2.ShowWindow(SW_HIDE);
+		m_ctlButton3.SetWindowText(GetResManager().LoadString(IDS_CANCEL_STRING));
+		break;
+	}
+}
+
+void TMsgBox::OnRichEditResize(NMHDR* pNMHDR, LRESULT* pResult)
+{
+	REQRESIZE* pResize = (REQRESIZE*)pNMHDR;
+
+	if(pResize && !m_rcRichEdit.IsRectNull())
+	{
+		if(pNMHDR->idFrom == IDC_MEASURE_RICHEDIT)
+		{
+			// get current monitor's resolution (and an aspect ratio)
+			CSize sizeMax = GetMaxSize();
+
+			// new rich edit control width/height suggestion
+			int iSuggestedWidth = pResize->rc.right - pResize->rc.left;
+			int iSuggestedHeight = pResize->rc.bottom - pResize->rc.top;
+			int iSuggestedArea = iSuggestedWidth * iSuggestedHeight;
+
+			// calculate approximate new height/width of a control with monitor's aspect ratio
+			// with total area similar to the suggested one
+			int iCalcWidth = (int)sqrt((double)sizeMax.cx * (double)iSuggestedArea / (double)sizeMax.cy);
+			int iCalcHeight = (int)sqrt((double)sizeMax.cy * (double)iSuggestedArea / (double)sizeMax.cx);
+
+			// calculate control size difference to apply to the dialog size
+			int iWidthDiff = iCalcWidth - m_rcRichEdit.Width();
+			int iHeightDiff = iCalcHeight - m_rcRichEdit.Height();
+
+			// and apply the diff
+			CRect rcThis(0,0,0,0);
+			GetWindowRect(&rcThis);
+
+			int iNewWidth = rcThis.Width() + iWidthDiff;
+			int iNewHeight = rcThis.Height() + iHeightDiff;
+
+			// make sure we don't exceed the max size
+			if(iNewHeight > sizeMax.cy)
+				iNewHeight = sizeMax.cy;
+			if(iNewWidth > sizeMax.cx)
+				iNewWidth = sizeMax.cx;
+
+			// move window
+			SetWindowPos(NULL, 0, 0, iNewWidth, iNewHeight, SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE);
+
+			// update richedit size
+			m_ctlRichEdit.GetWindowRect(&m_rcRichEdit);
+			ScreenToClient(&m_rcRichEdit);
+
+			// and request another resize (now on the real richedit)
+			m_ctlRichEdit.SetEventMask(m_ctlRichEdit.GetEventMask() | ENM_REQUESTRESIZE);
+			m_ctlRichEdit.RequestResize();
+
+			m_ctlMeasureRichEdit.SetEventMask(m_ctlMeasureRichEdit.GetEventMask() & ~ENM_REQUESTRESIZE);
+		}
+		else
+		{
+			int iWidthDiff = pResize->rc.right - pResize->rc.left - m_rcRichEdit.Width();
+			int iHeightDiff = pResize->rc.bottom - pResize->rc.top - m_rcRichEdit.Height();
+
+			CRect rcThis(0,0,0,0);
+			GetWindowRect(&rcThis);
+
+			SetWindowPos(NULL, 0, 0, rcThis.Width() + iWidthDiff, rcThis.Height() + iHeightDiff, SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE);
+
+			m_ctlRichEdit.SetEventMask(m_ctlRichEdit.GetEventMask() & ~ENM_REQUESTRESIZE);
+		}
+	}
+
+	if(pResult)
+		*pResult = 0;
+}
+
+CSize TMsgBox::GetMaxSize()
+{
+	CSize sizeMax = CSize(800, 600);
+
+	HMONITOR hMonitor = MonitorFromWindow(GetSafeHwnd(), MONITOR_DEFAULTTONEAREST);
+	if(hMonitor)
+	{
+		MONITORINFO mi;
+		mi.cbSize = sizeof(MONITORINFO);
+
+		if(GetMonitorInfo(hMonitor, &mi))
+		{
+			sizeMax.cx = (int)((mi.rcWork.right - mi.rcWork.left) * 0.8);
+			sizeMax.cy = (int)((mi.rcWork.bottom - mi.rcWork.top) * 0.8);
+		}
+	}
+	else
+	{
+		RECT rcArea = { 0, 0, 0, 0 };
+
+		if(SystemParametersInfo(SPI_GETWORKAREA, 0, &rcArea, 0))
+		{
+			sizeMax.cx = (int)((rcArea.right - rcArea.left) * 0.8);
+			sizeMax.cy = (int)((rcArea.bottom - rcArea.top) * 0.8);
+		}
+	}
+
+	return sizeMax;
+}
Index: src/ch/TMsgBox.h
===================================================================
diff -u -N
--- src/ch/TMsgBox.h	(revision 0)
+++ src/ch/TMsgBox.h	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -0,0 +1,87 @@
+// ============================================================================
+//  Copyright (C) 2001-2014 by Jozef Starosczyk
+//  ixen@copyhandler.com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
+#ifndef __TMSGBOX_H__
+#define __TMSGBOX_H__
+
+#include "..\libictranslate\LanguageDialog.h"
+
+class TMsgBox : public ictranslate::CLanguageDialog
+{
+public:
+	enum EButtonConfig
+	{
+		eOk,
+		eCancel,
+		eOkCancel,
+		eYesNo,
+		eYesNoCancel
+	};
+
+	enum EIconConfig
+	{
+		eIcon_Info,
+		eIcon_Warning,
+		eIcon_Error
+	};
+
+public:
+	TMsgBox(UINT uiMsgResourceID, EButtonConfig eButtons, EIconConfig eIcon, CWnd* pParent = NULL);
+	TMsgBox(const CString& strMessage, EButtonConfig eButtons, EIconConfig eIcon, CWnd* pParent = NULL);
+	virtual ~TMsgBox();
+
+	void SetCheckBoxMessage(UINT uiMsgResourceID);
+	void SetCheckBoxMessage(const CString& strCheckboxMessage);
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);
+	virtual BOOL OnInitDialog();
+
+	void InitializeControls();
+
+	void OnFirstButtonClicked();
+	void OnSecondButtonClicked();
+	void OnThirdButtonClicked();
+	void OnRichEditResize(NMHDR* pNMHDR, LRESULT* pResult);
+
+	CSize GetMaxSize();
+
+private:
+	CRichEditCtrl m_ctlRichEdit;
+	CRichEditCtrl m_ctlMeasureRichEdit;
+	CButton m_ctlButton1;
+	CButton m_ctlButton2;
+	CButton m_ctlButton3;
+	CButton m_ctlCheck;
+	CStatic m_ctlImage;
+
+	CString m_strMessageText;
+
+	EIconConfig m_eIcon;
+	EButtonConfig m_eButtons;
+	
+	CString m_strCheckboxText;
+
+	CRect m_rcRichEdit;
+
+protected:
+	DECLARE_MESSAGE_MAP()
+	DECLARE_DYNAMIC(TMsgBox)
+};
+
+#endif
Index: src/ch/ch.cpp
===================================================================
diff -u -N -r7b830c34855c8aaa81aac2c6e0ca0fa6bae95e66 -r096451721a732567aad7e103bfe2d0a9f2f32c95
--- src/ch/ch.cpp	(.../ch.cpp)	(revision 7b830c34855c8aaa81aac2c6e0ca0fa6bae95e66)
+++ src/ch/ch.cpp	(.../ch.cpp)	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -35,6 +35,7 @@
 #include "../libchcore/ISerializerContainer.h"
 #include "../libchcore/ISerializerRowData.h"
 #include "../libchcore/TFileInfo.h"
+#include "TMsgBox.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -262,6 +263,7 @@
 
 	return FALSE;
 #else
+
 	// ================================= Crash handling =======================================
 	SetUnhandledExceptionFilter(&MyUnhandledExceptionFilter);
 
@@ -408,8 +410,27 @@
 	// Set this to include all the common control classes you want to use
 	// in your application.
 	InitCtrls.dwICC = ICC_WIN95_CLASSES;
-	InitCommonControlsEx(&InitCtrls);
+	if(!InitCommonControlsEx(&InitCtrls))
+	{
+		LOG_ERROR(_T("Cannot initialize common controls."));
+		MsgBox(IDS_ERROR_INITIALIZING_COMMON_CONTROLS, MB_OK | MB_ICONERROR);
+		return FALSE;
+	}
 
+	if(!AfxInitRichEdit2())
+	{
+		LOG_ERROR(_T("Cannot initialize rich edit control."));
+		MsgBox(IDS_ERROR_INITIALIZING_RICH_EDIT_CONTROL, MB_OK | MB_ICONERROR);
+		return FALSE;
+	}
+
+	// tmp
+	//CString strLongText = _T("This is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big. This is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big. This is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line. This is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\nThis is some very very long text to be displayed in the text message box. There is no formatting applied (unfortunately) and we don't have any plans to incorporate it. This text should be split into multiple lines to avoid making dialog box too big.\nThere is also a shorter second line.\n");
+	//TMsgBox msgBox(strLongText, TMsgBox::eOkCancel, TMsgBox::eIcon_Warning);
+	//if(msgBox.DoModal())
+	//	return -1;
+	// /tmp
+
 	// ================================= Shell extension ========================================
 	LOG_INFO(_T("Checking shell extension compatibility"));
 
Index: src/ch/ch.rc
===================================================================
diff -u -N -r6a71d60b7ab5489db9ffc75784557e713df9a52f -r096451721a732567aad7e103bfe2d0a9f2f32c95
--- src/ch/ch.rc	(.../ch.rc)	(revision 6a71d60b7ab5489db9ffc75784557e713df9a52f)
+++ src/ch/ch.rc	(.../ch.rc)	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -28,89 +28,23 @@
 
 /////////////////////////////////////////////////////////////////////////////
 //
-// Icon
+// Dialog
 //
 
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDR_MAINFRAME           ICON                    "res\\ch.ico"
-IDI_ERROR_ICON          ICON                    "res\\error.ico"
-IDI_WORKING_ICON        ICON                    "res\\working.ico"
-IDI_PAUSED_ICON         ICON                    "res\\paused.ico"
-IDI_FINISHED_ICON       ICON                    "res\\finished.ico"
-IDI_CANCELLED_ICON      ICON                    "res\\cancelled.ico"
-IDI_WAITING_ICON        ICON                    "res\\waiting.ico"
-IDI_QUESTION_ICON       ICON                    "res\\question.ico"
-IDI_INFO_ICON           ICON                    "res\\info.ico"
-IDI_ERR_ICON            ICON                    "res\\err.ico"
-IDI_WARNING_ICON        ICON                    "res\\warning.ico"
-IDI_SHUTDOWN_ICON       ICON                    "res\\shut.ico"
-IDI_NET_ICON            ICON                    "res\\net.ico"
-IDI_HDD_ICON            ICON                    "res\\hd.ico"
-IDI_CD_ICON             ICON                    "res\\cd.ico"
-IDI_HDD2_ICON           ICON                    "res\\HD2.ICO"
-IDI_TRIBE_ICON          ICON                    "res\\tribe.ico"
-IDI_FOLDER_ICON         ICON                    "res\\folder.ico"
-IDI_ADDSHORTCUT_ICON    ICON                    "res\\addshort.ico"
-IDI_DELETESHORTCUT_ICON ICON                    "res\\delshort.ico"
-IDI_LARGEICONS_ICON     ICON                    "res\\large.ico"
-IDI_LIST_ICON           ICON                    "res\\list.ico"
-IDI_NEWFOLDER_ICON      ICON                    "res\\newdir.ico"
-IDI_REPORT_ICON         ICON                    "res\\report.ico"
-IDI_SMALLICONS_ICON     ICON                    "res\\small.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_POPUP_MENU MENU 
+IDD_MSGBOX_DIALOG DIALOGEX 0, 0, 177, 83
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "Copy Handler"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    POPUP "POPUP"
-    BEGIN
-        MENUITEM "Show status...",              ID_POPUP_SHOW_STATUS
-        MENUITEM "Show mini-status...",         ID_SHOW_MINI_VIEW
-        MENUITEM "Enter copy parameters...",    ID_POPUP_CUSTOM_COPY
-        MENUITEM SEPARATOR
-        MENUITEM "Monitor clipboard",           ID_POPUP_MONITORING, CHECKED
-        MENUITEM "Shutdown after finished",     ID_POPUP_SHUTAFTERFINISHED, CHECKED
-        MENUITEM SEPARATOR
-        POPUP "&Tools|ID_POPUP_TOOLS"
-        BEGIN
-            MENUITEM "&Check for updates...",       ID_POPUP_CHECKFORUPDATES
-            MENUITEM SEPARATOR
-            MENUITEM "&Enable integration with system", ID_POPUP_REGISTERDLL
-            MENUITEM "&Disable integration with system", ID_POPUP_UNREGISTERDLL
-        END
-        MENUITEM SEPARATOR
-        MENUITEM "&Options...",                 ID_POPUP_OPTIONS
-        MENUITEM "&Help...",                    ID_POPUP_HELP
-        MENUITEM "About...",                    ID_APP_ABOUT
-        MENUITEM SEPARATOR
-        MENUITEM "Exit",                        ID_APP_EXIT
-    END
+    PUSHBUTTON      "Btn2",IDC_SECOND_BUTTON,64,62,50,14
+    PUSHBUTTON      "Btn3",IDC_THIRD_BUTTON,120,62,50,14
+    ICON            "",IDC_IMAGE_STATIC,13,13,21,20,SS_REALSIZEIMAGE
+    CONTROL         "Do not show this again",IDC_BASIC_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,48,163,10
+    PUSHBUTTON      "Btn1",IDC_FIRST_BUTTON,8,62,50,14
+    CONTROL         "",IDC_MSG_RICHEDIT,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_TABSTOP,43,13,127,31
+    CONTROL         "",IDC_MEASURE_RICHEDIT,"RichEdit20W",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,7,7,11,7
 END
 
-IDR_PRIORITY_MENU MENU 
-BEGIN
-    POPUP "_POPUP_"
-    BEGIN
-        MENUITEM "Time critical",               ID_POPUP_TIME_CRITICAL
-        MENUITEM "Highest",                     ID_POPUP_HIGHEST
-        MENUITEM "Above normal",                ID_POPUP_ABOVE_NORMAL
-        MENUITEM "Normal",                      ID_POPUP_NORMAL
-        MENUITEM "Below normal",                ID_POPUP_BELOW_NORMAL
-        MENUITEM "Lowest",                      ID_POPUP_LOWEST
-        MENUITEM "Idle",                        ID_POPUP_IDLE
-    END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
 IDD_BUFFERSIZE_DIALOG DIALOGEX 0, 0, 344, 127
 STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Buffer size settings"
@@ -481,6 +415,14 @@
 #ifdef APSTUDIO_INVOKED
 GUIDELINES DESIGNINFO 
 BEGIN
+    IDD_MSGBOX_DIALOG, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 170
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 76
+    END
+
     IDD_BUFFERSIZE_DIALOG, DIALOG
     BEGIN
         LEFTMARGIN, 7
@@ -604,6 +546,86 @@
 #endif    // APSTUDIO_INVOKED
 
 
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDR_MAINFRAME           ICON                    "res\\ch.ico"
+IDI_ERROR_ICON          ICON                    "res\\error.ico"
+IDI_WORKING_ICON        ICON                    "res\\working.ico"
+IDI_PAUSED_ICON         ICON                    "res\\paused.ico"
+IDI_FINISHED_ICON       ICON                    "res\\finished.ico"
+IDI_CANCELLED_ICON      ICON                    "res\\cancelled.ico"
+IDI_WAITING_ICON        ICON                    "res\\waiting.ico"
+IDI_QUESTION_ICON       ICON                    "res\\question.ico"
+IDI_INFO_ICON           ICON                    "res\\info.ico"
+IDI_ERR_ICON            ICON                    "res\\err.ico"
+IDI_WARNING_ICON        ICON                    "res\\warning.ico"
+IDI_SHUTDOWN_ICON       ICON                    "res\\shut.ico"
+IDI_NET_ICON            ICON                    "res\\net.ico"
+IDI_HDD_ICON            ICON                    "res\\hd.ico"
+IDI_CD_ICON             ICON                    "res\\cd.ico"
+IDI_HDD2_ICON           ICON                    "res\\HD2.ICO"
+IDI_TRIBE_ICON          ICON                    "res\\tribe.ico"
+IDI_FOLDER_ICON         ICON                    "res\\folder.ico"
+IDI_ADDSHORTCUT_ICON    ICON                    "res\\addshort.ico"
+IDI_DELETESHORTCUT_ICON ICON                    "res\\delshort.ico"
+IDI_LARGEICONS_ICON     ICON                    "res\\large.ico"
+IDI_LIST_ICON           ICON                    "res\\list.ico"
+IDI_NEWFOLDER_ICON      ICON                    "res\\newdir.ico"
+IDI_REPORT_ICON         ICON                    "res\\report.ico"
+IDI_SMALLICONS_ICON     ICON                    "res\\small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_POPUP_MENU MENU 
+BEGIN
+    POPUP "POPUP"
+    BEGIN
+        MENUITEM "Show status...",              ID_POPUP_SHOW_STATUS
+        MENUITEM "Show mini-status...",         ID_SHOW_MINI_VIEW
+        MENUITEM "Enter copy parameters...",    ID_POPUP_CUSTOM_COPY
+        MENUITEM SEPARATOR
+        MENUITEM "Monitor clipboard",           ID_POPUP_MONITORING, CHECKED
+        MENUITEM "Shutdown after finished",     ID_POPUP_SHUTAFTERFINISHED, CHECKED
+        MENUITEM SEPARATOR
+        POPUP "&Tools|ID_POPUP_TOOLS"
+        BEGIN
+            MENUITEM "&Check for updates...",       ID_POPUP_CHECKFORUPDATES
+            MENUITEM SEPARATOR
+            MENUITEM "&Enable integration with system", ID_POPUP_REGISTERDLL
+            MENUITEM "&Disable integration with system", ID_POPUP_UNREGISTERDLL
+        END
+        MENUITEM SEPARATOR
+        MENUITEM "&Options...",                 ID_POPUP_OPTIONS
+        MENUITEM "&Help...",                    ID_POPUP_HELP
+        MENUITEM "About...",                    ID_APP_ABOUT
+        MENUITEM SEPARATOR
+        MENUITEM "Exit",                        ID_APP_EXIT
+    END
+END
+
+IDR_PRIORITY_MENU MENU 
+BEGIN
+    POPUP "_POPUP_"
+    BEGIN
+        MENUITEM "Time critical",               ID_POPUP_TIME_CRITICAL
+        MENUITEM "Highest",                     ID_POPUP_HIGHEST
+        MENUITEM "Above normal",                ID_POPUP_ABOVE_NORMAL
+        MENUITEM "Normal",                      ID_POPUP_NORMAL
+        MENUITEM "Below normal",                ID_POPUP_BELOW_NORMAL
+        MENUITEM "Lowest",                      ID_POPUP_LOWEST
+        MENUITEM "Idle",                        ID_POPUP_IDLE
+    END
+END
+
+
 #ifdef APSTUDIO_INVOKED
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -952,6 +974,10 @@
 STRINGTABLE 
 BEGIN
     IDS_IMPORTERROR_STRING  "Cannot import paths from the specified file"
+    IDS_ERROR_INITIALIZING_COMMON_CONTROLS 
+                            "Cannot initialize common controls. The application will now exit."
+    IDS_ERROR_INITIALIZING_RICH_EDIT_CONTROL 
+                            "Cannot initialize rich edit contro. The application will now exit."
 END
 
 STRINGTABLE 
@@ -1056,6 +1082,10 @@
 BEGIN
     IDS_INFO_TWO_FILE_STRING 
                             "Source file: %filename\nDestination file: %dstfilename"
+    IDS_OK_STRING           "&OK"
+    IDS_CANCEL_STRING       "&Cancel"
+    IDS_YES_STRING          "&Yes"
+    IDS_NO_STRING           "&No"
 END
 
 STRINGTABLE 
@@ -1084,8 +1114,9 @@
                             "Copy Handler's component enabling integration with system was updated.\nPlease reboot your system for changes to take effect."
     IDS_CH_PORTABLE_STRING  " (portable mode)"
     IDS_TASK_IMPORT_FAILED  "Failed to import task '%path'."
-	IDS_TASK_CREATE_FAILED "Cannot create new task. Reason: %reason."
-	IDS_TASKMANAGER_LOAD_FAILED "Failed to load task list database. Copy Handler will create a new, empty database for you."
+    IDS_TASK_CREATE_FAILED  "Cannot create new task. Reason: %reason."
+    IDS_TASKMANAGER_LOAD_FAILED 
+                            "Failed to load task list database. Copy Handler will create a new, empty database for you."
 END
 
 STRINGTABLE 
Index: src/ch/ch.vc90.vcproj
===================================================================
diff -u -N -r8422e5787e56453d78c7270066c3e8d1743ca757 -r096451721a732567aad7e103bfe2d0a9f2f32c95
--- src/ch/ch.vc90.vcproj	(.../ch.vc90.vcproj)	(revision 8422e5787e56453d78c7270066c3e8d1743ca757)
+++ src/ch/ch.vc90.vcproj	(.../ch.vc90.vcproj)	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -1170,6 +1170,14 @@
 						>
 					</File>
 					<File
+						RelativePath=".\TMsgBox.cpp"
+						>
+					</File>
+					<File
+						RelativePath=".\TMsgBox.h"
+						>
+					</File>
+					<File
 						RelativePath=".\UpdaterDlg.cpp"
 						>
 					</File>
Index: src/ch/resource.h
===================================================================
diff -u -N -r30297d6aab17483da8e7b8323b4d17ff1a9f78d6 -r096451721a732567aad7e103bfe2d0a9f2f32c95
--- src/ch/resource.h	(.../resource.h)	(revision 30297d6aab17483da8e7b8323b4d17ff1a9f78d6)
+++ src/ch/resource.h	(.../resource.h)	(revision 096451721a732567aad7e103bfe2d0a9f2f32c95)
@@ -52,6 +52,7 @@
 #define IDD_CRASH_DIALOG                212
 #define IDD_UPDATER_DIALOG              213
 #define IDD_FEEDBACK_REPLACE_DIALOG     214
+#define IDD_MSGBOX_DIALOG               215
 #define IDC_PROGRAM_STATIC              1000
 #define IDC_ADDFILE_BUTTON              1002
 #define IDC_STATUS_LIST                 1003
@@ -339,6 +340,15 @@
 #define IDC_CURRENTPHASE_GROUP_STATIC   1311
 #define IDC_ENTIRETASK_GROUP_STATIC     1312
 #define IDC_GLOBAL_GROUP_STATIC         1313
+#define IDC_BASIC_CHECK                 1314
+#define IDC_MSG_RICHEDIT                1315
+#define IDC_FIRST_BUTTON                1316
+#define IDC_SECOND_BUTTON               1317
+#define IDC_THIRD_BUTTON                1318
+#define IDC_IMAGE_STATIC                1319
+#define IDC_HORIZONTAL_BAR_STATIC       1320
+#define IDC_MSG_RICHEDIT2               1321
+#define IDC_MEASURE_RICHEDIT            1321
 #define IDS_APPNAME_STRING              5000
 #define IDS_PRIORITY0_STRING            5001
 #define IDS_PRIORITY1_STRING            5002
@@ -371,7 +381,7 @@
 #define IDS_SHELL_EXTENSION_REGISTERED_MISMATCH_STRING 5029
 #define IDS_CH_PORTABLE_STRING          5030
 #define IDS_TASK_IMPORT_FAILED          5031
-#define IDS_TASK_CREATE_FAILED			5032
+#define IDS_TASK_CREATE_FAILED          5032
 #define IDS_TASKMANAGER_LOAD_FAILED     5033
 #define IDS_ONECOPY_STRING              6000
 #define IDS_REGISTEROK_STRING           6001
@@ -536,6 +546,10 @@
 #define IDS_TITLEUNKNOWNOPERATION_STRING 13502
 #define IDS_MAINBROWSETEXT_STRING       13503
 #define IDS_INFO_TWO_FILE_STRING        13504
+#define IDS_OK_STRING                   13505
+#define IDS_CANCEL_STRING               13506
+#define IDS_YES_STRING                  13507
+#define IDS_NO_STRING                   13508
 #define IDS_ABTNOTHANX_STRING           14000
 #define IDS_ABOUTVERSION_STRING         14001
 #define IDS_BUFFERSIZEZERO_STRING       14500
@@ -564,6 +578,8 @@
 #define IDS_FLTALLFILTER_STRING         15022
 #define IDS_IMPORTREPORT_STRING         15023
 #define IDS_IMPORTERROR_STRING          15024
+#define IDS_ERROR_INITIALIZING_COMMON_CONTROLS 15025
+#define IDS_ERROR_INITIALIZING_RICH_EDIT_CONTROL 15026
 #define IDS_NERPATH_STRING              16500
 #define IDS_DATECREATED_STRING          18000
 #define IDS_DATELASTWRITE_STRING        18001
@@ -642,9 +658,9 @@
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
-#define _APS_NEXT_RESOURCE_VALUE        215
+#define _APS_NEXT_RESOURCE_VALUE        216
 #define _APS_NEXT_COMMAND_VALUE         32818
-#define _APS_NEXT_CONTROL_VALUE         1314
+#define _APS_NEXT_CONTROL_VALUE         1322
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif