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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flattabctrl.h

?? dc++(一個曾經(jīng)大量使用的p2p)的源代碼,dc++,開源的p2p源代碼
?? H
字號:
/* 
 * Copyright (C) 2001-2003 Jacek Sieka, j_s@telia.com
 *
 * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#if !defined(AFX_FLATTABCTRL_H__FFFCBD5C_891D_44FB_B9F3_1DF83DA3EA83__INCLUDED_)
#define AFX_FLATTABCTRL_H__FFFCBD5C_891D_44FB_B9F3_1DF83DA3EA83__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "../client/SettingsManager.h"

#define FT_BASE (WM_APP + 700)
/** This will be sent when the user presses a tab. WPARAM = HWND */
#define FTN_SELECTED (FT_BASE + 0)
/** The number of rows changed */
#define FTN_ROWS_CHANGED (FT_BASE + 2)
/** Set currently active tab to the HWND pointed by WPARAM */
#define FTM_SETACTIVE (FT_BASE + 1)

#define IDC_SELECT_WINDOW 6000

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE FlatTabCtrlImpl : public CWindowImpl< T, TBase, TWinTraits> {
public:

	enum { FT_EXTRA_SPACE = 18 };

	FlatTabCtrlImpl() : closing(NULL), rows(1), height(0), active(NULL) { 
		black.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
	};
	~FlatTabCtrlImpl() { }

	static LPCTSTR GetWndClassName()
	{
		return _T("FlatTabCtrl");
	}

	void addTab(HWND hWnd, COLORREF color = RGB(0, 0, 0)) {
		TabInfo* i = new TabInfo(hWnd, color);
		dcassert(getTabInfo(hWnd) == NULL);
		tabs.push_back(i);
		active = i;
		calcRows(false);
		Invalidate();		
	}

	void removeTab(HWND aWnd) {
		TabInfo::ListIter i;
		for(i = tabs.begin(); i != tabs.end(); ++i) {
			if((*i)->hWnd == aWnd)
				break;
		}

		dcassert(i != tabs.end());
		TabInfo* ti = *i;
		if(active == ti)
			active = NULL;
		delete ti;
		tabs.erase(i);
		calcRows(false);
		Invalidate();
	}

	void setActive(HWND aWnd) {
		TabInfo* ti = getTabInfo(aWnd);
		dcassert(ti != NULL);
		active = ti;
		ti->dirty = false;
		calcRows(false);
		Invalidate();
	}

	void setDirty(HWND aWnd) {
		TabInfo* ti = getTabInfo(aWnd);
		dcassert(ti != NULL);
		bool inval = ti->update();
		
		if(active != ti) {
			if(!ti->dirty) {
				ti->dirty = true;
				inval = true;
			}
		}

		if(inval) {
			calcRows(false);
			Invalidate();
		}
	}

	void setColor(HWND aWnd, COLORREF color) {
		TabInfo* ti = getTabInfo(aWnd);
		if(ti != NULL) {
			ti->pen.DeleteObject();
			ti->pen.CreatePen(PS_SOLID, 1, color);
			Invalidate();
		}
	}

	void updateText(HWND aWnd, LPCTSTR text) {
		TabInfo* ti = getTabInfo(aWnd);
		if(ti != NULL) {
			ti->updateText(text);
			calcRows(false);
			Invalidate();
		}
	}

	BEGIN_MSG_MAP(thisClass)
		MESSAGE_HANDLER(WM_SIZE, onSize)
		MESSAGE_HANDLER(WM_CREATE, onCreate)
		MESSAGE_HANDLER(WM_PAINT, onPaint)
		MESSAGE_HANDLER(WM_LBUTTONDOWN, onLButtonDown)
		MESSAGE_HANDLER(WM_CONTEXTMENU, onContextMenu)
		COMMAND_ID_HANDLER(IDC_CLOSE_WINDOW, onCloseWindow)
		COMMAND_ID_HANDLER(IDC_CHEVRON, onChevron)
		COMMAND_RANGE_HANDLER(IDC_SELECT_WINDOW, IDC_SELECT_WINDOW+tabs.size(), onSelectWindow)
	END_MSG_MAP()

	LRESULT onLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) {
		int xPos = GET_X_LPARAM(lParam); 
		int yPos = GET_Y_LPARAM(lParam); 
		int row = getRows() - ((yPos / getTabHeight()) + 1);

		for(TabInfo::ListIter i = tabs.begin(); i != tabs.end(); ++i) {
			TabInfo* t = *i;
			if((row == t->row) && (xPos >= t->xpos) && (xPos < (t->xpos + t->getWidth())) ) {
				// Bingo, this was clicked
				HWND hWnd = GetParent();
				if(hWnd) {
					::SendMessage(hWnd, FTN_SELECTED, (WPARAM)t->hWnd, 0);
				}
				break;
			}
		}
		return 0;
	}

	LRESULT onContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) {
		POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };        // location of mouse click 

		ScreenToClient(&pt); 
		int xPos = pt.x;
		int row = getRows() - ((pt.y / getTabHeight()) + 1);

		for(TabInfo::ListIter i = tabs.begin(); i != tabs.end(); ++i) {
			TabInfo* t = *i;
			if((row == t->row) && (xPos >= t->xpos) && (xPos < (t->xpos + t->getWidth())) ) {
				// Bingo, this was clicked
				closing = t->hWnd;
				ClientToScreen(&pt);
				CMenu mnu;
				mnu.CreatePopupMenu();
				mnu.AppendMenu(MF_STRING, IDC_CLOSE_WINDOW, CSTRING(CLOSE));
				mnu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd);
				break;
			}
		}
		return 0;
	}

	LRESULT onCloseWindow(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
		::SendMessage(closing, WM_CLOSE, 0, 0);
		return 0;
	}

	int getTabHeight() { return height; };
	int getHeight() { return (getRows() * getTabHeight())+1; };
	int getFill() { return (getTabHeight() + 1) / 2; };

	int getRows() { return rows; };

	void calcRows(bool inval = true) {
		CRect rc;
		GetClientRect(rc);
		int r = 1;
		int w = 0;
		bool notify = false;
		bool needInval = false;

		for(TabInfo::ListIter i = tabs.begin(); i != tabs.end(); ++i) {
			TabInfo* ti = *i;
			if( (r != 0) && ((w + ti->getWidth() + getFill()) > rc.Width()) ) {
				if(r >= SETTING(MAX_TAB_ROWS)) {
					notify |= (rows != r);
					rows = r;
					r = 0;
					chevron.EnableWindow(TRUE);
				} else {
					r++;
					w = 0;
				}
			} 
			ti->xpos = w;
			needInval |= (ti->row != (r-1));
			ti->row = r-1;
			w += ti->getWidth();
		}

		if(r != 0) {
			chevron.EnableWindow(FALSE);
			notify |= (rows != r);
			rows = r;
		}

		if(notify) {
			::SendMessage(GetParent(), FTN_ROWS_CHANGED, 0, 0);
		}
		if(needInval && inval)
			Invalidate();
	}

	LRESULT onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 
		chevron.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
			BS_PUSHBUTTON , 0, IDC_CHEVRON);
		chevron.SetWindowText("

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产wwwccc36天堂| 欧美肥大bbwbbw高潮| 久久久91精品国产一区二区三区| 免费看欧美美女黄的网站| 在线播放91灌醉迷j高跟美女| 亚洲精品大片www| 欧美伦理电影网| 久久99久国产精品黄毛片色诱| 亚洲精品一线二线三线无人区| 国产成人a级片| 自拍偷拍亚洲激情| 欧美日韩精品三区| 美女www一区二区| 国产欧美精品区一区二区三区| 色综合久久六月婷婷中文字幕| 一区二区三区在线观看网站| 9191成人精品久久| 国产一区二区三区精品欧美日韩一区二区三区| 国产日韩欧美不卡| 欧美性受xxxx| 国产一区二区女| 亚洲三级在线观看| 欧美一区二区三区男人的天堂| 国产剧情一区二区| 一区二区三区高清不卡| 精品日韩在线一区| 91小视频在线| 蜜臀av在线播放一区二区三区| 欧美高清在线一区| 91麻豆精品国产无毒不卡在线观看| 精品一区二区三区免费播放| 国产精品视频一二三| 欧美日韩另类国产亚洲欧美一级| 国产乱人伦偷精品视频不卡| 亚洲成av人片在线| 国产精品丝袜在线| 日韩欧美视频一区| 91久色porny | 性做久久久久久久免费看| 久久综合色播五月| 欧美在线观看视频一区二区| 国产精品亚洲人在线观看| 爽好多水快深点欧美视频| 成人免费在线视频| 久久毛片高清国产| 欧美一区三区二区| 色综合天天综合在线视频| 色偷偷久久一区二区三区| 成人激情动漫在线观看| 正在播放亚洲一区| 99这里只有精品| 精品亚洲欧美一区| 亚洲国产精品久久不卡毛片 | 欧美精选在线播放| 成人av影院在线| 国产一区91精品张津瑜| 亚洲第一主播视频| 自拍偷自拍亚洲精品播放| 久久婷婷成人综合色| 欧美丰满高潮xxxx喷水动漫| 一本一道综合狠狠老| 成人午夜在线视频| 狠狠色丁香久久婷婷综合丁香| 亚洲风情在线资源站| 亚洲色图制服诱惑| 欧美激情在线观看视频免费| 久久久久久久综合| 久久伊人蜜桃av一区二区| 日韩精品一区二区三区中文不卡| 欧美日产国产精品| 欧美系列在线观看| 欧美午夜精品一区二区蜜桃| 色香色香欲天天天影视综合网| 91丨porny丨在线| 色综合视频在线观看| 91免费观看视频在线| 91在线视频观看| 色综合一个色综合| 欧亚一区二区三区| 欧美三日本三级三级在线播放| 91麻豆国产精品久久| 欧美变态凌虐bdsm| 精品福利av导航| 久久久久久久久久久电影| 久久久午夜电影| 国产精品久久久久一区二区三区 | 亚洲欧美日韩在线| 亚洲黄色av一区| 亚洲一区二区三区四区五区黄| 亚洲韩国一区二区三区| 香蕉久久一区二区不卡无毒影院| 日韩国产欧美一区二区三区| 麻豆一区二区99久久久久| 激情综合色综合久久综合| 国产成人免费视频一区| 波多野结衣中文字幕一区| 色先锋资源久久综合| 欧美丰满少妇xxxxx高潮对白| 日韩欧美的一区| 国产精品三级av| 一区二区三区在线观看动漫| 日本在线观看不卡视频| 国产乱国产乱300精品| 91在线看国产| 91精品欧美综合在线观看最新| 日韩一区二区免费在线电影| 国产欧美一区二区三区沐欲| 亚洲乱码国产乱码精品精98午夜| 国产精品福利电影一区二区三区四区| 中文字幕制服丝袜一区二区三区| 亚洲一区在线看| 秋霞电影一区二区| 国产成人精品亚洲777人妖| 欧美在线综合视频| 精品精品欲导航| 亚洲欧美福利一区二区| 久久精品国产一区二区三区免费看| 欧美日韩国产片| 欧美国产视频在线| 亚洲一区二区三区四区中文字幕 | 亚洲激情中文1区| 看电视剧不卡顿的网站| av男人天堂一区| 91精品国产综合久久久蜜臀粉嫩| 国产日韩欧美激情| 日本女人一区二区三区| www.日韩大片| 亚洲精品一区二区三区福利| 一区二区三区四区精品在线视频 | 久久精品夜色噜噜亚洲a∨| 曰韩精品一区二区| 国产aⅴ综合色| 欧美一区三区二区| 亚洲制服丝袜一区| 国产河南妇女毛片精品久久久| 欧美日韩国产bt| 国产精品久久久久久久久晋中| 日本成人中文字幕| 在线精品亚洲一区二区不卡| 国产性做久久久久久| 美日韩一级片在线观看| 色婷婷综合久久久久中文一区二区| 久久女同精品一区二区| 日本91福利区| 精品视频一区三区九区| 综合亚洲深深色噜噜狠狠网站| 国产精品中文字幕日韩精品| 欧美一区二区播放| 午夜精品福利久久久| 在线观看一区不卡| 国产精品福利av| 国产福利91精品| 精品国产一区二区三区不卡 | 国产成人aaa| 久久你懂得1024| 国产一区二区三区视频在线播放| 日韩午夜激情视频| 美女久久久精品| 欧美xxx久久| 麻豆精品国产91久久久久久| 宅男在线国产精品| 日韩avvvv在线播放| 欧美精品日韩综合在线| 亚洲国产综合视频在线观看| 色网综合在线观看| 一级精品视频在线观看宜春院| 91麻豆高清视频| 一区二区三区在线观看国产| 欧美探花视频资源| 亚洲国产精品嫩草影院| 欧美日韩视频一区二区| 日韩精品成人一区二区在线| 69成人精品免费视频| 人禽交欧美网站| 精品国产亚洲在线| 国产精品羞羞答答xxdd| 国产精品福利一区二区| 一本大道久久精品懂色aⅴ| 亚洲人妖av一区二区| 91国产免费观看| 亚洲超碰精品一区二区| 日韩亚洲欧美高清| 国产一区欧美日韩| 亚洲国产电影在线观看| 成人动漫在线一区| 亚洲一区二区精品3399| 欧美一区二区免费视频| 国产精品1区2区3区在线观看| 中文字幕一区二区三区精华液| 一本久久a久久免费精品不卡| 亚洲综合激情小说| 日韩三级免费观看| 国产99久久久精品| 亚洲美女少妇撒尿| 91精品国产一区二区三区| 国产精品456| 亚洲午夜羞羞片| www一区二区| 99精品久久只有精品| 五月婷婷综合网|