📄 optiondlg.cpp
字号:
// OptionDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "LinkPanel.h"
#include "OptionDlg.h"
#include ".\optiondlg.h"
#include "MainFrm.h"
#include <windowsx.h>
#include "LinkListView.h"
#include "Registry.h"
// COptionDlg 对话框
IMPLEMENT_DYNAMIC(COptionDlg, CDialog)
COptionDlg::COptionDlg(CWnd* pParent /*=NULL*/, HWND hWnd, BOOL bStyle)
: CDialog(COptionDlg::IDD, pParent)
, m_nStatus(0)
, m_sKey(_T(""))
, m_bShowBmp(FALSE)
{
m_hWnd = hWnd;
m_bStyle = bStyle;
m_bFirst = TRUE;
}
COptionDlg::~COptionDlg()
{
}
void COptionDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RAD_WIN, m_nStatus);
DDX_Radio(pDX, IDC_RAD_DEFAULT, m_bStyle);
DDX_Text(pDX, IDC_EDT_KEY, m_sKey);
DDV_MaxChars(pDX, m_sKey, 1);
DDX_Control(pDX, IDC_CHK_SAVE, m_chkSave);
DDX_Control(pDX, IDC_CHK_RUN, m_chkRun);
DDX_Check(pDX, IDC_CHK_SHOWBK, m_bShowBmp);
}
BEGIN_MESSAGE_MAP(COptionDlg, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// COptionDlg 消息处理程序
BOOL CALLBACK COptionDlg::EnumChildProc( HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
)
{
char classname[200];
COptionDlg *dlg = (COptionDlg*)lParam;
DWORD style;
GetClassName( hwnd, classname, 200 );
style = GetWindowStyle( hwnd );
if ( strcmp( classname, "Button" ) == 0 )
{
style = (UINT)GetWindowLong(hwnd, GWL_STYLE) & 0xff;
if ( style == BS_PUSHBUTTON || style == BS_DEFPUSHBUTTON )
dlg->SubClassButton( hwnd );
}
return TRUE;
}
void COptionDlg::OnBnClickedOk()
{
UpdateData(TRUE);
UINT nStatus;
CString sControl = _T("");
CMainFrame *pFrame = (CMainFrame*)CWnd::FromHandle(m_hWnd);
switch(m_nStatus)
{
case 0:
nStatus = MOD_WIN;
sControl = _T("Win");
break;
case 1:
nStatus = MOD_CONTROL;
sControl = _T("Ctrl");
break;
case 2:
nStatus = MOD_SHIFT;
sControl = _T("Shift");
break;
case 3:
nStatus = MOD_ALT;
sControl = _T("Alt");
break;
}
if(pFrame && m_hWnd && UnregisterHotKey(m_hWnd, 0Xa001) &&
::RegisterHotKey(m_hWnd, 0Xa001, nStatus, (UINT)m_sKey[0]))
{
CString sNote, sTemp;
sTemp.LoadString(IDS_HOTKEY);
sNote.Format(sTemp, sControl, m_sKey[0]);
CLinkListView *pParent = (CLinkListView*)GetParent();
if(pParent) pParent->SetPanelText(0, sNote);
pFrame->m_Control = m_nStatus;
pFrame->m_Key = (WORD)m_sKey[0];
pFrame->m_bStyle = m_bStyle;
pFrame->m_bShowBmp = m_bShowBmp;
pFrame->m_bSave = m_chkSave.GetCheck();
pFrame->m_bRun = m_chkRun.GetCheck();
}
else
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf, 0, NULL );
// Display the string.
::MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
OnOK();
}
BOOL COptionDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetStyle();
ReadKeySetting();
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
BOOL COptionDlg::SetSkin(CString file)
{
m_skinWin.LoadSkin( file );
m_btnres.LoadSkin( file );
if ( m_bFirst )
{
m_skinWin.InstallSkin( this );
EnumChildWindows( m_hWnd, EnumChildProc, (LPARAM)this );
m_bFirst = FALSE;
}
SetWindowPos( 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_FRAMECHANGED );
return TRUE;
}
BOOL COptionDlg::SubClassButton( HWND hwnd )
{
CSkinButton * btn = new CSkinButton();
CWnd* pWnd = CWnd::FromHandlePermanent(hwnd);
if ( pWnd == NULL)
{
//btn->SubclassWindow(hwnd);
btn->SetResource(&m_btnres);
return TRUE;
}
return FALSE;
}
void COptionDlg::SetStyle()
{
CString sPath = _T("");
GetModuleFileName(AfxGetInstanceHandle(), sPath.GetBuffer(MAX_PATH), MAX_PATH);
sPath.ReleaseBuffer(MAX_PATH);
sPath = sPath.Left(sPath.ReverseFind('\\') + 1);
if(!m_bStyle)
sPath = sPath + _T("skin\\neostyle\\theme.ini");
else
sPath += _T("skin\\xpstyle\\theme.ini");
SetSkin(sPath);
//if(!m_bStyle)
// SetSkin( "skin\\neostyle\\theme.ini" );
//else
// SetSkin( "skin\\xpstyle\\theme.ini" );
}
void COptionDlg::ReadKeySetting()
{
DWORD dwHotKey = 0;
CRegistry Key(HKEY_CURRENT_USER);
if(Key.Open(_T("Software\\Xiaoqiang Studio\\LinkPanel\\Settings\\")))
{
int nCheck = 0;
if(Key.Read("HotKey", (DWORD*)&dwHotKey))
{
m_nStatus = HIBYTE(dwHotKey);
m_sKey.Format("%c",(int)LOBYTE(dwHotKey));
}
Key.Read("AutoSave", (int*)&nCheck);
m_chkSave.SetCheck(nCheck);
Key.Read("AutoRun", (int*)&nCheck);
Key.Read("ShowBk", (int*)&m_bShowBmp);
m_chkRun.SetCheck(nCheck);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -