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

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

?? tabbar.h

?? 一個功能強(qiáng)大的代碼編輯器源代碼
?? H
字號:
//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.

#ifndef TAB_BAR_H
#define TAB_BAR_H

#include "Window.h"

#ifndef _WIN32_IE
#define _WIN32_IE	0x0600
#endif //_WIN32_IE

//Notification message
#define TCN_TABDROPPED (TCN_FIRST - 10)
#define TCN_TABDROPPEDOUTSIDE (TCN_FIRST - 11)
#define TCN_TABDELETE (TCN_FIRST - 12)

#define WM_TABSETSTYLE	(WM_APP + 0x024)

const int marge = 8;
const int nbCtrlMax = 10;

#include <commctrl.h>
#include "menuCmdID.h"
#include "resource.h"

class TabBar : public Window
{
public:
	TabBar() : Window(), _nbItem(0), _hasImgLst(false), _hFont(NULL){};

	virtual ~TabBar() {};

	virtual void destroy(){
		if (_hFont)
			DeleteObject(_hFont);

		if (_hLargeFont)
			DeleteObject(_hLargeFont);

		if (_hVerticalFont)
			DeleteObject(_hVerticalFont);

		if (_hVerticalLargeFont)
			DeleteObject(_hVerticalLargeFont);

		::DestroyWindow(_hSelf);
		_hSelf = NULL;
	};

	virtual void init(HINSTANCE hInst, HWND hwnd, bool isVertical = false, bool isTraditional = false, bool isMultiLine = false);

	virtual void reSizeTo(RECT & rc2Ajust);
	
	int insertAtEnd(const char *subTabName);

	void activateAt(int index) const {
		::SendMessage(_hSelf, TCM_SETCURSEL, index, 0);
	};
	void getCurrentTitle(char *title, int titleLen);

	int getCurrentTabIndex() const {
		return ::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0);
	};
	void deletItemAt(int index) {
		::SendMessage(_hSelf, TCM_DELETEITEM, index, 0);
		_nbItem--;
	};

	void deletAllItem() {
		::SendMessage(_hSelf, TCM_DELETEALLITEMS, 0, 0);
		_nbItem = 0;
	};

	void setImageList(HIMAGELIST himl) {
		_hasImgLst = true;
		::SendMessage(_hSelf, TCM_SETIMAGELIST, 0, (LPARAM)himl);
	};
    
    int nbItem() const {
        return _nbItem;
    };

	void setFont(char *fontName, size_t fontSize) {
		if (_hFont)
			::DeleteObject(_hFont);

		_hFont = ::CreateFont( fontSize, 0, 
							  (_isVertical) ? 900:0,
							  (_isVertical) ? 900:0,
			                   FW_NORMAL,
				               0, 0, 0, 0,
				               0, 0, 0, 0,
					           fontName);
		if (_hFont)
			::SendMessage(_hSelf, WM_SETFONT, reinterpret_cast<WPARAM>(_hFont), 0);
	};
		
	void setVertical(bool b) {
		_isVertical = b;
	};
	
	void setMultiLine(bool b) {
		_isMultiLine = b;
	};


protected:
	size_t _nbItem;
	bool _hasImgLst;
	HFONT _hFont;
	HFONT _hLargeFont;
	HFONT _hVerticalFont;
	HFONT _hVerticalLargeFont;

	int _ctrlID;
	bool _isTraditional;

	bool _isVertical;
	bool _isMultiLine;
	
	long getRowCount() const {
		return long(::SendMessage(_hSelf, TCM_GETROWCOUNT, 0, 0));
	};
};


struct CloseButtonZone {

	CloseButtonZone(): _width(11), _hight(11), _fromTop(5), _fromRight(3){};

	bool isHit(int x, int y, const RECT & testZone) const {
		if (((x + _width + _fromRight) < testZone.right) || (x > (testZone.right - _fromRight)))
			return false;

		if (((y - _hight - _fromTop) > testZone.top) || (y < (testZone.top + _fromTop)))
			return false;

		return true;
	};

