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

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

?? activex.cpp

?? ReactOS是一些高手根據Windows XP的內核編寫出的類XP。內核實現機理和API函數調用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統內核的人可以看一看。
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
				{
					RECT rc;
					GetClientRect(m_displayWindow, &rc);
					BitBlt(hdc, 0, 0, rc.right, rc.bottom, m_displayBuffer, 0, 0, SRCCOPY);
				}
				else
				{
					PAINTSTRUCT ps;
					hdc = BeginPaint(m_displayWindow, &ps);

					if(!m_smartSizing)
					{
						BitBlt
						(
							hdc,
							ps.rcPaint.left,
							ps.rcPaint.top,
							ps.rcPaint.right - ps.rcPaint.left,
							ps.rcPaint.bottom - ps.rcPaint.top,
							m_displayBuffer,
							ps.rcPaint.left,
							ps.rcPaint.top,
							SRCCOPY
						);
					}
					else
					{
						// bleh. There has to be a better way
						SetStretchBltMode(hdc, HALFTONE);

						StretchBlt
						(
							hdc,
							0,
							0,
							m_consoleWidth,
							m_consoleHeight,
							m_displayBuffer,
							0,
							0,
							m_displayBufferWidth,
							m_displayBufferHeight,
							SRCCOPY
						);
					}

					EndPaint(m_displayWindow, &ps);
				}

				LeaveCriticalSection(&m_displayBufferMutex);
			}

			return 0;

		default:
			break;
		}

		return DefWindowProc(m_displayWindow, uMsg, wParam, lParam);
	}

	/* Screen repainting */
	void Display_RepaintRect(const RECT * lprc)
	{
		if(m_smartSizing)
			return Display_RepaintAll();

		RECT rcDamage;
		IntersectRect(&rcDamage, lprc, &m_displayBufferClip);
		InvalidateRect(m_displayWindow, &rcDamage, FALSE);
	}

	void Display_RepaintArea(int x, int y, int cx, int cy)
	{
		if(m_smartSizing)
			return Display_RepaintAll();

		RECT rcDamage;
		rcDamage.left = x;
		rcDamage.top = y;
		rcDamage.right = x + cx;
		rcDamage.bottom = y + cy;
		Display_RepaintRect(&rcDamage);
	}

	void Display_RepaintPolygon(POINT * point, int npoints, int linewidth)
	{
		if(m_smartSizing)
			return Display_RepaintAll();

		RECT rcDamage;

		rcDamage.left = MAXLONG;
		rcDamage.top = MAXLONG;
		rcDamage.right = 0;
		rcDamage.bottom = 0;

		for(int i = 0; i < npoints; ++ i)
		{
			if(point[i].x < rcDamage.left)
				rcDamage.left = point[i].x;

			if(point[i].y < rcDamage.top)
				rcDamage.top = point[i].y;

			if(point[i].x > rcDamage.right)
				rcDamage.right = point[i].x;

			if(point[i].y > rcDamage.bottom)
				rcDamage.bottom = point[i].y;
		}

		InflateRect(&rcDamage, linewidth, linewidth);
		Display_RepaintRect(&rcDamage);
	}

	void Display_RepaintAll()
	{
		InvalidateRgn(m_displayWindow, NULL, FALSE);
	}

