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

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

?? platwin.cxx

?? 最強源代碼編輯控件
?? CXX
?? 第 1 頁 / 共 5 頁
字號:
	TEXTMETRIC tm;
	::GetTextMetrics(hdc, &tm);
	return tm.tmHeight;
}

int SurfaceImpl::AverageCharWidth(Font &font_) {
	SetFont(font_);
	TEXTMETRIC tm;
	::GetTextMetrics(hdc, &tm);
	return tm.tmAveCharWidth;
}

int SurfaceImpl::SetPalette(Palette *pal, bool inBackGround) {
	if (paletteOld) {
		::SelectPalette(hdc, paletteOld, TRUE);
	}
	paletteOld = 0;
	int changes = 0;
	if (pal->allowRealization) {
		paletteOld = ::SelectPalette(hdc,
			reinterpret_cast<HPALETTE>(pal->hpal), inBackGround);
		changes = ::RealizePalette(hdc);
	}
	return changes;
}

void SurfaceImpl::SetClip(PRectangle rc) {
	::IntersectClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom);
}

void SurfaceImpl::FlushCachedState() {
	pen = 0;
	brush = 0;
	font = 0;
}

void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
	unicodeMode=unicodeMode_;
}

void SurfaceImpl::SetDBCSMode(int codePage_) {
	// No action on window as automatically handled by system.
	codePage = codePage_;
	win9xACPSame = !IsNT() && ((unsigned int)codePage == ::GetACP());
}

Surface *Surface::Allocate() {
	return new SurfaceImpl;
}

Window::~Window() {
}

void Window::Destroy() {
	if (id)
		::DestroyWindow(reinterpret_cast<HWND>(id));
	id = 0;
}

bool Window::HasFocus() {
	return ::GetFocus() == id;
}

PRectangle Window::GetPosition() {
	RECT rc;
	::GetWindowRect(reinterpret_cast<HWND>(id), &rc);
	return PRectangle(rc.left, rc.top, rc.right, rc.bottom);
}

void Window::SetPosition(PRectangle rc) {
	::SetWindowPos(reinterpret_cast<HWND>(id),
		0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOZORDER|SWP_NOACTIVATE);
}

void Window::SetPositionRelative(PRectangle rc, Window w) {
	LONG style = ::GetWindowLong(reinterpret_cast<HWND>(id), GWL_STYLE);
	if (style & WS_POPUP) {
		RECT rcOther;
		::GetWindowRect(reinterpret_cast<HWND>(w.GetID()), &rcOther);
		rc.Move(rcOther.left, rcOther.top);

		// Retrieve desktop bounds and make sure window popup's origin isn't left-top of the screen.
		RECT rcDesktop = {0, 0, 0, 0};
#ifdef SM_XVIRTUALSCREEN
		rcDesktop.left = ::GetSystemMetrics(SM_XVIRTUALSCREEN);
		rcDesktop.top = ::GetSystemMetrics(SM_YVIRTUALSCREEN);
		rcDesktop.right = rcDesktop.left + ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
		rcDesktop.bottom = rcDesktop.top + ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
#endif

		if (rc.left < rcDesktop.left) {
			rc.Move(rcDesktop.left - rc.left,0);
		}
		if (rc.top < rcDesktop.top) {
			rc.Move(0,rcDesktop.top - rc.top);
		}
	}
	SetPosition(rc);
}

PRectangle Window::GetClientPosition() {
	RECT rc={0,0,0,0};
	if (id)
		::GetClientRect(reinterpret_cast<HWND>(id), &rc);
	return  PRectangle(rc.left, rc.top, rc.right, rc.bottom);
}

void Window::Show(bool show) {
	if (show)
		::ShowWindow(reinterpret_cast<HWND>(id), SW_SHOWNOACTIVATE);
	else
		::ShowWindow(reinterpret_cast<HWND>(id), SW_HIDE);
}

void Window::InvalidateAll() {
	::InvalidateRect(reinterpret_cast<HWND>(id), NULL, FALSE);
}

void Window::InvalidateRectangle(PRectangle rc) {
	RECT rcw = RectFromPRectangle(rc);
	::InvalidateRect(reinterpret_cast<HWND>(id), &rcw, FALSE);
}

