亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shortcut.cpp

?? 一個功能強大的代碼編輯器源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//this file is part of notepad++
//Copyright (C)2003 Don HO ( donho@altern.org )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#include "shortcut.h"
#include "Parameters.h"
#include "ScintillaEditView.h"
#include "resource.h"
#include "Notepad_plus.h"

#include "keys.h"
const int KEY_STR_LEN = 16;

struct KeyIDNAME {
	const char * name;
	unsigned char id;
};

KeyIDNAME namedKeyArray[] = {
{"None", VK_NULL},

{"Backspace", VK_BACK},
{"Tab", VK_TAB},
{"Enter", VK_RETURN},
{"Esc", VK_ESCAPE},
{"Spacebar", VK_SPACE},

{"Page up", VK_PRIOR},
{"Page down", VK_NEXT},
{"End", VK_END},
{"Home", VK_HOME},
{"Left", VK_LEFT},
{"Up", VK_UP},
{"Right", VK_RIGHT},
{"Down", VK_DOWN},

{"INS", VK_INSERT},
{"DEL", VK_DELETE},

{"0", VK_0},
{"1", VK_1},
{"2", VK_2},
{"3", VK_3},
{"4", VK_4},
{"5", VK_5},
{"6", VK_6},
{"7", VK_7},
{"8", VK_8},
{"9", VK_9},
{"A", VK_A},
{"B", VK_B},
{"C", VK_C},
{"D", VK_D},
{"E", VK_E},
{"F", VK_F},
{"G", VK_G},
{"H", VK_H},
{"I", VK_I},
{"J", VK_J},
{"K", VK_K},
{"L", VK_L},
{"M", VK_M},
{"N", VK_N},
{"O", VK_O},
{"P", VK_P},
{"Q", VK_Q},
{"R", VK_R},
{"S", VK_S},
{"T", VK_T},
{"U", VK_U},
{"V", VK_V},
{"W", VK_W},
{"X", VK_X},
{"Y", VK_Y},
{"Z", VK_Z},

{"Numpad 0", VK_NUMPAD0},
{"Numpad 1", VK_NUMPAD1},
{"Numpad 2", VK_NUMPAD2},
{"Numpad 3", VK_NUMPAD3},
{"Numpad 4", VK_NUMPAD4},
{"Numpad 5", VK_NUMPAD5},
{"Numpad 6", VK_NUMPAD6},
{"Numpad 7", VK_NUMPAD7},
{"Numpad 8", VK_NUMPAD8},
{"Numpad 9", VK_NUMPAD9},
{"Num *", VK_MULTIPLY},
{"Num +", VK_ADD},
//{"Num Enter", VK_SEPARATOR},	//this one doesnt seem to work
{"Num -", VK_SUBTRACT},
{"Num .", VK_DECIMAL},
{"Num /", VK_DIVIDE},
{"F1", VK_F1},
{"F2", VK_F2},
{"F3", VK_F3},
{"F4", VK_F4},
{"F5", VK_F5},
{"F6", VK_F6},
{"F7", VK_F7},
{"F8", VK_F8},
{"F9", VK_F9},
{"F10", VK_F10},
{"F11", VK_F11},
{"F12", VK_F12},

{"~", VK_OEM_3},
{"-", VK_OEM_MINUS},
{"=", VK_OEM_PLUS},
{"[", VK_OEM_4},
{"]", VK_OEM_6},
{";", VK_OEM_1},
{"'", VK_OEM_7},
{"\\", VK_OEM_5},
{",", VK_OEM_COMMA},
{".", VK_OEM_PERIOD},
{"/", VK_OEM_2},

{"<>", VK_OEM_102},
};

#define nrKeys sizeof(namedKeyArray)/sizeof(KeyIDNAME)

/*
char vKeyArray[][KEY_STR_LEN] = \
{"", "BACKSPACE", "TAB", "ENTER", "PAUSE", "CAPS LOCK", "ESC", "SPACEBAR", "PAGE UP", "PAGE DOWN",\
"END", "HOME", "LEFT ARROW", "UP ARROW", "RIGHT ARROW", "DOWN ARROW", "INS", "DEL",\
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",\
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",\
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",\
"NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4",\
"NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9",\
"F1", "F2", "F3", "F4", "F5", "F6",\
"F7", "F8", "F9", "F10", "F11", "F12"};

unsigned char vkeyValue[] = {\
0x00, 0x08, 0x09, 0x0D, 0x13, 0x14, 0x1B, 0x20, 0x21, 0x22,\
0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2D, 0x2E, 0x30, 0x31,\
0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42,\
0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,\
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,\
0x57, 0x58, 0x59, 0x5A, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,\
0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,\
0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B};
*/

string Shortcut::toString() const
{
	string sc = "";
	if (!isEnabled())
		return sc;

	if (_keyCombo._isCtrl)
		sc += "Ctrl+";
	if (_keyCombo._isAlt)
		sc += "Alt+";
	if (_keyCombo._isShift)
		sc += "Shift+";

	string keyString;
	getKeyStrFromVal(_keyCombo._key, keyString);
	sc += keyString;
	return sc;
}

void Shortcut::setName(const char * name) {
	lstrcpyn(_menuName, name, nameLenMax);
	lstrcpyn(_name, name, nameLenMax);
	int i = 0, j = 0;
	while(name[j] != 0 && i < nameLenMax) {
		if (name[j] != '&') {
			_name[i] = name[j];
			i++;
		} else {	//check if this ampersand is being escaped
			if (name[j+1] == '&') {	//escaped ampersand
				_name[i] = name[j];
				i++;
				j++;	//skip escaped ampersand
			}
		}
		j++;
	}
	_name[i] = 0;
}

string ScintillaKeyMap::toString() const {
	return toString(0);
}

string ScintillaKeyMap::toString(int index) const {
	string sc = "";
	if (!isEnabled())
		return sc;

	KeyCombo kc = _keyCombos[index];
	if (kc._isCtrl)
		sc += "Ctrl+";
	if (kc._isAlt)
		sc += "Alt+";
	if (kc._isShift)
		sc += "Shift+";

	string keyString;
	getKeyStrFromVal(kc._key, keyString);
	sc += keyString;
	return sc;
}

KeyCombo ScintillaKeyMap::getKeyComboByIndex(int index) const {
	return _keyCombos[index];
}

void ScintillaKeyMap::setKeyComboByIndex(int index, KeyCombo combo) {
	if(combo._key == 0 && (size > 1)) {	//remove the item if possible
		_keyCombos.erase(_keyCombos.begin() + index);
	}
	_keyCombos[index] = combo;
}

void ScintillaKeyMap::removeKeyComboByIndex(int index) {
	if (size > 1 && index > -1 && index < int(size)) {
		_keyCombos.erase(_keyCombos.begin() + index);
		size--;
	}
}

int ScintillaKeyMap::addKeyCombo(KeyCombo combo) {	//returns index where key is added, or -1 when invalid
	if (combo._key == 0)	//do not allow to add disabled keycombos
		return -1;
	if (!isEnabled()) {	//disabled, override current combo with new enabled one
		_keyCombos[0] = combo;
		return 0;
	}
	for(size_t i = 0; i < size; i++) {	//if already in the list do not add it
		KeyCombo & kc = _keyCombos[i];
		if (combo._key == kc._key && combo._isCtrl == kc._isCtrl && combo._isAlt == kc._isAlt && combo._isShift == kc._isShift)
			return i;	//already in the list
	}
	_keyCombos.push_back(combo);
	size++;
	return (size - 1);
}

bool ScintillaKeyMap::isEnabled() const {
	return (_keyCombos[0]._key != 0);
}

size_t ScintillaKeyMap::getSize() const {
	return size;
}

void getKeyStrFromVal(unsigned char keyVal, string & str)
{
	str = "";
	bool found = false;
	int i;
	for (i = 0; i < nrKeys; i++) {
		if (keyVal == namedKeyArray[i].id) {
			found = true;
			break;
		}
	}
	if (found)
		str = namedKeyArray[i].name;
	else 
		str = "Unlisted";
}

void getNameStrFromCmd(DWORD cmd, string & str)
{
	if ((cmd >= ID_MACRO) && (cmd < ID_MACRO_LIMIT))
	{
		vector<MacroShortcut> & theMacros = (NppParameters::getInstance())->getMacroList();
		int i = cmd - ID_MACRO;
		str = theMacros[i].getName();
	}
	else if ((cmd >= ID_USER_CMD) && (cmd < ID_USER_CMD_LIMIT))
	{
		vector<UserCommand> & userCommands = (NppParameters::getInstance())->getUserCommandList();
		int i = cmd - ID_USER_CMD;
		str = userCommands[i].getName();
	}
	else if ((cmd >= ID_PLUGINS_CMD) && (cmd < ID_PLUGINS_CMD_LIMIT))
	{
		vector<PluginCmdShortcut> & pluginCmds = (NppParameters::getInstance())->getPluginCommandList();
		int i = 0;
		for (size_t j = 0 ; j < pluginCmds.size() ; j++)
		{
			if (pluginCmds[j].getID() == cmd)
			{
				i = j;
				break;
			}
		}
		str = pluginCmds[i].getName();
	}
	else
	{
		HWND hNotepad_plus = ::FindWindow(Notepad_plus::getClassName(), NULL);
		char cmdName[64];
		int nbChar = ::GetMenuString(::GetMenu(hNotepad_plus), cmd, cmdName, sizeof(cmdName), MF_BYCOMMAND);
		if (!nbChar)
			return;
		bool fin = false;
		int j = 0;
		size_t len = strlen(cmdName);
		for (size_t i = 0 ; i < len; i++)
		{
			switch(cmdName[i])
			{
				case '\t':
					cmdName[j] = '\0';
					fin = true;
					break;

				case '&':
					break;

				default :
					cmdName[j++] = cmdName[i];
			}
			if (fin)
				break;
		}
		cmdName[j] = '\0';
		str = cmdName;
	}
	return;
}

BOOL CALLBACK Shortcut::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam) 
{
	switch (Message)
	{
		case WM_INITDIALOG :
		{
			::SetDlgItemText(_hSelf, IDC_NAME_EDIT, getMenuName());	//display the menu name, with ampersands
			if (!_canModifyName)
				::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, EM_SETREADONLY, TRUE, 0);
			int textlen = (int)::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXTLENGTH, 0, 0);

			::SendDlgItemMessage(_hSelf, IDC_CTRL_CHECK, BM_SETCHECK, _keyCombo._isCtrl?BST_CHECKED:BST_UNCHECKED, 0);
			::SendDlgItemMessage(_hSelf, IDC_ALT_CHECK, BM_SETCHECK, _keyCombo._isAlt?BST_CHECKED:BST_UNCHECKED, 0);
			::SendDlgItemMessage(_hSelf, IDC_SHIFT_CHECK, BM_SETCHECK, _keyCombo._isShift?BST_CHECKED:BST_UNCHECKED, 0);
			::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName));
			int iFound = -1;
			for (size_t i = 0 ; i < nrKeys ; i++)
			{
				::SendDlgItemMessage(_hSelf, IDC_KEY_COMBO, CB_ADDSTRING, 0, (LPARAM)namedKeyArray[i].name);

				if (_keyCombo._key == namedKeyArray[i].id)
					iFound = i;
			}

			if (iFound != -1)
				::SendDlgItemMessage(_hSelf, IDC_KEY_COMBO, CB_SETCURSEL, iFound, 0);
			::ShowWindow(::GetDlgItem(_hSelf, IDC_WARNING_STATIC), isEnabled()?SW_HIDE:SW_SHOW);

			goToCenter();
			return TRUE;
		}

		case WM_COMMAND : 
		{
			int textlen = (int)::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXTLENGTH, 0, 0);
			switch (wParam)
			{
				case IDC_CTRL_CHECK :
					_keyCombo._isCtrl = BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0);
					::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName));
					return TRUE;

				case IDC_ALT_CHECK :
					_keyCombo._isAlt = BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0);
					::EnableWindow(::GetDlgItem(_hSelf, IDOK), isValid() && (textlen > 0 || !_canModifyName));
					return TRUE;

				case IDC_SHIFT_CHECK :
					_keyCombo._isShift = BST_CHECKED == ::SendDlgItemMessage(_hSelf, wParam, BM_GETCHECK, 0, 0);
					return TRUE;

				case IDOK :
					if (!isEnabled()) {
						_keyCombo._isCtrl = _keyCombo._isAlt = _keyCombo._isShift = false;
					}
					if (_canModifyName) {
						char editName[nameLenMax];
						::SendDlgItemMessage(_hSelf, IDC_NAME_EDIT, WM_GETTEXT, nameLenMax, (LPARAM)editName);
						setName(editName);
					}
					::EndDialog(_hSelf, 0);
					return TRUE;

				case IDCANCEL :
					::EndDialog(_hSelf, -1);
					return TRUE;

				default:
					if (HIWORD(wParam) == EN_CHANGE)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区国色天香| 国产精品羞羞答答xxdd| 热久久国产精品| 国产精品一二三| 欧美日韩一区二区在线视频| 欧美国产精品一区二区| 午夜av一区二区三区| 成人性生交大片免费 | 日韩不卡一区二区| 91免费国产在线| 国产香蕉久久精品综合网| 亚洲一区二区三区自拍| 成人理论电影网| www久久精品| 日本欧美在线观看| 在线观看www91| 亚洲人吸女人奶水| 暴力调教一区二区三区| 26uuu色噜噜精品一区二区| 日韩国产欧美在线视频| 在线视频国内自拍亚洲视频| 国产精品成人网| 国产成人在线网站| 久久久久国产精品人| 久久精品国产精品青草| 日韩欧美色电影| 欧美aaaaaa午夜精品| 欧美四级电影网| 亚洲va国产天堂va久久en| 91浏览器在线视频| 亚洲精品成人悠悠色影视| 91在线丨porny丨国产| 国产精品丝袜一区| 成人午夜av电影| 国产精品福利一区二区| 99re热这里只有精品免费视频| 欧美激情中文字幕一区二区| 国产福利电影一区二区三区| 久久先锋资源网| 国产99久久久国产精品| 国产精品久久久久aaaa樱花| 91在线视频在线| 亚洲国产视频在线| 在线不卡a资源高清| 三级一区在线视频先锋 | 一本色道久久加勒比精品| 亚洲欧美日韩中文字幕一区二区三区 | 欧美一区国产二区| 精品在线观看视频| 欧美激情在线一区二区三区| 成人av免费观看| 亚洲欧美一区二区三区国产精品 | 99视频精品全部免费在线| 亚洲久草在线视频| 欧美丰满嫩嫩电影| 韩国在线一区二区| 国产精品传媒入口麻豆| 欧美日韩国产大片| 国产乱码字幕精品高清av| 亚洲色欲色欲www在线观看| 欧美日韩一区二区三区四区五区| 日本亚洲一区二区| 国产欧美日韩亚州综合| 色偷偷久久人人79超碰人人澡| 亚洲国产cao| 欧美激情一区二区在线| 欧美三级视频在线播放| 精久久久久久久久久久| 中文字幕佐山爱一区二区免费| 欧美三级韩国三级日本一级| 国产一区二区剧情av在线| 亚洲免费av高清| 久久这里只有精品首页| 欧洲一区二区av| 国产精品一区一区三区| 午夜av区久久| 国产精品成人午夜| 欧美精品一区二区在线观看| 91麻豆成人久久精品二区三区| 久久精品理论片| 亚洲国产精品一区二区尤物区| 国产日韩一级二级三级| 日韩一区二区影院| 91啪亚洲精品| 国产91精品入口| 久久超碰97中文字幕| 亚洲va欧美va天堂v国产综合| 国产精品天天摸av网| 日韩欧美国产wwwww| 欧洲国产伦久久久久久久| 不卡的电影网站| 国产精品亚洲午夜一区二区三区| 日韩国产一区二| 亚洲午夜免费电影| 亚洲黄色录像片| 综合激情网...| 亚洲国产精品精华液2区45| 欧美成人性战久久| 91麻豆精品国产91久久久更新时间 | 国产在线视视频有精品| 亚洲成av人综合在线观看| 亚洲男人天堂av网| 中文字幕在线一区免费| 国产无人区一区二区三区| www成人在线观看| 欧美一区二区三区免费在线看| 色综合夜色一区| 91麻豆成人久久精品二区三区| 风流少妇一区二区| 成人性生交大片免费看在线播放| 国产乱子轮精品视频| 精品一区二区三区av| 老司机免费视频一区二区三区| 午夜精品久久久久久久久久久 | 欧美国产日韩亚洲一区| 久久久久久免费| 亚洲国产成人在线| 中文字幕亚洲区| 亚洲婷婷综合色高清在线| 亚洲欧洲99久久| 亚洲欧洲国产专区| 亚洲人亚洲人成电影网站色| 成人欧美一区二区三区白人 | 99久久er热在这里只有精品66| 丁香婷婷综合网| 成人av在线影院| 色偷偷88欧美精品久久久| 欧洲一区二区av| 91精品一区二区三区久久久久久| 91精品欧美一区二区三区综合在| 欧美一区二区免费观在线| 亚洲精品在线电影| 欧美国产成人在线| 亚洲综合免费观看高清在线观看| 亚洲国产精品视频| 免费高清视频精品| 成人开心网精品视频| 在线精品视频一区二区三四 | 欧美在线观看18| 91精品国产综合久久精品性色| 欧美成人福利视频| 国产精品护士白丝一区av| 亚洲成人av福利| 国产九色sp调教91| 色综合天天综合色综合av | 国产精品伦理在线| 亚洲资源在线观看| 狠狠色丁香久久婷婷综| proumb性欧美在线观看| 欧美乱妇23p| 国产欧美一区二区精品性色超碰 | 欧美性受xxxx黑人xyx性爽| 日韩亚洲电影在线| 1024国产精品| 免费成人结看片| www.爱久久.com| 亚洲精品一区二区精华| 亚洲国产美国国产综合一区二区| 国产一区不卡视频| 欧美午夜精品理论片a级按摩| 精品少妇一区二区三区在线视频| 亚洲欧洲av在线| 国产在线播放一区二区三区| 91国模大尺度私拍在线视频| 精品国偷自产国产一区| 亚洲综合色婷婷| 国产aⅴ精品一区二区三区色成熟| 欧美伊人久久大香线蕉综合69| 国产色爱av资源综合区| 天堂蜜桃91精品| 91啪亚洲精品| 国产精品久久久久四虎| 国内成+人亚洲+欧美+综合在线| 色狠狠av一区二区三区| 国产精品人妖ts系列视频| 久久99精品国产麻豆不卡| 在线免费不卡视频| 国产精品久久久一本精品| 国产一区二区三区在线观看精品| 欧美放荡的少妇| 一区二区三区波多野结衣在线观看| 粉嫩在线一区二区三区视频| 日韩一区二区三| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品1区2区| 欧美xxxxx裸体时装秀| 日韩精品一二三| 欧美电影影音先锋| 午夜视频在线观看一区二区| 欧洲色大大久久| 一区二区激情视频| 色婷婷久久久亚洲一区二区三区| 中文字幕在线不卡一区| 国产 日韩 欧美大片| 欧美国产精品一区| 成人一区二区三区在线观看| 久久色视频免费观看| 国产一区视频网站| www久久久久| 波多野结衣视频一区|