CBXShell/CBXManager/MainDlg.cpp
2017-02-25 20:45:53 +01:00

183 lines
4.9 KiB
C++

// MainDlg.cpp : implementation of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "about.h"
#include "MainDlg.h"
BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) { return CWindow::IsDialogMessage(pMsg); }
BOOL CMainDlg::OnIdle() { return FALSE;}
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
// set icons
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);
// register object for message filtering and idle updates
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
UIAddChildWindowContainer(m_hWnd);
//add 'About' item to sys menu
ATLASSERT(IDC_APPABOUT < 0xF000);
CMenu pSysMenu=GetSystemMenu(FALSE);
if (!pSysMenu.IsNull())
{
pSysMenu.AppendMenu(MF_SEPARATOR);
pSysMenu.AppendMenu(MF_STRING, IDC_APPABOUT, _T("About"));
}
InitUI();
//set focus to Cancel btn
GotoDlgCtrl(GetDlgItem(IDCANCEL));
return FALSE;
}
void CMainDlg::InitUI()
{
//Button_GetCheck BST_CHECKED : BST_UNCHECKED equals TRUE: FALSE
Button_SetCheck(GetDlgItem(IDC_CB_ZIP), m_reg.HasTH(CBX_ZIP));
Button_SetCheck(GetDlgItem(IDC_CB_CBZ), m_reg.HasTH(CBX_CBZ));
Button_SetCheck(GetDlgItem(IDC_CB_RAR), m_reg.HasTH(CBX_RAR));
Button_SetCheck(GetDlgItem(IDC_CB_CBR), m_reg.HasTH(CBX_CBR));
Button_SetCheck(GetDlgItem(IDC_CB_SORT), m_reg.IsSortOpt());//CBX_SORT
}
//check ui state,compare to registry state->if!= refresh
void CMainDlg::OnApplyImpl()
{
BOOL bRet, bRefresh=FALSE;
//sort option
bRet=(BST_CHECKED==Button_GetCheck(GetDlgItem(IDC_CB_SORT)));
if (bRet!=m_reg.IsSortOpt())
{
bRefresh=TRUE;
m_reg.SetSortOpt(bRet);
}
//thumbnail handlers
bRet=(BST_CHECKED==Button_GetCheck(GetDlgItem(IDC_CB_ZIP)));
if (bRet!=m_reg.HasTH(CBX_ZIP))
{
bRefresh=TRUE;
m_reg.SetHandlers(CBX_ZIP, bRet);
}
bRet=(BST_CHECKED==Button_GetCheck(GetDlgItem(IDC_CB_CBZ)));
if (bRet!=m_reg.HasTH(CBX_CBZ))
{
bRefresh=TRUE;
m_reg.SetHandlers(CBX_CBZ, bRet);
}
bRet=(BST_CHECKED==Button_GetCheck(GetDlgItem(IDC_CB_RAR)));
if (bRet!=m_reg.HasTH(CBX_RAR))
{
bRefresh=TRUE;
m_reg.SetHandlers(CBX_RAR, bRet);
}
bRet=(BST_CHECKED==Button_GetCheck(GetDlgItem(IDC_CB_CBR)));
if (bRet!=m_reg.HasTH(CBX_CBR))
{
bRefresh=TRUE;
m_reg.SetHandlers(CBX_CBR, bRet);
}
if (bRefresh)
{
ATLTRACE("refreshing FS\n");
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT | SHCNF_NOTIFYRECURSIVE, NULL, NULL);
}
InitUI();//reload
}
LRESULT CMainDlg::OnApply(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
OnApplyImpl();
return 0;
}
LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
OnApplyImpl();
CloseDialog(wID);
return 0;
}
LRESULT CMainDlg::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (wParam!=IDC_APPABOUT) return ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
CAboutDlg _a;
_a.DoModal(m_hWnd);
return 0;
}
LRESULT CMainDlg::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// unregister message filtering and idle updates
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
return 0;
}
LRESULT CMainDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CloseDialog(wID);
return 0;
}
void CMainDlg::CloseDialog(int nVal)
{
DestroyWindow();
::PostQuitMessage(nVal);
}
LRESULT CMainDlg::OnAppHelp(LPHELPINFO lphi)
{
switch (lphi->iCtrlId)
{
case IDC_TH_GROUP:
case IDC_CB_CBZ:
case IDC_CB_CBR:
case IDC_CB_ZIP:
case IDC_CB_RAR:
// '#' anchors must use id attribute
HtmlHelp(m_hWnd, _T("CBXShellHelp.chm::manager.html#optth"), HH_DISPLAY_TOPIC, NULL);
break;
case IDC_SORT_ADVOPTGROUP:
HtmlHelp(m_hWnd, _T("CBXShellHelp.chm::manager.html#advopt"), HH_DISPLAY_TOPIC, NULL);
break;
case IDC_CB_SORT:
case IDC_SORT_DESC:
ATLTRACE("HH sort opt\n");
HtmlHelp(m_hWnd, _T("CBXShellHelp.chm::FAQ.html#custth"), HH_DISPLAY_TOPIC, NULL);
break;
default:
ATLTRACE("HH default\n");
HtmlHelp(m_hWnd, _T("CBXShellHelp.chm::manager.html"), HH_DISPLAY_TOPIC, NULL);//about?
break;
}
return 0;
}