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

📄 edahelperdlg.cpp

📁 protel99se鼠标增强软件
💻 CPP
字号:
// EDAHelperDlg.cpp : implementation file
//

#include "stdafx.h"
#include "EDAHelper.h"
#include "EDAHelperDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define  MYWM_NOTIFYICON  WM_USER+1


/////////////////////////////////////////////////////////////////////////////
// CEDAHelperDlg dialog

static char	*AppDesc = 
"第二版(2.0)说明:\r\n"
"    本软件是部分EDA软件的鼠标增强工具,将EDAHelper.exe和Hook.dll同时放到任意目录,运行EDAHelper.exe"
"就行,现在已不再自动运行EDA软件,支持protel99se,DXP,POWERPCB,OrCAD的capture。\r\n"
"\r\n针对protel99se,DXP(功能和从前一样):\r\n"
"    1. 向上滚动滚轮 --> 放大,相当于PageUp\r\n"
"    2. 向下滚动滚轮 --> 放大,相当于PageDown\r\n"
"    3. 按下滚轮     --> 切换有效图层并刷新,相当于小键盘'*'的功能\r\n"
"    4. 按住左键拖动 --> 再按右键可旋转,相当于\"TAB\"的功能\r\n"
"\r\n针对powerpcb(支持PADS2005SP2、PADS2007,别的版本没有测过,应该也支持):\r\n"
"    1. 按住鼠标右键移动,可移动工作区,相当于SHIFT+滚轮或者ALT+滚轮,不平滑\r\n"
"    2. 向上滚动滚轮 --> 放大,相当于PageUp\r\n"
"    3. 向下滚动滚轮 --> 缩小,相当于PageDown\r\n" 
"    4. 鼠标中键点击 --> 切换图层,相当于F4,原中键点击功能废弃\r\n" 
"\r\n针对OrCAD:\r\n"
"    1. 向上滚动滚轮 --> 放大,相当于字母\"I\"键\r\n"
"    2. 向下滚动滚轮 --> 缩小相当于字母\"O\"键\r\n" 
"\r\n    目前存在问题:点击系统图标关闭或者最小化窗口时,大约会停止响应3 秒钟,可能是Hook没有反安"
"装,我发现同类软件也有这样的问题,但是不知道怎么解决,哪位知道怎么解决的朋友麻烦告知,临时解决办"
"法就是点击窗口下边的关闭按钮。还有朋友说可以不用动态链接库,我也不知道怎么弄,希望懂的告知。"
"\r\n    其它:本软件原名protel99se鼠标增强工具(protel_increase),2007年03月25日首先在老古网站(www.laogu.com)"
"上发布,至今已有两年,当时只是想做了自己用,顺便放上来给大家分享。如今,我已经很久不画板了,但没想到两年"
"来,有1600多次下载,还有朋友转载到别的网站,小有一些兴奋,说明我的工作是有意义的。前两天一个名叫xtomfuk "
"的朋友来信要求增加PADS的支持,欣然接受,于是就有了这个版本。由于增加了多个EDA软件的支持,原名不能再"
"用了,姑且就叫EDAHelper吧。为了纪念上一个版本,这一版也选择在3月25日两周年之际发布。\r\n"
"    再罗嗦两句:本软件原理仅限于模拟按键,别的功能暂时做不了。依然不保留版权,任何人都可以修改,但请不要用"
"于营利目的,出问题也不要找我。当然如果你觉得应该增加更多更好功能,另介意联系我,QQ:126186,Email:spacexplorer@163.com。"
"\r\n    最后感谢xtomfuk的建议和测试,以及涛哥(paul)制作的图标。"
"\r\n\r\n第一版(1.0)说明:\r\n"
"    本软件是增强Protel99se鼠标中键功能的工具。\r\n"
"    1. 上下滚动滚轮,屏幕缩放相当于PageUp,PageDown的功能\r\n"
"    2. 按下滚轮,切换有效图层并刷新相当于小键盘'*'的功能\r\n"
"    3. 按住左键拖动器件再按右键可旋转,相当于\"TAB\"的功能\r\n"
"    4. 将本软件(含Hook.dll)放到Protel99se安装目录,运行时会自动启动Protel99se\r\n"
"    5. 仿照“Protel99se鼠标增强软件”(www.zsmcu.com)设计,因我运行她后用Source Insight"
"鼠标拖动时感觉明显变慢且部分操作不符合我的习惯而改写的\r\n"
"    6. 本软件包括两部分, 一是HOOK(.\\src\\test3)实现鼠标钩子和模拟按键,"
"二是主窗口(.\\src\\protel_increase), 安装钩子和显示帮助信息,部分代码源自"
"www.vckbase.com,无版权,任何人可以根据自己的需要把他改了在其它软件如:Orcad, "
"PowerPCB等里运行,也可以让其自适应多个软件的操作,自己发挥吧, 如果你愿意,请EMAIL一份我.";

static char	*AD = 
"广告:\r\n"
"    目前本人正穷困潦倒,且有闲暇,欲找点兼职养家糊口,专长如下:\r\n"
"    1、精通单片机软、硬件开发,51、ARM等\r\n"
"    2、精通嵌入式TCPIP协议栈\r\n"
"    3、精通嵌入式USB-HOST协议栈(OHCI, EHCI),基于ST的OS20和OS21开发,支持U盘、移动硬盘等\r\n"
"    4、精通C、C++编程,小型数据库编程\r\n"
"    5、精通LINUX内核编程\r\n"
"    有诚意者请联系:QQ:126186, Email:spacexplorer@163.com";