static LRESULT Window_SendMessage(Window *w, UINT msg, WPARAM wParam=0, LPARAM lParam=0) {
	return ::SendMessage(reinterpret_cast<HWND>(w->GetID()), msg, wParam, lParam);
}

void Window::SetFont(Font &font) {
	Window_SendMessage(this, WM_SETFONT,
		reinterpret_cast<WPARAM>(font.GetID()), 0);
}

void Window::SetCursor(Cursor curs) {
	switch (curs) {
	case cursorText:
		::SetCursor(::LoadCursor(NULL,IDC_IBEAM));
		break;
	case cursorUp:
		::SetCursor(::LoadCursor(NULL,IDC_UPARROW));
		break;
	case cursorWait:
		::SetCursor(::LoadCursor(NULL,IDC_WAIT));
		break;
	case cursorHoriz:
		::SetCursor(::LoadCursor(NULL,IDC_SIZEWE));
		break;
	case cursorVert:
		::SetCursor(::LoadCursor(NULL,IDC_SIZENS));
		break;
	case cursorHand:
		::SetCursor(::LoadCursor(NULL,IDC_HAND));
		break;
	case cursorReverseArrow: {
			if (!hinstPlatformRes)
				hinstPlatformRes = ::GetModuleHandle(TEXT("Scintilla"));
			if (!hinstPlatformRes)
				hinstPlatformRes = ::GetModuleHandle(TEXT("SciLexer"));
			if (!hinstPlatformRes)
				hinstPlatformRes = ::GetModuleHandle(NULL);
			HCURSOR hcursor = ::LoadCursor(hinstPlatformRes, MAKEINTRESOURCE(IDC_MARGIN));
			if (hcursor)
				::SetCursor(hcursor);
			else
				::SetCursor(::LoadCursor(NULL,IDC_ARROW));
		}
		break;
	case cursorArrow:
	case cursorInvalid:	// Should not occur, but just in case.
		::SetCursor(::LoadCursor(NULL,IDC_ARROW));
		break;
	}
}

void Window::SetTitle(const char *s) {
	::SetWindowText(reinterpret_cast<HWND>(id), s);
}

struct ListItemData {
	const char *text;
	int pixId;
};

#define _ROUND2(n,pow2) \
        ( ( (n) + (pow2) - 1) & ~((pow2) - 1) )

class LineToItem {
	char *words;
	int wordsCount;
	int wordsSize;

	ListItemData *data;
	int len;
	int count;

private:
	void FreeWords() {
		delete []words;
		words = NULL;
		wordsCount = 0;
		wordsSize = 0;
	}
	char *AllocWord(const char *word);

public:
	LineToItem() : words(NULL), wordsCount(0), wordsSize(0), data(NULL), len(0), count(0) {
	}
	~LineToItem() {
		Clear();
	}
	void Clear() {
		FreeWords();
		delete []data;
		data = NULL;
		len = 0;
		count = 0;
	}

	ListItemData *Append(const char *text, int value);

	ListItemData Get(int index) const {
		if (index >= 0 && index < count) {
			return data[index];
		} else {
			ListItemData missing = {"", -1};
			return missing;
		}
	}
	int Count() const {
		return count;
	}

	ListItemData *AllocItem();

	void SetWords(char *s) {
		words = s;	// N.B. will be deleted on destruction
	}
};

char *LineToItem::AllocWord(const char *text) {
	int chars = strlen(text) + 1;
	int newCount = wordsCount + chars;
	if (newCount > wordsSize) {
		wordsSize = _ROUND2(newCount * 2, 8192);
		char *wordsNew = new char[wordsSize];
		memcpy(wordsNew, words, wordsCount);
		int offset = wordsNew - words;
		for (int i=0; i<count; i++)
			data[i].text += offset;
		delete []words;
		words = wordsNew;
	}
	char *s = &words[wordsCount];
	wordsCount = newCount;
	strncpy(s, text, chars);
	return s;
}

ListItemData *LineToItem::AllocItem() {
	if (count >= len) {
		int lenNew = _ROUND2((count+1) * 2, 1024);
		ListItemData *dataNew = new ListItemData[lenNew];
		memcpy(dataNew, data, count * sizeof(ListItemData));
		delete []data;
		data = dataNew;
		len = lenNew;
	}
	ListItemData *item = &data[count];
	count++;
	return item;
}

