⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optiondlg.cpp

📁 一个快捷面板,可以将自己常用的程序放在其中!
💻 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 + -