public:
	void Display_SetClip(int x, int y, int cx, int cy)
	{
		m_displayBufferClip.left = x;
		m_displayBufferClip.top = y;
		m_displayBufferClip.right = x + cx + 1;
		m_displayBufferClip.bottom = y + cy + 1;

		HRGN hrgn = CreateRectRgnIndirect(&m_displayBufferClip);
		SelectClipRgn(m_displayBuffer, hrgn);
		DeleteObject(hrgn);
	}

	void Display_ResetClip()
	{
		m_displayBufferClip.left = 0;
		m_displayBufferClip.top = 0;
		m_displayBufferClip.right = m_displayBufferWidth;
		m_displayBufferClip.bottom = m_displayBufferHeight;
		SelectClipRgn(m_displayBuffer, NULL);
	}

	void Display_PaintBitmap(int x, int y, int cx, int cy, int width, int height, uint8 * data)
	{
		GdiFlush();

		int fromstride = alignup(width * m_displayBufferByteDepth, 4);
		int sizex = cx * m_displayBufferByteDepth;

		const uint8 * src = data;

		uint8 * dst =
			(uint8 *)m_displayBufferRaw +
			(m_displayBufferHeight - y - cy) * m_displayBufferStride +
			x * m_displayBufferByteDepth;

		for(int i = 0; i < cy; ++ i)
		{
			memcpy(dst, src, sizex);
			src += fromstride;
			dst += m_displayBufferStride;
		}

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_DestBlt(uint8 opcode, int x, int y, int cx, int cy)
	{
		int dcsave = SaveDC(m_displayBuffer);
		SelectObject(m_displayBuffer, GetStockObject(BLACK_BRUSH));
		PatBlt(m_displayBuffer, x, y, cx, cy, MAKELONG(0, opcode));
		RestoreDC(m_displayBuffer, dcsave);
		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_PatBlt(uint8 opcode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour, int fgcolour)
	{
		HBRUSH hbr = win32_create_brush(brush, fgcolour);

		int dcsave = SaveDC(m_displayBuffer);

		SetBkColor(m_displayBuffer, bgcolour);
		SetTextColor(m_displayBuffer, fgcolour);
		SetBrushOrgEx(m_displayBuffer, brush->xorigin, brush->yorigin, NULL);
		SelectObject(m_displayBuffer, hbr);

		PatBlt(m_displayBuffer, x, y, cx, cy, MAKELONG(0, opcode));

		RestoreDC(m_displayBuffer, dcsave);

		DeleteObject(hbr);

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_ScreenBlt(uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy)
	{
		BitBlt(m_displayBuffer, x, y, cx, cy, m_displayBuffer, srcx, srcy, MAKELONG(0, opcode));
		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_MemBlt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy)
	{
		HDC hdcSrc = CreateCompatibleDC(m_displayBuffer);
		HGDIOBJ hOld = SelectObject(hdcSrc, src);

		BitBlt(m_displayBuffer, x, y, cx, cy, hdcSrc, srcx, srcy, MAKELONG(0, opcode));

		SelectObject(hdcSrc, hOld);
		DeleteDC(hdcSrc);

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_TriBlt(uint8 opcode, int x, int y, int cx, int cy, HBITMAP src, int srcx, int srcy, BRUSH * brush, int bgcolour, int fgcolour)
	{
		// TODO
		HDC hdcSrc = CreateCompatibleDC(m_displayBuffer);
		HGDIOBJ hOld = SelectObject(hdcSrc, src);

		//SELECT_BRUSH(brush, bgcolour, fgcolour);

		BitBlt(m_displayBuffer, x, y, cx, cy, hdcSrc, srcx, srcy, MAKELONG(0, opcode));

		//RESET_BRUSH();

		SelectObject(hdcSrc, hOld);
		DeleteDC(hdcSrc);

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_Line(uint8 opcode, int startx, int starty, int endx, int endy, PEN * pen)
	{
		HPEN hpen = CreatePen(pen->style, pen->width, pen->colour);

		int dcsave = SaveDC(m_displayBuffer);

		SetROP2(m_displayBuffer, opcode);
		SelectObject(m_displayBuffer, hpen);
		MoveToEx(m_displayBuffer, startx, starty, NULL);

		LineTo(m_displayBuffer, endx, endy);

		RestoreDC(m_displayBuffer, dcsave);

		DeleteObject(hpen);

		RECT rcDamage;

		if(startx < endx)
		{
			rcDamage.left = startx;
			rcDamage.right = endx;
		}
		else
		{
			rcDamage.left = endx;
			rcDamage.right = startx;
		}

		if(starty < endy)
		{
			rcDamage.top = starty;
			rcDamage.bottom = endy;
		}
		else
		{
			rcDamage.top = endy;
			rcDamage.bottom = starty;
		}

		InflateRect(&rcDamage, pen->width, pen->width);
		Display_RepaintRect(&rcDamage);
	}

	void Display_Rect(int x, int y, int cx, int cy, int colour)
	{
		HBRUSH hbr = CreateSolidBrush(colour);

		int dcsave = SaveDC(m_displayBuffer);

		SelectObject(m_displayBuffer, hbr);
		SelectObject(m_displayBuffer, GetStockObject(NULL_PEN));

		Rectangle(m_displayBuffer, x, y, x + cx + 1, y + cy + 1);

		RestoreDC(m_displayBuffer, dcsave);

		DeleteObject(hbr);

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_Polygon(uint8 opcode, uint8 fillmode, POINT * point, int npoints, BRUSH * brush, int bgcolour, int fgcolour)
	{
		HBRUSH hbr = win32_create_brush(brush, fgcolour);

		int dcsave = SaveDC(m_displayBuffer);

		SetBkColor(m_displayBuffer, bgcolour);
		SetTextColor(m_displayBuffer, fgcolour);
		SetPolyFillMode(m_displayBuffer, fillmode);
		SelectObject(m_displayBuffer, hbr);

		Polygon(m_displayBuffer, point, npoints);

		RestoreDC(m_displayBuffer, dcsave);

		Display_RepaintPolygon(point, npoints, 0);
	}

	void Display_Polyline(uint8 opcode, POINT * points, int npoints, PEN * pen)
	{
		POINT last = points[0];

		for(int i = 1; i < npoints; ++ i)
		{
			points[i].x += last.x;
			points[i].y += last.y;
			last = points[i];
		}

		HPEN hpen = CreatePen(pen->style, pen->width, pen->colour);

		int dcsave = SaveDC(m_displayBuffer);

		SetROP2(m_displayBuffer, opcode);
		SelectObject(m_displayBuffer, hpen);

		Polyline(m_displayBuffer, points, npoints);

		RestoreDC(m_displayBuffer, dcsave);

		DeleteObject(hpen);

		Display_RepaintPolygon(points, npoints, pen->width);
	}

	void Display_Ellypse(uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, BRUSH * brush, int bgcolour, int fgcolour)
	{
		// TODO

		Display_RepaintArea(x, y, cx, cy);
	}

	// TBD: optimize text drawing
	void Display_DrawGlyph(int mixmode, int x, int y, int cx, int cy, HGLYPH glyph, int srcx, int srcy, int bgcolour, int fgcolour)
	{
		HBITMAP hbmGlyph = (HBITMAP)glyph;
		HDC hdcGlyph = CreateCompatibleDC(m_displayBuffer);
		HGDIOBJ hOld = SelectObject(hdcGlyph, hbmGlyph);

		int dcsave = SaveDC(m_displayBuffer);

		switch(mixmode)
		{
		case MIX_TRANSPARENT:
			{
				/*
					ROP is DSPDxax:
					 - where the glyph (S) is white, D is set to the foreground color (P)
					 - where the glyph (S) is black, D is left untouched

					This paints a transparent glyph in the specified color
				*/
				HBRUSH hbr = CreateSolidBrush(fgcolour);
				SelectObject(m_displayBuffer, hbr);
				BitBlt(m_displayBuffer, x, y, cx, cy, hdcGlyph, srcx, srcy, MAKELONG(0, 0xe2));
				DeleteObject(hbr);
			}

			break;

		case MIX_OPAQUE:
			{
				/* Curiously, glyphs are inverted (white-on-black) */
				SetBkColor(m_displayBuffer, fgcolour);
				SetTextColor(m_displayBuffer, bgcolour);
				BitBlt(m_displayBuffer, x, y, cx, cy, hdcGlyph, srcx, srcy, SRCCOPY);
			}

			break;
		}

		RestoreDC(m_displayBuffer, dcsave);

		SelectObject(hdcGlyph, hOld);
		DeleteDC(hdcGlyph);

		Display_RepaintArea(x, y, cx, cy);
	}

	void Display_DoGlyph(uint8 font, uint8 flags, int mixmode, int& x, int& y, int bgcolour, int fgcolour, const uint8 * ttext, int& idx)
	{
		FONTGLYPH * glyph;

		glyph = cache_get_font(/*This*/NULL, font, ttext[idx]);

		if(!(flags & TEXT2_IMPLICIT_X))
		{
			int xyoffset = ttext[++ idx];

			if((xyoffset & 0x80))
			{
				if (flags & TEXT2_VERTICAL)
					y += ttext[idx + 1] | (ttext[idx + 2] << 8);
				else
					x += ttext[idx + 1] | (ttext[idx + 2] << 8);

			  idx += 2;
			}
			else
			{
				if (flags & TEXT2_VERTICAL)
					y += xyoffset;
				else
					x += xyoffset;
			}
		}

		if(glyph)
		{
			Display_DrawGlyph
			(
				mixmode,
				x + (short)glyph->offset,
				y + (short)glyph->baseline,
				glyph->width,
				glyph->height,
				glyph->pixmap,
				0,
				0,
				bgcolour,
				fgcolour
			);

			if(flags & TEXT2_IMPLICIT_X)
				x += glyph->width;
		}
	}

	void Display_DrawText
	(
		uint8 font,
		uint8 flags,
		uint8 opcode,
		int mixmode,
		int x,
		int y,
		int clipx,
		int clipy,
		int clipcx,
		int clipcy,
		int boxx,
		int boxy,
		int boxcx,
		int boxcy,
		BRUSH * brush,
		int bgcolour,
		int fgcolour,
		uint8 * text,
		uint8 length
	)
	{
		int i, j;
		DATABLOB *entry;

		HBRUSH hbr = CreateSolidBrush(bgcolour);
		HGDIOBJ holdbrush = SelectObject(m_displayBuffer, hbr);
		HGDIOBJ holdpen = SelectObject(m_displayBuffer, GetStockObject(NULL_PEN));

		if (boxcx > 1)
			Rectangle(m_displayBuffer, boxx, boxy, boxx + boxcx + 1, boxy + boxcy + 1);
		else if (mixmode == MIX_OPAQUE)
			Rectangle(m_displayBuffer, clipx, clipy, clipx + clipcx + 1, clipy + clipcy + 1);

		SelectObject(m_displayBuffer, holdpen);
		SelectObject(m_displayBuffer, holdbrush);

		DeleteObject(hbr);

		if(boxcx > 1)
			Display_RepaintArea(boxx, boxy, boxcx, boxcy);
		else
			Display_RepaintArea(clipx, clipy, clipcx, clipcy);

		/* Paint text, character by character */
		for (i = 0; i < length;)
		{
			switch (text[i])
			{
				case 0xff:
					/* At least two bytes needs to follow */
					if (i + 3 > length)
					{
						warning("Skipping short 0xff command:");
						for (j = 0; j < length; j++)
							fprintf(stderr, "%02x ", text[j]);
						fprintf(stderr, "\n");
						i = length = 0;
						break;
					}
					cache_put_text(NULL /* TODO */, text[i + 1], text, text[i + 2]);
					i += 3;
					length -= i;
					/* this will move pointer from start to first character after FF command */
					text = &(text[i]);
					i = 0;
					break;

				case 0xfe:
					/* At least one byte needs to follow */
					if (i + 2 > length)
					{
						warning("Skipping short 0xfe command:");
						for (j = 0; j < length; j++)
							fprintf(stderr, "%02x ", text[j]);
						fprintf(stderr, "\n");
						i = length = 0;
						break;
					}
					entry = cache_get_text(/*This*/NULL, text[i + 1]);
					if (entry->data != NULL)
					{
						if ((((uint8 *) (entry->data))[1] == 0)
							&& (!(flags & TEXT2_IMPLICIT_X)) && (i + 2 < length))
						{
							if (flags & TEXT2_VERTICAL)
								y += text[i + 2];
							else
								x += text[i + 2];
						}
						for (j = 0; j < entry->size; j++)
							Display_DoGlyph(font, flags, mixmode, x, y, bgcolour, fgcolour, ((uint8 *) (entry->data)), j);
					}
					if (i + 2 < length)
						i += 3;
					else
						i += 2;
					length -= i;
					/* this will move pointer from start to first character after FE command */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区免费看| 久久精品国产精品亚洲红杏 | 粉嫩一区二区三区性色av| 亚洲九九爱视频| 欧美va亚洲va在线观看蝴蝶网| 一本色道a无线码一区v| 国产一区在线观看麻豆| 亚洲第一二三四区| 中文字幕av一区 二区| 日韩欧美中文字幕精品| 色婷婷精品久久二区二区蜜臀av | 国产成人精品1024| 婷婷国产在线综合| 亚洲精品视频在线观看网站| 久久久电影一区二区三区| 91精品国产乱| 欧美日韩一区二区不卡| 91免费视频观看| 粉嫩av亚洲一区二区图片| 久热成人在线视频| 日韩中文字幕91| 亚洲乱码国产乱码精品精的特点 | 色婷婷综合久色| 成人永久aaa| 国内精品免费在线观看| 美女视频一区二区三区| 日本欧美一区二区三区| 亚洲人精品午夜| 国产精品成人午夜| 国产精品毛片久久久久久久| 国产午夜精品一区二区| 国产亚洲欧美日韩在线一区| 日韩精品一区二区在线| 日韩欧美一卡二卡| 91精品国产色综合久久| 69精品人人人人| 91麻豆精品国产91久久久更新时间| 在线视频一区二区三| 91麻豆.com| 在线亚洲人成电影网站色www| 99久久综合国产精品| 99久久亚洲一区二区三区青草| 懂色av一区二区三区免费看| 国产精品一级片在线观看| 国产精品一区二区无线| 国产精品12区| 不卡在线视频中文字幕| 91视频免费播放| 色天使色偷偷av一区二区 | 久久综合九色综合97婷婷| 日韩一级免费观看| 精品久久久久久久人人人人传媒| 精品国产一区二区三区四区四| 日韩欧美一二三| 久久精品一区八戒影视| 国产精品乱码妇女bbbb| 亚洲色欲色欲www| 亚洲一区视频在线观看视频| 视频一区视频二区在线观看| 久久精品国产99久久6| 国产毛片精品视频| 99久久er热在这里只有精品66| 99久久99久久精品免费看蜜桃| 欧美丝袜丝nylons| 日韩欧美亚洲国产另类| 久久精品欧美日韩| 亚洲激情图片qvod| 青青草视频一区| 成人一区二区三区视频在线观看| 91色在线porny| 678五月天丁香亚洲综合网| 久久蜜臀精品av| 一区二区三区四区乱视频| 日本成人在线看| 懂色av中文一区二区三区| 欧美色区777第一页| 久久蜜桃av一区二区天堂| 亚洲私人黄色宅男| 免费观看一级欧美片| 成人av资源网站| av网站免费线看精品| 久久久久久久久久久久久夜| 久久综合狠狠综合| 午夜影院久久久| av中文字幕在线不卡| 亚洲一区二区三区三| 欧美一级日韩免费不卡| 久久久久久久久久久久久久久99| 亚洲另类中文字| 精品系列免费在线观看| 99精品1区2区| 337p日本欧洲亚洲大胆精品| 亚洲视频在线观看三级| 国产在线精品免费av| 在线看日韩精品电影| 久久精品在线免费观看| 视频一区视频二区中文| 99r国产精品| 26uuu色噜噜精品一区二区| 国产精品传媒入口麻豆| 激情综合网激情| 欧美精品色一区二区三区| 国产精品久久三区| 久久不见久久见免费视频1| 色噜噜久久综合| 日本一区二区不卡视频| 老司机精品视频在线| 在线观看国产日韩| 日韩伦理免费电影| 国产精品99久久久| 欧美一区二区三区视频免费| 亚洲在线中文字幕| av电影天堂一区二区在线观看| 欧美不卡123| 日日夜夜精品视频天天综合网| 色综合 综合色| 国产精品久久久久婷婷| 国产一区在线观看视频| 日韩亚洲欧美高清| 三级一区在线视频先锋| 欧美视频一区二区在线观看| 亚洲色图视频免费播放| 风流少妇一区二区| 国产亚洲综合在线| 韩国一区二区三区| 精品少妇一区二区三区在线播放| 日韩和欧美的一区| 欧美老肥妇做.爰bbww| 亚洲午夜电影在线| 欧美主播一区二区三区| 一区二区三区四区在线| 色婷婷综合激情| 亚洲麻豆国产自偷在线| av午夜一区麻豆| 亚洲免费观看高清完整| 99免费精品视频| 亚洲天堂久久久久久久| 色综合久久天天| 亚洲欧洲综合另类| 日本久久一区二区三区| 亚洲香肠在线观看| 欧美日韩一区二区三区视频| 亚洲高清一区二区三区| 欧美视频三区在线播放| 午夜久久电影网| 91精品一区二区三区久久久久久| 日韩高清一级片| 日韩你懂的电影在线观看| 国产一区二区三区香蕉 | 精品久久久久久久人人人人传媒| 久久精品国产精品亚洲红杏| wwwwxxxxx欧美| 不卡的av电影在线观看| 一区二区三区四区激情| 91精品国产综合久久香蕉麻豆| 午夜精品免费在线| 欧美一区三区二区| 紧缚捆绑精品一区二区| 欧美激情一区不卡| 99久久99久久精品免费观看| 亚洲电影视频在线| 日韩亚洲欧美在线观看| 大胆欧美人体老妇| 亚洲精品videosex极品| 欧美精品久久99久久在免费线 | 色婷婷av一区二区三区大白胸| 天天色图综合网| 精品sm在线观看| 成人av高清在线| 午夜欧美电影在线观看| 国产亚洲1区2区3区| 色综合久久66| 乱一区二区av| 综合精品久久久| 欧美一区二区三区成人| 成人性色生活片| 日韩电影一区二区三区四区| 久久久亚洲午夜电影| 日本伦理一区二区| 国产一区二区中文字幕| 亚洲一区二区在线播放相泽| 久久久一区二区| 欧美日韩美少妇| 国产91富婆露脸刺激对白| 亚洲va天堂va国产va久| 国产日韩欧美a| 欧美久久一二区| 不卡av在线免费观看| 人禽交欧美网站| 亚洲欧美国产高清| 精品成人佐山爱一区二区| 色婷婷综合五月| 国产盗摄精品一区二区三区在线| 亚洲午夜电影在线观看| 中文字幕精品在线不卡| 日韩午夜激情免费电影| 色狠狠桃花综合| 成人午夜在线免费| 激情小说亚洲一区| 亚洲成人动漫在线观看|