ListItemData *LineToItem::Append(const char *text, int imageIndex) {
	ListItemData *item = AllocItem();
	item->text = AllocWord(text);
	item->pixId = imageIndex;
	return item;
}

const TCHAR ListBoxX_ClassName[] = TEXT("ListBoxX");

ListBox::ListBox() {
}

ListBox::~ListBox() {
}

class ListBoxX : public ListBox {
	int lineHeight;
	FontID fontCopy;
	XPMSet xset;
	LineToItem lti;
	HWND lb;
	bool unicodeMode;
	int desiredVisibleRows;
	unsigned int maxItemCharacters;
	unsigned int aveCharWidth;
	Window *parent;
	int ctrlID;
	CallBackAction doubleClickAction;
	void *doubleClickActionData;
	const char *widestItem;
	unsigned int maxCharWidth;
	int resizeHit;
	PRectangle rcPreSize;
	Point dragOffset;
	Point location;	// Caret location at which the list is opened

	HWND GetHWND() const;
	void AppendListItem(const char *startword, const char *numword);
	void AdjustWindowRect(PRectangle *rc) const;
	int ItemHeight() const;
	int MinClientWidth() const;
	int TextOffset() const;
	Point GetClientExtent() const;
	Point MinTrackSize() const;
	Point MaxTrackSize() const;
	void SetRedraw(bool on);
	void OnDoubleClick();
	void ResizeToCursor();
	void StartResize(WPARAM);
	int NcHitTest(WPARAM, LPARAM) const;
	void CentreItem(int);
	void Paint(HDC);
	void Erase(HDC);
	static LRESULT PASCAL ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);

	static const Point ItemInset;	// Padding around whole item
	static const Point TextInset;	// Padding around text
	static const Point ImageInset;	// Padding around image

public:
	ListBoxX() : lineHeight(10), fontCopy(0), lb(0), unicodeMode(false),
		desiredVisibleRows(5), maxItemCharacters(0), aveCharWidth(8),
		parent(NULL), ctrlID(0), doubleClickAction(NULL), doubleClickActionData(NULL),
		widestItem(NULL), maxCharWidth(1), resizeHit(0) {
	}
	virtual ~ListBoxX() {
		if (fontCopy) {
			::DeleteObject(fontCopy);
			fontCopy = 0;
		}
	}
	virtual void SetFont(Font &font);
	virtual void Create(Window &parent, int ctrlID, Point location_, int lineHeight_, bool unicodeMode_);
	virtual void SetAverageCharWidth(int width);
	virtual void SetVisibleRows(int rows);
	virtual int GetVisibleRows() const;
	virtual PRectangle GetDesiredRect();
	virtual int CaretFromEdge();
	virtual void Clear();
	virtual void Append(char *s, int type = -1);
	virtual int Length();
	virtual void Select(int n);
	virtual int GetSelection();
	virtual int Find(const char *prefix);
	virtual void GetValue(int n, char *value, int len);
	virtual void RegisterImage(int type, const char *xpm_data);
	virtual void ClearRegisteredImages();
	virtual void SetDoubleClickAction(CallBackAction action, void *data) {
		doubleClickAction = action;
		doubleClickActionData = data;
	}
	virtual void SetList(const char *list, char separator, char typesep);
	void Draw(DRAWITEMSTRUCT *pDrawItem);
	LRESULT WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
	static LRESULT PASCAL StaticWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
};

const Point ListBoxX::ItemInset(0, 0);
const Point ListBoxX::TextInset(2, 0);
const Point ListBoxX::ImageInset(1, 0);

ListBox *ListBox::Allocate() {
	ListBoxX *lb = new ListBoxX();
	return lb;
}

void ListBoxX::Create(Window &parent_, int ctrlID_, Point location_, int lineHeight_, bool unicodeMode_) {
	parent = &parent_;
	ctrlID = ctrlID_;
	location = location_;
	lineHeight = lineHeight_;
	unicodeMode = unicodeMode_;
	HWND hwndParent = reinterpret_cast<HWND>(parent->GetID());
	HINSTANCE hinstanceParent = GetWindowInstance(hwndParent);
	// Window created as popup so not clipped within parent client area
	id = ::CreateWindowEx(
		WS_EX_WINDOWEDGE, ListBoxX_ClassName, TEXT(""),
		WS_POPUP | WS_THICKFRAME,
		100,100, 150,80, hwndParent,
		NULL,
		hinstanceParent,
		this);

	::MapWindowPoints(hwndParent, NULL, reinterpret_cast<POINT*>(&location), 1);
}