	RECT getButtonRectFrom(const RECT & tabItemRect) const {
		RECT rect;
		rect.right = tabItemRect.right - _fromRight;
		rect.left = rect.right - _width;
		rect.top = tabItemRect.top + _fromTop;
		rect.bottom = rect.top + _hight;

		return rect;
	};

	int _width;
	int _hight;

	int _fromTop; // distance from top in pixzl
	int _fromRight; // distance from right in pixzl
};

class TabBarPlus : public TabBar
{
public :

	TabBarPlus() : TabBar(), _isDragging(false), _tabBarDefaultProc(NULL), _currentHoverTabItem(-1),\
		_isCloseHover(false), _whichCloseClickDown(-1), _lmbdHit(false) {};
	static void doDragNDrop(bool justDoIt) {
        _doDragNDrop = justDoIt;
    };

	virtual void init(HINSTANCE hInst, HWND hwnd, bool isVertical = false, bool isTraditional = false, bool isMultiLine = false);

    static bool doDragNDropOrNot() {
        return _doDragNDrop;
    };

	int getSrcTabIndex() const {
        return _nSrcTab;
    };

    int getTabDraggedIndex() const {
        return _nTabDragged;
    };

	POINT getDraggingPoint() const {
		return _draggingPoint;
	};

	static void doOwnerDrawTab() {
		::SendMessage(_hwndArray[0], TCM_SETPADDING, 0, MAKELPARAM(6, 0));
		for (int i = 0 ; i < _nbCtrl ; i++)
		{
			if (_hwndArray[i])
			{
				DWORD style = ::GetWindowLong(_hwndArray[i], GWL_STYLE);
				if (isOwnerDrawTab())
					style |= TCS_OWNERDRAWFIXED;
				else
					style &= ~TCS_OWNERDRAWFIXED;

				::SetWindowLong(_hwndArray[i], GWL_STYLE, style);
				::InvalidateRect(_hwndArray[i], NULL, TRUE);

				const int base = 6;
				::SendMessage(_hwndArray[i], TCM_SETPADDING, 0, MAKELPARAM(_drawTabCloseButton?base+3:base, 0));
			}
		}
	};

	static void doVertical() {
		for (int i = 0 ; i < _nbCtrl ; i++)
		{
			if (_hwndArray[i])
				SendMessage(_hwndArray[i], WM_TABSETSTYLE, isVertical(), TCS_VERTICAL);
		}
	};

	static void doMultiLine() {
		for (int i = 0 ; i < _nbCtrl ; i++)
		{
			if (_hwndArray[i])
				SendMessage(_hwndArray[i], WM_TABSETSTYLE, isMultiLine(), TCS_MULTILINE);
		}
	};

	static bool isOwnerDrawTab() {return true;};//(_drawInactiveTab || _drawTopBar || _drawTabCloseButton);};
	static bool drawTopBar() {return _drawTopBar;};
	static bool drawInactiveTab() {return _drawInactiveTab;};
	static bool drawTabCloseButton() {return _drawTabCloseButton;};
	static bool isDbClk2Close() {return _isDbClk2Close;};
	static bool isVertical() { return _isCtrlVertical;};
	static bool isMultiLine() { return _isCtrlMultiLine;};

	static void setDrawTopBar(bool b) {
		_drawTopBar = b;
		doOwnerDrawTab();
	};
	static void setDrawInactiveTab(bool b) {
		_drawInactiveTab = b;
		doOwnerDrawTab();
	};
	static void setDrawTabCloseButton(bool b) {
		_drawTabCloseButton = b;
		doOwnerDrawTab();
	};

	static void setDbClk2Close(bool b) {
		_isDbClk2Close = b;
	};

	static void setVertical(bool b) {
		_isCtrlVertical = b;
		doVertical();
	};

	static void setMultiLine(bool b) {
		_isCtrlMultiLine = b;
		doMultiLine();
	};
/*
	static void setNoTabBar(bool b) {
	
	};
*/
protected:
    // it's the boss to decide if we do the drag N drop
    static bool _doDragNDrop;
	// drag N drop members
	bool _isDragging;
	bool _isDraggingInside;
    int _nSrcTab;
	int _nTabDragged;
	POINT _draggingPoint; // coordinate of Screen
	WNDPROC _tabBarDefaultProc;

