?? edahelperdlg.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. 按住鼠標右鍵移動,可移動工作區(qū),相當于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 目前存在問題:點擊系統(tǒng)圖標關閉或者最小化窗口時,大約會停止響應3 秒鐘,可能是Hook沒有反安"
"裝,我發(fā)現同類軟件也有這樣的問題,但是不知道怎么解決,哪位知道怎么解決的朋友麻煩告知,臨時解決辦"
"法就是點擊窗口下邊的關閉按鈕。還有朋友說可以不用動態(tài)鏈接庫,我也不知道怎么弄,希望懂的告知。"
"\r\n 其它:本軟件原名protel99se鼠標增強工具(protel_increase),2007年03月25日首先在老古網站(www.laogu.com)"
"上發(fā)布,至今已有兩年,當時只是想做了自己用,順便放上來給大家分享。如今,我已經很久不畫板了,但沒想到兩年"
"來,有1600多次下載,還有朋友轉載到別的網站,小有一些興奮,說明我的工作是有意義的。前兩天一個名叫xtomfuk "
"的朋友來信要求增加PADS的支持,欣然接受,于是就有了這個版本。由于增加了多個EDA軟件的支持,原名不能再"
"用了,姑且就叫EDAHelper吧。為了紀念上一個版本,這一版也選擇在3月25日兩周年之際發(fā)布。\r\n"
" 再羅嗦兩句:本軟件原理僅限于模擬按鍵,別的功能暫時做不了。依然不保留版權,任何人都可以修改,但請不要用"
"于營利目的,出問題也不要找我。當然如果你覺得應該增加更多更好功能,另介意聯(liá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等里運行,也可以讓其自適應多個軟件的操作,自己發(fā)揮吧, 如果你愿意,請EMAIL一份我.";
static char *AD =
"廣告:\r\n"
" 目前本人正窮困潦倒,且有閑暇,欲找點兼職養(yǎng)家糊口,專長如下:\r\n"
" 1、精通單片機軟、硬件開發(fā),51、ARM等\r\n"
" 2、精通嵌入式TCPIP協(xié)議棧\r\n"
" 3、精通嵌入式USB-HOST協(xié)議棧(OHCI, EHCI),基于ST的OS20和OS21開發(fā),支持U盤、移動硬盤等\r\n"
" 4、精通C、C++編程,小型數據庫編程\r\n"
" 5、精通LINUX內核編程\r\n"
" 有誠意者請聯(liá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)) //如果是系統(tǒng)消息
{
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 + -