void ListBoxX::SetFont(Font &font) {
	LOGFONT lf;
	if (0 != ::GetObject(font.GetID(), sizeof(lf), &lf)) {
		if (fontCopy) {
			::DeleteObject(fontCopy);
			fontCopy = 0;
		}
		fontCopy = ::CreateFontIndirect(&lf);
		::SendMessage(lb, WM_SETFONT, reinterpret_cast<WPARAM>(fontCopy), 0);
	}
}

void ListBoxX::SetAverageCharWidth(int width) {
	aveCharWidth = width;
}

void ListBoxX::SetVisibleRows(int rows) {
	desiredVisibleRows = rows;
}

int ListBoxX::GetVisibleRows() const {
	return desiredVisibleRows;
}

HWND ListBoxX::GetHWND() const {
	return reinterpret_cast<HWND>(GetID());
}

PRectangle ListBoxX::GetDesiredRect() {
	PRectangle rcDesired = GetPosition();

	int rows = Length();
	if ((rows == 0) || (rows > desiredVisibleRows))
		rows = desiredVisibleRows;
	rcDesired.bottom = rcDesired.top + ItemHeight() * rows;

	int width = MinClientWidth();
	HDC hdc = ::GetDC(lb);
	HFONT oldFont = SelectFont(hdc, fontCopy);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本在线高清不卡dvd| 国产一区欧美二区| 国产精品免费人成网站| 精品久久久久久久久久久久久久久久久| 色天天综合久久久久综合片| 91蜜桃婷婷狠狠久久综合9色| 成人激情校园春色| 岛国精品在线观看| 成人av在线影院| 欧美男生操女生| 色婷婷综合久久久久中文| 色播五月激情综合网| 欧美日本韩国一区二区三区视频| 欧美日韩视频在线第一区| 欧美日韩中文字幕一区二区| 欧美日韩免费电影| 91麻豆精品国产91久久久久久| 欧美精品在线一区二区三区| 91精选在线观看| 久久综合999| 久久夜色精品国产噜噜av| 国产亚洲综合性久久久影院| 中文字幕一区二| 午夜欧美2019年伦理 | 麻豆精品一区二区综合av| 蜜臀a∨国产成人精品| 国产精品自拍在线| 91在线观看免费视频| 欧美精品一卡两卡| 久久婷婷色综合| 亚洲欧美视频在线观看| 亚洲sss视频在线视频| 久久99九九99精品| 91一区一区三区| 678五月天丁香亚洲综合网| 2024国产精品视频| 亚洲综合色成人| 国产一区二区不卡老阿姨| av影院午夜一区| 日韩欧美在线观看一区二区三区| 国产精品视频九色porn| 亚洲国产精品久久久久秋霞影院| 国产一区二区精品久久91| 99re热这里只有精品免费视频 | 欧美日韩美少妇| 国产日韩欧美综合在线| 亚洲国产一区在线观看| 国产成人精品亚洲午夜麻豆| 欧美片网站yy| 亚洲欧美偷拍三级| 国产永久精品大片wwwapp| 欧美三级在线看| 亚洲婷婷综合久久一本伊一区| 秋霞av亚洲一区二区三| 日本二三区不卡| 国产精品久久一卡二卡| 久久成人免费网| 欧美乱妇15p| 亚洲精品伦理在线| 成人av在线一区二区三区| 日韩欧美国产电影| 婷婷亚洲久悠悠色悠在线播放 | 亚洲h在线观看| 91视频观看视频| 国产精品久线在线观看| 国产成人av影院| 日韩免费视频线观看| 午夜电影网亚洲视频| 色偷偷久久一区二区三区| 国产偷v国产偷v亚洲高清| 老鸭窝一区二区久久精品| 欧美三级中文字幕| 亚洲精品日产精品乱码不卡| 国产精一品亚洲二区在线视频| 欧美一区二区三区在线| 三级精品在线观看| 欧美精品久久久久久久多人混战| 亚洲亚洲精品在线观看| 在线视频国内自拍亚洲视频| 久久99精品视频| 日韩亚洲欧美一区二区三区| 日韩av成人高清| 欧美人与性动xxxx| 日本在线不卡视频| 欧美不卡一区二区| 久久激情综合网| 国产亚洲一区二区三区四区| 国产.欧美.日韩| 国产精品久久久久精k8| 99精品视频免费在线观看| 最新日韩在线视频| 91传媒视频在线播放| 亚洲电影一级片| 日韩一区二区三区免费看| 日本欧美肥老太交大片| 精品免费日韩av| www.成人网.com| 亚洲第一电影网| 欧美变态口味重另类| 韩国在线一区二区| 欧美国产精品一区二区三区| 色哟哟一区二区| 日韩成人精品在线观看| 久久久美女毛片| 91久久精品国产91性色tv| 亚洲777理论| 久久久www免费人成精品| 99久久精品免费看| 日日摸夜夜添夜夜添亚洲女人| 欧美v日韩v国产v| 91丨porny丨蝌蚪视频| 天堂va蜜桃一区二区三区漫画版| 久久久亚洲高清| 欧美在线三级电影| 国产一区二区精品久久91| 一个色在线综合| 2023国产一二三区日本精品2022| 91麻豆国产在线观看| 久久99精品久久久久久国产越南| 国产精品家庭影院| 欧美一区二区日韩| 91视频国产观看| 国产在线播精品第三| 亚洲综合激情另类小说区| 久久免费电影网| 欧美日韩激情在线| 成人av资源网站| 国产真实乱偷精品视频免| 亚洲国产婷婷综合在线精品| 国产精品免费久久| 欧美成va人片在线观看| 欧美日韩一区二区三区不卡| 成人av资源站| 国产酒店精品激情| 美女www一区二区| 午夜电影网亚洲视频| 亚洲精品综合在线| 国产精品久久久久久久浪潮网站 | 91免费在线播放| 国产一区二区三区免费观看| 日韩专区一卡二卡| 一区二区三区四区五区视频在线观看| 国产亚洲欧美激情| 日韩欧美国产三级| 91麻豆精品国产91久久久使用方法| 色老头久久综合| 91日韩一区二区三区| 国产成人精品午夜视频免费| 精品无人码麻豆乱码1区2区| 日产欧产美韩系列久久99| 亚洲综合自拍偷拍| 亚洲乱码国产乱码精品精98午夜| 国产精品蜜臀av| 日本一区二区三区久久久久久久久不 | 久久久久久久久久久久电影 | 国产乱子轮精品视频| 在线精品视频免费播放| 国产成人午夜电影网| 国产美女一区二区| 国产精品资源在线看| 国产成人自拍网| 成人福利视频在线看| 99久久99久久久精品齐齐| 91在线免费看| 精品视频色一区| 欧美va亚洲va在线观看蝴蝶网| 精品久久久三级丝袜| 久久久久久久免费视频了| 国产人成亚洲第一网站在线播放 | 亚洲狠狠爱一区二区三区| 亚洲资源在线观看| 亚洲国产精品久久久久秋霞影院| 舔着乳尖日韩一区| 日本美女一区二区三区视频| 免费在线看成人av| 国产福利不卡视频| 91在线观看地址| 欧美美女视频在线观看| 精品国产一区二区三区不卡| 欧美激情一区二区三区蜜桃视频 | 6080国产精品一区二区| 欧美不卡一二三| 国产精品久久久久婷婷| 亚洲大片一区二区三区| 国产一区不卡视频| 在线精品视频一区二区| 日韩精品影音先锋| 亚洲区小说区图片区qvod| 日韩高清不卡在线| 成人教育av在线| 91精品国产综合久久精品图片| 久久精品欧美日韩精品 | 美国欧美日韩国产在线播放| 岛国一区二区三区| 欧美一区二区在线免费观看| 一色桃子久久精品亚洲| 奇米精品一区二区三区在线观看一 | 国产精品456| 欧美日韩精品一区二区三区 | 欧美区一区二区三区|