	RECT _currentHoverTabRect;
	int _currentHoverTabItem;

	CloseButtonZone _closeButtonZone;
	bool _isCloseHover;
	int _whichCloseClickDown;
	bool _lmbdHit; // Left Mouse Button Down Hit

	LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);

	static LRESULT CALLBACK TabBarPlus_Proc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
		return (((TabBarPlus *)(::GetWindowLong(hwnd, GWL_USERDATA)))->runProc(hwnd, Message, wParam, lParam));
	};
	void exchangeItemData(POINT point);


	// it's the boss to decide if we do the ownerDraw style tab
	static bool _drawInactiveTab;
	static bool _drawTopBar;
	static bool _drawTabCloseButton;
	static bool _isDbClk2Close;
	static bool _isCtrlVertical;
	static bool _isCtrlMultiLine;

	static int _nbCtrl;
	static HWND _hwndArray[nbCtrlMax];

	void drawItem(DRAWITEMSTRUCT *pDrawItemStruct);
	void draggingCursor(POINT screenPoint);

	int getTabIndexAt(const POINT & p) {
		return getTabIndexAt(p.x, p.y);
	};

	int getTabIndexAt(int x, int y) {
		TCHITTESTINFO hitInfo;
		hitInfo.pt.x = x;
		hitInfo.pt.y = y;

		return ::SendMessage(_hSelf, TCM_HITTEST, 0, (LPARAM)&hitInfo);
	};
};