CEDAHelperDlg::CEDAHelperDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CEDAHelperDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CEDAHelperDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CEDAHelperDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEDAHelperDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CEDAHelperDlg, CDialog)
	//{{AFX_MSG_MAP(CEDAHelperDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHECK_AUTORUN, OnCheckAutorun)
	ON_BN_CLICKED(IDC_BUTTON_MINIMIZE, OnButtonMinimize)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEDAHelperDlg message handlers

BOOL CEDAHelperDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	GetDlgItem(IDC_EDIT_DESC)->SetWindowText(AppDesc);

	if(CheckAutorunStats())
	{
		((CButton*)GetDlgItem(IDC_CHECK_AUTORUN))->SetCheck(1);
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
    m_tnid.cbSize=sizeof(NOTIFYICONDATA);        //定义结构的成员变量
    m_tnid.hWnd=this->m_hWnd;
    m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
    m_tnid.uCallbackMessage=MYWM_NOTIFYICON;     //用户定义的回调消息
    _tcscpy(m_tnid.szTip, _T("EDAHelper V2.0"));
	m_tnid.uID=IDR_MAINFRAME;
	m_tnid.hIcon=m_hIcon;
	if(m_hIcon)::DestroyIcon(m_hIcon);

	Shell_NotifyIcon(NIM_ADD,&m_tnid);

	PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);


	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CEDAHelperDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CEDAHelperDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CEDAHelperDlg::OnCheckAutorun() 
{
	HKEY hKey;
	CString str = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
	if (ERROR_SUCCESS != RegCreateKey(HKEY_CURRENT_USER, str, &hKey))
	{
	   MessageBox("打开注册表项失败");
	   RegCloseKey(hKey);
	   return;
	}

	if(((CButton*)GetDlgItem(IDC_CHECK_AUTORUN))->GetCheck())
	{
		if (ERROR_SUCCESS != RegSetValueEx(hKey, "EDAHelper", 0, REG_SZ, (unsigned char *)__argv[0], strlen(__argv[0])))
		{
		   MessageBox("写注册表失败");
		   RegCloseKey(hKey);
		   return;
		}
	}
	else
	{
		if (ERROR_SUCCESS != RegDeleteValue(hKey, "EDAHelper"))
		{
		   MessageBox("写注册表失败");
		   RegCloseKey(hKey);
		   return;
		}

	}

	RegCloseKey(hKey);
}

void CEDAHelperDlg::OnButtonMinimize() 
{
	PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
}

BOOL CEDAHelperDlg::CheckAutorunStats()
{
	HKEY			hKey;
	unsigned char	szAppPath[MAX_PATH];
	unsigned long	dwSize = MAX_PATH;

	CString str = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";

	if (ERROR_SUCCESS != RegCreateKey(HKEY_CURRENT_USER, str, &hKey))
	{
	   MessageBox("打开注册表项失败");
	   RegCloseKey(hKey);
	   return FALSE;
	}
	int ErrCode = RegQueryValueEx(hKey, "EDAHelper", NULL, NULL, szAppPath, &dwSize);
	if(ERROR_SUCCESS == ErrCode)
	{
		if(!strncmp((char*)szAppPath, __argv[0],  dwSize))
		{
			return TRUE;
		}
	}
	else
	{
//		MessageBox("Read register value failed!");
	}


	return FALSE;
}

void CEDAHelperDlg::OnClose() 
{
	CDialog::OnClose();
}

LRESULT CEDAHelperDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	static bool	IsShowWnd = TRUE;
    if((message==WM_SYSCOMMAND)&&(wParam==SC_MINIMIZE))         //如果是系统消息
	{
		this->ShowWindow(SW_MINIMIZE);
		this->ShowWindow(SW_HIDE);
		IsShowWnd = FALSE;
		return true;
	}
	else if((message==MYWM_NOTIFYICON)&&((lParam==WM_LBUTTONDOWN)||(lParam==WM_RBUTTONUP)))  //如果是用户定义的消息
	{
		if(!IsShowWnd)
		{
			this->ShowWindow(SW_SHOW);
			this->ShowWindow(SW_NORMAL);
			this->SetActiveWindow();   //双击并且出现在最上面
		}
		else
		{
			this->ShowWindow(SW_MINIMIZE);
			this->ShowWindow(SW_HIDE);
		}
		IsShowWnd = !IsShowWnd;
		return true;
	}
		
	return CDialog::WindowProc(message, wParam, lParam);
}

void CEDAHelperDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	Shell_NotifyIcon(NIM_DELETE, &m_tnid);
}

void CEDAHelperDlg::OnButtonHelp() 
{
	static BOOL HelpNotAd = FALSE;
	if(HelpNotAd)
	{
		GetDlgItem(IDC_BUTTON_HELP)->SetWindowText("广告");
		GetDlgItem(IDC_EDIT_DESC)->SetWindowText(AppDesc);
	}
	else
	{
		GetDlgItem(IDC_BUTTON_HELP)->SetWindowText("帮助");
		GetDlgItem(IDC_EDIT_DESC)->SetWindowText(AD);
	}

	HelpNotAd = !HelpNotAd;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -