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

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

?? windowsdlg.cpp

?? 一個功能強大的代碼編輯器源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <windows.h>
#include "WindowsDlg.h"
#include "WindowsDlgRc.h"
#include "ScintillaEditView.h"
#include <algorithm>
#include <functional>
#include <vector>

#ifndef _countof
#define _countof(x) (sizeof(x)/sizeof((x)[0]))
#endif

#ifndef LVS_EX_DOUBLEBUFFER
#define LVS_EX_DOUBLEBUFFER     0x00010000
#endif

static const char *readonlyString = " [Read Only]";
const UINT WDN_NOTIFY = RegisterWindowMessage("WDN_NOTIFY");

inline static DWORD GetStyle(HWND hWnd) { 
	return (DWORD)GetWindowLong(hWnd, GWL_STYLE); 
}
inline static DWORD GetExStyle(HWND hWnd) { 
	return (DWORD)GetWindowLong(hWnd, GWL_EXSTYLE); 
}

inline static BOOL ModifyStyle(HWND hWnd, DWORD dwRemove, DWORD dwAdd) {
	DWORD dwStyle = ::GetWindowLong(hWnd, GWL_STYLE);
	DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
	if(dwStyle == dwNewStyle)
		return FALSE;
	::SetWindowLong(hWnd, GWL_STYLE, dwNewStyle);
	return TRUE;
}

inline static BOOL ModifyStyleEx(HWND hWnd, DWORD dwRemove, DWORD dwAdd) {
	DWORD dwStyle = ::GetWindowLong(hWnd, GWL_EXSTYLE);
	DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
	if(dwStyle == dwNewStyle)
		return FALSE;
	::SetWindowLong(hWnd, GWL_EXSTYLE, dwNewStyle);
	return TRUE;
}


struct NumericStringEquivalence
{
	bool operator()(const char* s1, const char* s2) const
	{ return numstrcmp(s1, s2) < 0; }
	static inline int numstrcmp_get(const char **str, int *length)
	{
		const char *p = *str;
		int value = 0;
		for (*length = 0; isdigit(*p); (*length)++)
			value = value * 10 + *p++ - '0';
		*str = p;
		return (value);
	}
	static int numstrcmp(const char *str1, const char *str2)
	{
		char *p1, *p2;
		int c1, c2, lcmp;
		for(;;)
		{
			c1 = tolower(*str1), c2 = tolower(*str2);
			if ( c1 == 0 || c2 == 0 )
				break;
			else if (isdigit(c1) && isdigit(c2))
			{			
				lcmp = strtol(str1, &p1, 10) - strtol(str2, &p2, 10);
				if ( lcmp == 0 )
					lcmp = (p2 - str2) - (p1 - str1);
				if ( lcmp != 0 )
					return (lcmp > 0 ? 1 : -1);
				str1 = p1, str2 = p2;
			}
			else
			{
				lcmp = (c1 - c2);
				if (lcmp != 0)
					return (lcmp > 0 ? 1 : -1);
				++str1, ++str2;
			}
		}
		lcmp = (c1 - c2);
		return ( lcmp < 0 ) ? -1 : (lcmp > 0 ? 1 : 0);
	}
};

struct BufferEquivalent
{
	NumericStringEquivalence _strequiv;
	ScintillaEditView *_pView;
	int _iColumn;
	bool _reverse;
	BufferEquivalent(ScintillaEditView *pView, int iColumn, bool reverse) 
		: _pView(pView), _iColumn(iColumn), _reverse(reverse)
	{}

	bool operator()(int i1, int i2) const
	{
		if (i1 == i2) return false; // equivalence test not equality
		if (_reverse) std::swap(i1, i2);
		return compare(i1, i2);
	}

	bool compare(int i1, int i2) const
	{ 
		const Buffer& b1 = _pView->getBufferAt(i1);
		const Buffer& b2 = _pView->getBufferAt(i2);
		if (_iColumn == 0)
		{
			const char *s1 = PathFindFileName(b1.getFileName());
			const char *s2 = PathFindFileName(b2.getFileName());
			return _strequiv(s1, s2);
		}
		else if (_iColumn == 1)
		{
			char buf1[MAX_PATH];
			char buf2[MAX_PATH];
			const char *f1 = b1.getFileName();
			const char *f2 = b2.getFileName();
			const char *s1 = PathFindFileName(b1.getFileName());
			const char *s2 = PathFindFileName(b2.getFileName());
			int l1 = min((s1 - f1), (_countof(buf1)-1));
			int l2 = min((s2 - f2), (_countof(buf2)-1));
			strncpy(buf1, f1, l1); buf1[l1] = 0;
			strncpy(buf2, f2, l2); buf2[l2] = 0;
			return _strequiv(buf1, buf2);
		}
		else if (_iColumn == 2)
		{
			int t1 = (int)b1.getLangType();
			int t2 = (int)b2.getLangType();
			return (t1 < t2); // yeah should be the name 
		}
		return false;
	}
};

//////////////////
// Window map tells CWinMgr how to position dialog controls
//
BEGIN_WINDOW_MAP(WindowsDlgMap)
	BEGINROWS(WRCT_REST,0,RCMARGINS(8,8))
		BEGINCOLS(WRCT_REST,0,0)                       // Begin list control column
			BEGINROWS(WRCT_REST,0,0)
				RCREST(IDC_WINDOWS_LIST)
				RCSPACE(20)
			ENDGROUP()
			RCSPACE(12)
			BEGINROWS(WRCT_TOFIT,0,0)
			RCSPACE(12)
			RCTOFIT(IDOK)
			RCSPACE(-12)
			RCTOFIT(IDC_WINDOWS_SAVE)
			RCSPACE(-12)
			RCTOFIT(IDC_WINDOWS_CLOSE)
			RCSPACE(-12)
			RCTOFIT(IDC_WINDOWS_SORT)
			RCREST(-1)
			RCTOFIT(IDCANCEL)
			ENDGROUP()
		ENDGROUP()
	ENDGROUP()
END_WINDOW_MAP()

RECT WindowsDlg::_lastKnownLocation;

WindowsDlg::WindowsDlg() : MyBaseClass(WindowsDlgMap), _isSorted(false)
{
	_szMinButton = SIZEZERO;
	_szMinListCtrl = SIZEZERO;
}

void WindowsDlg::init(HINSTANCE hInst, HWND parent, ScintillaEditView *pView)
{
	MyBaseClass::init(hInst, parent);
	_pView = pView;
}

void WindowsDlg::init(HINSTANCE hInst, HWND parent)
{
	assert(!"Call other initialize method");
	MyBaseClass::init(hInst, parent);
	_pView = NULL;
}

BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) 
	{
		case WM_INITDIALOG :
		{
			changeDlgLang();
			return MyBaseClass::run_dlgProc(message, wParam, lParam);	
		}
		case WM_COMMAND : 
		{
			switch (wParam)
			{
			case IDOK :
				activateCurrent();
				return TRUE;

			case IDCANCEL :
				::GetWindowRect(_hSelf, &_lastKnownLocation);
				EndDialog(_hSelf, IDCANCEL);
				return TRUE;

			case IDC_WINDOWS_SAVE:
				doSave();
				return TRUE;

			case IDC_WINDOWS_CLOSE:
				doClose();
				return TRUE;

			case IDC_WINDOWS_SORT:
				doSortToTabs();
				_isSorted = false;
				updateButtonState();
				break;

			default :
				break;
			}
		}

		case WM_DESTROY :
			//destroy();
			return TRUE;

		case WM_NOTIFY :
		{		
			if (wParam == IDC_WINDOWS_LIST)
			{
				NMHDR* pNMHDR = (NMHDR*)lParam;
				if (pNMHDR->code == LVN_GETDISPINFO)
				{
					NMLVDISPINFO *pLvdi = (NMLVDISPINFO *)pNMHDR;
					//if(pLvdi->item.mask & LVIF_IMAGE)
					//	; 
					if(pLvdi->item.mask & LVIF_TEXT)
					{
						pLvdi->item.pszText[0] = 0;
						size_t index = pLvdi->item.iItem;
						if (index >= _pView->getNbDoc() || index >= _idxMap.size())
							return FALSE;
						index = _idxMap[index];

						const Buffer& buffer = _pView->getBufferAt(index);
						if (pLvdi->item.iSubItem == 0) // file name
						{
							int len = pLvdi->item.cchTextMax;
							const char *fullName = buffer.getFileName();
							strncpy(pLvdi->item.pszText, PathFindFileName(fullName), len-1);
							pLvdi->item.pszText[len-1] = 0;
							len = strlen(pLvdi->item.pszText);
							if (buffer.isDirty())
							{
								if (len < pLvdi->item.cchTextMax)
								{
									pLvdi->item.pszText[len++] = '*';
									pLvdi->item.pszText[len] = 0;
								}
							}
							else if (buffer.isReadOnly())
							{
								len += strlen(readonlyString);
								if (len <= pLvdi->item.cchTextMax)
									strcat(pLvdi->item.pszText, readonlyString);
							}
						}
						else if (pLvdi->item.iSubItem == 1) // directory
						{
							const char *fullName = buffer.getFileName();
							const char *fileName = PathFindFileName(fullName);
							int len = fileName-fullName+1;
							if (pLvdi->item.cchTextMax < len)
								len = pLvdi->item.cchTextMax;
							strncpy(pLvdi->item.pszText, fullName, len-1);
							pLvdi->item.pszText[len-1] = 0;
						}
						else if (pLvdi->item.iSubItem == 2) // Type
						{
							int len = pLvdi->item.cchTextMax;
							NppParameters *pNppParameters = NppParameters::getInstance();
							Lang *lang = pNppParameters->getLangFromID(buffer.getLangType());
							if (NULL != lang)
							{
								strncpy(pLvdi->item.pszText, lang->getLangName(), len-1);
							}
						}
					}
					return TRUE;
				}
				else if (pNMHDR->code == LVN_COLUMNCLICK) // sort columns with stable sort
				{
					NMLISTVIEW *pNMLV = (NMLISTVIEW *)pNMHDR;
					if (pNMLV->iItem == -1)
					{
						bool reverse = false;
						int iColumn = pNMLV->iSubItem;
						if (_lastSort == iColumn)
						{
							reverse = true;
							_lastSort = -1;
						}
						else
						{
							_lastSort = iColumn;
						}
						int i;
						int n = _idxMap.size();
						vector<int> sortMap;
						sortMap.resize(n);
						for (i=0; i<n; ++i) sortMap[_idxMap[i]] = ListView_GetItemState(_hList, i, LVIS_SELECTED);
						stable_sort(_idxMap.begin(), _idxMap.end(), BufferEquivalent(_pView, iColumn, reverse));
						for (i=0; i<n; ++i) ListView_SetItemState(_hList, i, sortMap[_idxMap[i]] ? LVIS_SELECTED : 0, LVIS_SELECTED);

						::InvalidateRect(_hList, &_rc, FALSE);
						_isSorted = true;
						updateButtonState();
					}
					return TRUE;
				}
				else if (pNMHDR->code == LVN_ITEMACTIVATE || pNMHDR->code == LVN_ITEMCHANGED || pNMHDR->code == LVN_ODSTATECHANGED)
				{
					updateButtonState();
					return TRUE;
				}
				else if (pNMHDR->code == NM_DBLCLK)
				{
					::PostMessage(_hSelf, WM_COMMAND, IDOK, 0);
					//activateCurrent();
					return TRUE;
				}
				else if (pNMHDR->code == LVN_KEYDOWN)
				{
					NMLVKEYDOWN *lvkd = (NMLVKEYDOWN *)pNMHDR;
					// Ctrl+A
					short ctrl = GetKeyState(VK_CONTROL);
					short alt = GetKeyState(VK_MENU);
					short shift = GetKeyState(VK_SHIFT);
					if (lvkd->wVKey == 0x41/*a*/ && ctrl<0 && alt>=0 && shift>=0)
					{
						for (int i=0, n=ListView_GetItemCount(_hList); i<n; ++i)
							ListView_SetItemState(_hList, i, LVIS_SELECTED, LVIS_SELECTED);
					}
					return TRUE;
				}
			}
		}
		break;
	}
	return MyBaseClass::run_dlgProc(message, wParam, lParam);	
}

void WindowsDlg::updateButtonState()
{
	int nSelection = ListView_GetSelectedCount(_hList);
	if (nSelection == 0)
	{
		EnableWindow(GetDlgItem(_hSelf, IDOK), FALSE);
		EnableWindow(GetDlgItem(_hSelf, IDC_WINDOWS_SAVE), FALSE);
		EnableWindow(GetDlgItem(_hSelf, IDC_WINDOWS_CLOSE), FALSE);
	}
	else
	{
		EnableWindow(GetDlgItem(_hSelf, IDC_WINDOWS_SAVE), TRUE);
		EnableWindow(GetDlgItem(_hSelf, IDC_WINDOWS_CLOSE), TRUE);
		if (nSelection == 1)
			EnableWindow(GetDlgItem(_hSelf, IDOK), TRUE);
		else
			EnableWindow(GetDlgItem(_hSelf, IDOK), FALSE);
	}
	EnableWindow(GetDlgItem(_hSelf, IDC_WINDOWS_SORT), _isSorted);
}

int WindowsDlg::doDialog(TiXmlNode *dlgNode)
{
	_dlgNode = dlgNode;
	return ::DialogBoxParam(_hInst, MAKEINTRESOURCE(IDD_WINDOWS), _hParent,  (DLGPROC)dlgProc, (LPARAM)this);
};

bool WindowsDlg::changeDlgLang()
{
	if (!_dlgNode) return false;

	// Set Title
	const char *titre = (_dlgNode->ToElement())->Attribute("title");
	if (titre && titre[0])
	{
		::SetWindowText(_hSelf, titre);
	}

	// Set the text of child control
	for (TiXmlNode *childNode = _dlgNode->FirstChildElement("Item");
		childNode ;
		childNode = childNode->NextSibling("Item") )
	{
		TiXmlElement *element = childNode->ToElement();
		int id;
		const char *sentinel = element->Attribute("id", &id);
		const char *name = element->Attribute("name");
		if (sentinel && (name && name[0]))
		{
			HWND hItem = ::GetDlgItem(_hSelf, id);
			if (hItem)
				::SetWindowText(hItem, name);
		}
	}
	return true;
}

BOOL WindowsDlg::onInitDialog()
{
	_winMgr.InitToFitSizeFromCurrent(_hSelf);

	// save min size for OK/Cancel buttons
	_szMinButton = RectToSize(_winMgr.GetRect(IDOK));
	_szMinListCtrl = RectToSize(_winMgr.GetRect(IDC_WINDOWS_LIST));
	_lastSort = -1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产制服丝袜一区| 日本高清无吗v一区| 日韩一级二级三级| 日本不卡123| 日韩精品在线看片z| 亚洲美女视频在线观看| 极品少妇一区二区| 欧美三级日韩在线| 18涩涩午夜精品.www| 久久91精品国产91久久小草| 在线观看成人免费视频| 中文子幕无线码一区tr| 国产在线国偷精品免费看| 在线观看一区不卡| 亚洲欧美激情在线| 成人精品国产福利| 国产视频在线观看一区二区三区| 免费不卡在线观看| 91精品国产综合久久香蕉的特点| 亚洲色图色小说| 成人精品免费看| 国产校园另类小说区| 久草热8精品视频在线观看| 欧美丰满少妇xxxxx高潮对白| 亚洲免费资源在线播放| 成人av在线一区二区三区| 欧美激情中文字幕一区二区| 国产老妇另类xxxxx| 欧美电视剧在线看免费| 蜜桃一区二区三区在线| 制服.丝袜.亚洲.中文.综合| 亚洲成人免费在线| 欧美男生操女生| 日韩av二区在线播放| 欧美一区日本一区韩国一区| 日本欧美一区二区三区| 日韩精品一区二区三区四区视频| 久久不见久久见中文字幕免费| 日韩一区二区三区电影在线观看| 日韩av在线播放中文字幕| 欧美成人免费网站| 国产精品一区免费视频| 国产精品欧美综合在线| 一本色道久久综合亚洲精品按摩| 亚洲已满18点击进入久久| 欧美日韩精品欧美日韩精品一综合 | 欧美性色黄大片| 亚洲自拍偷拍av| 欧美一区二区三区在线视频| 日韩国产欧美在线播放| 久久免费偷拍视频| 99久久精品免费看| 香蕉成人伊视频在线观看| 日韩三级免费观看| 成人性视频免费网站| 亚洲精品成人精品456| 亚洲一区二区三区自拍| 91精品国产综合久久精品麻豆| 久久精品国产亚洲5555| 欧美国产日产图区| 欧美亚洲动漫精品| 麻豆成人免费电影| 欧美经典一区二区| 欧美在线高清视频| 国产综合色产在线精品| 自拍偷拍国产精品| 欧美一二三区在线| 不卡的av电影在线观看| 天天综合色天天综合色h| 久久―日本道色综合久久| 91美女片黄在线观看| 日本成人在线视频网站| 国产精品二区一区二区aⅴ污介绍| 91黄色小视频| 国产寡妇亲子伦一区二区| 亚洲一区二区三区四区不卡| 久久综合九色综合欧美98| 欧亚洲嫩模精品一区三区| 国产一区久久久| 亚洲第一成人在线| 国产精品丝袜在线| 日韩精品一区二区三区老鸭窝 | 久久99精品国产麻豆婷婷| 亚洲视频狠狠干| 久久亚区不卡日本| 欧美日韩高清一区二区不卡| 99热精品一区二区| 国产麻豆欧美日韩一区| 日本女优在线视频一区二区| 亚洲欧洲综合另类在线| 国产无一区二区| 欧美成人女星排行榜| 69堂精品视频| 欧美日韩一级片在线观看| 97久久超碰精品国产| 东方aⅴ免费观看久久av| 精东粉嫩av免费一区二区三区| 午夜激情一区二区| 亚洲综合免费观看高清完整版| 国产精品久久毛片a| 国产欧美日韩三区| 久久久久久久网| 久久免费午夜影院| 久久久精品免费网站| 亚洲精品一区二区三区四区高清| 91精品国产入口在线| 欧美日本一区二区在线观看| 在线视频你懂得一区| 91蜜桃网址入口| 91色九色蝌蚪| 99久久精品99国产精品| 9人人澡人人爽人人精品| 成人小视频免费在线观看| 国产高清亚洲一区| 日韩一区二区三区免费观看| 91精品国模一区二区三区| 欧美精品乱码久久久久久按摩| 欧美丝袜丝交足nylons图片| 欧美性猛片xxxx免费看久爱| 色综合久久综合中文综合网| www.亚洲国产| 在线亚洲人成电影网站色www| 99热99精品| 欧美性xxxxxx少妇| 欧美日产在线观看| 精品国产乱码久久久久久夜甘婷婷| 日韩视频免费观看高清在线视频| 日韩免费一区二区| 久久蜜桃香蕉精品一区二区三区| 国产日产欧产精品推荐色| 国产精品毛片久久久久久 | 国产欧美日韩久久| 综合色天天鬼久久鬼色| 一区二区三区免费看视频| 一二三区精品视频| 免费在线观看一区二区三区| 久久国产尿小便嘘嘘尿| 成人动漫在线一区| 欧美色爱综合网| 精品国产一区二区三区四区四 | 国产精品女同一区二区三区| 亚洲日本va午夜在线影院| 亚洲国产精品综合小说图片区| 日本成人在线一区| 成人的网站免费观看| 欧美精品视频www在线观看| 精品国产污污免费网站入口 | 亚洲靠逼com| 日韩国产精品久久久| 国产精品456露脸| 日本高清无吗v一区| 久久色视频免费观看| 一级精品视频在线观看宜春院| 日韩黄色免费电影| 成人精品国产福利| 欧美一区二区三区喷汁尤物| 国产欧美综合在线观看第十页| 亚洲国产精品一区二区久久| 国产精品一区在线观看你懂的| 色哟哟亚洲精品| 久久婷婷国产综合国色天香| 亚洲黄色录像片| 久久精品一区蜜桃臀影院| 激情伊人五月天久久综合| 日韩精品欧美成人高清一区二区| 高清成人在线观看| 欧美一区二区三级| 亚洲欧美韩国综合色| 麻豆国产精品视频| 欧美伊人久久大香线蕉综合69 | 精品一区免费av| 在线视频综合导航| 国产欧美日韩激情| 久久99精品视频| 91精品国产综合久久精品app| 综合分类小说区另类春色亚洲小说欧美| 美女视频第一区二区三区免费观看网站| 91免费版pro下载短视频| 欧美国产在线观看| 久久精品国产99国产| 欧美精品国产精品| 亚洲在线成人精品| 91伊人久久大香线蕉| 欧美激情一区在线| 国产精品99久久久久久宅男| 日韩欧美一区二区视频| 午夜欧美一区二区三区在线播放| 91蝌蚪porny成人天涯| 国产精品区一区二区三区| 国产一区二区三区蝌蚪| 欧美v日韩v国产v| 美国十次了思思久久精品导航| 欧美色图天堂网| 一区二区高清在线| 欧美艳星brazzers| 亚洲一级电影视频| 欧美日本韩国一区二区三区视频| 亚洲最新在线观看| 欧美视频一区在线| 视频一区二区中文字幕|