#endif // TAB_BAR_H

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费看的视频| 免费观看一级欧美片| 成人app软件下载大全免费| 国产午夜亚洲精品不卡| 成人深夜在线观看| 国产精品全国免费观看高清 | 国产69精品久久99不卡| 欧美国产国产综合| 91网站最新地址| 亚洲国产精品久久一线不卡| 欧美一区二区在线播放| 国产精一区二区三区| 国产精品久久久久久久浪潮网站| av不卡免费电影| 亚洲国产sm捆绑调教视频 | 精品国产三级a在线观看| 91福利视频网站| 日韩中文字幕亚洲一区二区va在线 | 91网站最新地址| 日韩精品国产精品| 欧美激情一区二区三区不卡| 在线看不卡av| 精品亚洲欧美一区| 亚洲猫色日本管| 日韩亚洲欧美在线观看| 懂色av一区二区三区免费观看 | 视频一区欧美精品| 久久久综合精品| 91官网在线观看| 激情综合网最新| 洋洋成人永久网站入口| 日韩欧美亚洲一区二区| 91麻豆精东视频| 极品瑜伽女神91| 夜夜嗨av一区二区三区四季av| 精品国产精品网麻豆系列| 91蜜桃婷婷狠狠久久综合9色| 老司机精品视频在线| 亚洲激情在线激情| 国产欧美精品区一区二区三区 | 91福利社在线观看| 国产成人av一区| 五月天一区二区| 最新国产精品久久精品| 精品成人一区二区三区| 一本久久a久久精品亚洲| 精品一二三四区| 亚洲www啪成人一区二区麻豆| 国产精品热久久久久夜色精品三区 | 欧美日韩美少妇| 成人高清伦理免费影院在线观看| 日韩电影在线看| 一区二区视频在线| 国产欧美一区二区精品性 | 久久精品亚洲乱码伦伦中文| 欧美美女网站色| 日本道免费精品一区二区三区| 国产999精品久久久久久绿帽| 九九视频精品免费| 日韩电影免费一区| 亚洲午夜电影网| 一区二区三区久久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 丝袜亚洲另类丝袜在线| 亚洲综合成人在线| 亚洲免费色视频| 成人欧美一区二区三区1314| 国产欧美一区二区精品久导航| 精品国精品国产| 欧美成人一级视频| 久久伊99综合婷婷久久伊| 欧美一区二区三区视频免费播放| 欧美精品久久天天躁| 欧美一级黄色大片| 337p亚洲精品色噜噜| 欧美日韩精品一区二区三区蜜桃| 欧美系列一区二区| 欧美日韩午夜在线| 9191成人精品久久| 日韩一区二区在线观看视频| 日韩一级片在线观看| 精品免费视频.| 精品88久久久久88久久久 | 国产精品久久久久影院亚瑟 | 国产一区二区不卡老阿姨| 国产一区二区三区黄视频| 国内成人免费视频| 国产成人精品在线看| www.欧美精品一二区| 色婷婷综合久色| 欧美丝袜丝交足nylons图片| 欧美日韩国产影片| 日韩你懂的在线观看| 久久精品免费在线观看| 中文字幕日韩精品一区| 伊人一区二区三区| 日本麻豆一区二区三区视频| 国产一级精品在线| www.成人在线| 欧美日韩久久久久久| 精品成人私密视频| 自拍偷拍欧美精品| 天堂va蜜桃一区二区三区漫画版| 久草精品在线观看| 色综合咪咪久久| 欧美群妇大交群的观看方式| 精品国产电影一区二区| 国产精品国产三级国产a| 天堂一区二区在线| 成人免费看黄yyy456| 欧美日韩国产小视频| 久久综合精品国产一区二区三区| 国产精品乱码妇女bbbb| 天堂久久久久va久久久久| 国产成人精品www牛牛影视| 一本一道久久a久久精品| 日韩欧美国产精品| 亚洲欧洲韩国日本视频| 老司机精品视频导航| 91麻豆免费在线观看| 日韩欧美综合在线| 亚洲精品成人悠悠色影视| 久久av老司机精品网站导航| 91国内精品野花午夜精品| 久久久久久免费网| 亚洲 欧美综合在线网络| 国产高清精品网站| 777色狠狠一区二区三区| 国产精品国产三级国产aⅴ原创| 日本va欧美va欧美va精品| 99久久久久免费精品国产| 精品国产凹凸成av人网站| 亚洲一区二区中文在线| 成人h动漫精品一区二区| 91精品国产品国语在线不卡| 亚洲精品国产一区二区精华液| 国产一级精品在线| 日韩精品最新网址| 日韩中文字幕亚洲一区二区va在线| www.久久久久久久久| 国产欧美精品在线观看| 美女脱光内衣内裤视频久久网站| 欧美中文字幕久久| 国产精品理伦片| 粉嫩av一区二区三区粉嫩| 26uuu成人网一区二区三区| 日韩高清在线电影| 欧美日韩精品久久久| 夜夜嗨av一区二区三区四季av | 在线区一区二视频| 亚洲一区在线观看免费| 97国产一区二区| 日本一区二区成人| 国产99久久久国产精品潘金网站| 日韩美女视频一区二区在线观看| 偷拍自拍另类欧美| 欧美日韩美女一区二区| 亚洲国产精品久久一线不卡| 一本大道av伊人久久综合| 国产精品美女久久久久aⅴ| 夫妻av一区二区| 国产精品天美传媒| 成人app网站| 中文字幕日韩一区| 91亚洲精品乱码久久久久久蜜桃| 亚洲国产成人自拍| 成人久久视频在线观看| 日本一区二区三区视频视频| 国产精品原创巨作av| 国产亚洲综合在线| 成人免费高清视频在线观看| 国产精品色呦呦| 91色视频在线| 亚洲黄色片在线观看| 精品视频一区三区九区| 视频在线观看一区二区三区| 欧美一级高清片| 精品在线观看视频| 国产亚洲成aⅴ人片在线观看| 国产成人av电影在线观看| 欧美国产97人人爽人人喊| 99久久99久久综合| 亚洲一区在线观看免费| 91麻豆精品国产91久久久久| 日本sm残虐另类| 久久午夜国产精品| 99re热这里只有精品免费视频| 亚洲欧美日韩电影| 欧美日本免费一区二区三区| 美女视频免费一区| 日本一区二区三区视频视频| 色综合久久综合| 亚洲五月六月丁香激情| 日韩精品资源二区在线| 成人免费毛片高清视频| 亚洲伦在线观看| 日韩一区二区中文字幕| 成人h动漫精品一区二区| 香蕉成人伊视频在线观看| 日韩视频免费直播|