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

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

?? filedialog.cpp

?? 一個功能強大的代碼編輯器源代碼
?? CPP
字號:
//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.
#include <stdarg.h>
#include "FileDialog.h"


FileDialog *FileDialog::staticThis = NULL;

FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst) 
	: _nbCharFileExt(0), _nbExt(0)
{staticThis = this;
    for (int i = 0 ; i < nbExtMax ; i++)
        _extArray[i][0] = '\0';

    memset(_fileExt, 0x00, sizeof(_fileExt));
	_fileName[0] = '\0';
 
	_ofn.lStructSize = sizeof(_ofn);     
	_ofn.hwndOwner = hwnd; 
	_ofn.hInstance = hInst;
	_ofn.lpstrFilter = _fileExt;
	_ofn.lpstrCustomFilter = (LPTSTR) NULL;
	_ofn.nMaxCustFilter = 0L;
	_ofn.nFilterIndex = 1L;
	_ofn.lpstrFile = _fileName;
	_ofn.nMaxFile = sizeof(_fileName);
	_ofn.lpstrFileTitle = NULL;
	_ofn.nMaxFileTitle = 0;
	_ofn.lpstrInitialDir = NULL;
	_ofn.lpstrTitle = NULL;
	_ofn.nFileOffset  = 0;
	_ofn.nFileExtension = 0;
	_ofn.lpfnHook = NULL;
	_ofn.lpstrDefExt = NULL;  // No default extension
	_ofn.lCustData = 0;
	_ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_LONGNAMES | DS_CENTER | OFN_HIDEREADONLY;
	//_ofn.pvReserved = NULL;
	//_ofn.dwReserved = 0;
	//_ofn.FlagsEx = 0;
}

// This function set and concatenate the filter into the list box of FileDialog.
// The 1st parameter is the description of the file type, the 2nd .. Nth parameter(s) is (are)
// the file extension which should be ".WHATEVER", otherwise it (they) will be considered as
// a file name to filter. Since the nb of arguments is variable, you have to add NULL at the end.
// example : 
// FileDialog.setExtFilter("c/c++ src file", ".c", ".cpp", ".cxx", ".h", NULL);
// FileDialog.setExtFilter("Makeile", "makefile", "GNUmakefile", NULL);
void FileDialog::setExtFilter(const char *extText, const char *ext, ...)
{
    // fill out the ext array for save as file dialog
    if (_nbExt < nbExtMax)
        strcpy(_extArray[_nbExt++], ext);
    // 
    std::string extFilter = extText;
   
    va_list pArg;
    va_start(pArg, ext);

    std::string exts;

	if (ext[0] == '.')
		exts += "*";
    exts += ext;
    exts += ";";

    const char *ext2Concat;

    while ((ext2Concat = va_arg(pArg, const char *)))
	{
        if (ext2Concat[0] == '.')
            exts += "*";
        exts += ext2Concat;
        exts += ";";
	}
	va_end(pArg);

	// remove the last ';'
    exts = exts.substr(0, exts.length()-1);

    extFilter += " (";
    extFilter += exts + ")";
    
    char *pFileExt = _fileExt + _nbCharFileExt;
    memcpy(pFileExt, extFilter.c_str(), extFilter.length() + 1);
    _nbCharFileExt += extFilter.length() + 1;
    
    pFileExt = _fileExt + _nbCharFileExt;
    memcpy(pFileExt, exts.c_str(), exts.length() + 1);
    _nbCharFileExt += exts.length() + 1;
}

int FileDialog::setExtsFilter(const char *extText, const char *exts)
{
    // fill out the ext array for save as file dialog
    if (_nbExt < nbExtMax)
        strcpy(_extArray[_nbExt++], exts);
    // 
    std::string extFilter = extText;

    extFilter += " (";
    extFilter += exts;
	extFilter += ")";
    
    char *pFileExt = _fileExt + _nbCharFileExt;
    memcpy(pFileExt, extFilter.c_str(), extFilter.length() + 1);
    _nbCharFileExt += extFilter.length() + 1;
    
    pFileExt = _fileExt + _nbCharFileExt;
    memcpy(pFileExt, exts, strlen(exts) + 1);
    _nbCharFileExt += strlen(exts) + 1;

	return _nbExt;
}

char * FileDialog::doOpenSingleFileDlg() 
{
	char dir[MAX_PATH];
	::GetCurrentDirectory(sizeof(dir), dir);
	_ofn.lpstrInitialDir = dir;

	_ofn.Flags |= OFN_FILEMUSTEXIST;

	char *fn = NULL;
	try {
		fn = ::GetOpenFileName(&_ofn)?_fileName:NULL;
	}
	catch(...) {
		::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
	}
	return (fn);
}

stringVector * FileDialog::doOpenMultiFilesDlg()
{
	char dir[MAX_PATH];
	::GetCurrentDirectory(sizeof(dir), dir);
	_ofn.lpstrInitialDir = dir;

	_ofn.Flags |= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;

	if (::GetOpenFileName(&_ofn))
	{
		char fn[MAX_PATH];
		char *pFn = _fileName + strlen(_fileName) + 1;
		if (!(*pFn))
			_fileNames.push_back(std::string(_fileName));
		else
		{
			strcpy(fn, _fileName);
			if (fn[strlen(fn)-1] != '\\')
				strcat(fn, "\\");
		}
		int term = int(strlen(fn));

		while (*pFn)
		{
			fn[term] = '\0';
			strcat(fn, pFn);
			_fileNames.push_back(std::string(fn));
			pFn += strlen(pFn) + 1;
		}

		return &_fileNames;
	}
	else
		return NULL;
}

char * FileDialog::doSaveDlg() 
{
	char dir[MAX_PATH];
	::GetCurrentDirectory(sizeof(dir), dir); 

	_ofn.lpstrInitialDir = dir;

	_ofn.Flags |= OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_ENABLESIZING;

	_ofn.Flags |= OFN_ENABLEHOOK;
	_ofn.lpfnHook = OFNHookProc;

	char *fn = NULL;
	try {
		fn = ::GetSaveFileName(&_ofn)?_fileName:NULL;
	}
	catch(...) {
		::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
	}
	return (fn);
}

static HWND hFileDlg = NULL;
static WNDPROC oldProc = NULL;
static string currentExt = "";

static BOOL CALLBACK fileDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
	switch (message)
    {
		case WM_COMMAND :
		{
			switch (wParam)
			{	
				case IDOK :
				{
					HWND fnControl = ::GetDlgItem(hwnd, edt1);
					char fn[256];
					::GetWindowText(fnControl, fn, sizeof(fn));
					if (*fn == '\0')
						return oldProc(hwnd, message, wParam, lParam);

					if (currentExt != "")
					{
						string fnExt = changeExt(fn, currentExt);
						::SetWindowText(fnControl, fnExt.c_str());
					}
					return oldProc(hwnd, message, wParam, lParam);
				}

				default :
					break;
			}
		}
	}
	return oldProc(hwnd, message, wParam, lParam);
};

static char * get1stExt(char *ext) { // precondition : ext should be under the format : Batch (*.bat;*.cmd;*.nt)
	char *begin = ext;
	for ( ; *begin != '.' ; begin++);
	char *end = ++begin;
	for ( ; *end != ';' && *end != ')' ; end++);
	*end = '\0';
	if (*begin == '*')
		*begin = '\0';
	return begin;
};

static string addExt(HWND textCtrl, HWND typeCtrl) {
	char fn[256];
	::GetWindowText(textCtrl, fn, sizeof(fn));
	
	int i = ::SendMessage(typeCtrl, CB_GETCURSEL, 0, 0);
	char ext[256];
	::SendMessage(typeCtrl, CB_GETLBTEXT, i, (LPARAM)ext);
	char *pExt = get1stExt(ext);
	if (*fn != '\0')
	{
		string fnExt = changeExt(fn, pExt);
		::SetWindowText(textCtrl, fnExt.c_str());
	}
	return pExt;
};


UINT_PTR CALLBACK FileDialog::OFNHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG :
        {
			NppParameters *pNppParam = NppParameters::getInstance();
			int index = pNppParam->getFileSaveDlgFilterIndex();

			::SetWindowLong(hWnd, GWL_USERDATA, (long)staticThis);
			hFileDlg = ::GetParent(hWnd);
			goToCenter(hFileDlg);

			if (index != -1)
			{
				HWND typeControl = ::GetDlgItem(hFileDlg, cmb1);
				::SendMessage(typeControl, CB_SETCURSEL, index, 0);
			}

			// Don't touch the following 3 lines, they are cursed !!!
			oldProc = (WNDPROC)::GetWindowLong(hFileDlg, GWL_WNDPROC);
			if ((long)oldProc > 0)
				::SetWindowLong(hFileDlg, GWL_WNDPROC, (LONG)fileDlgProc);

			return FALSE;
		}

		default :
		{
			FileDialog *pFileDialog = reinterpret_cast<FileDialog *>(::GetWindowLong(hWnd, GWL_USERDATA));
			if (!pFileDialog)
			{
				return FALSE;
			}
			return pFileDialog->run(hWnd, uMsg, wParam, lParam);
		}
    }
    return FALSE;
}

BOOL APIENTRY FileDialog::run(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_NOTIFY :
		{
			LPNMHDR pNmhdr = (LPNMHDR)lParam;
			switch(pNmhdr->code)
			{
				case CDN_TYPECHANGE :
				{
					HWND fnControl = ::GetDlgItem(::GetParent(hWnd), edt1);
					HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1);
					currentExt = addExt(fnControl, typeControl);
					return TRUE;
					//break;
				}

				case CDN_FILEOK :
				{
					HWND typeControl = ::GetDlgItem(::GetParent(hWnd), cmb1);
					int index = ::SendMessage(typeControl, CB_GETCURSEL, 0, 0);
					NppParameters *pNppParam = NppParameters::getInstance();
					pNppParam->setFileSaveDlgFilterIndex(index);
					return TRUE;
					//break;
				}

				default :
					return FALSE;
			}
			
		}
		default :
			return FALSE;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美怡红院| 91麻豆精品91久久久久同性| 国产午夜精品一区二区三区视频 | 在线影院国内精品| 亚洲人成精品久久久久| 91福利在线免费观看| 亚洲午夜精品网| 日韩一区二区影院| 国产一区二区三区| 国产精品第五页| 在线免费精品视频| 日韩avvvv在线播放| 久久综合九色综合欧美亚洲| 国产精品一二三| 综合精品久久久| 欧美日韩国产天堂| 国产精品一区一区三区| 国产精品美女一区二区在线观看| 91麻豆国产福利在线观看| 亚洲高清一区二区三区| 欧美不卡激情三级在线观看| 成人免费观看视频| 亚洲国产欧美一区二区三区丁香婷| 538在线一区二区精品国产| 国产一区二区三区不卡在线观看| 亚洲欧洲性图库| 日韩一区二区在线观看| av资源站一区| 人人爽香蕉精品| 亚洲丝袜另类动漫二区| 日韩欧美国产系列| 色欧美片视频在线观看在线视频| 麻豆成人91精品二区三区| 国产嫩草影院久久久久| 欧美精品久久一区二区三区| 成人免费va视频| 久久精品av麻豆的观看方式| 亚洲天堂免费看| 26uuu国产电影一区二区| 欧美体内she精高潮| 高清在线观看日韩| 免费精品视频最新在线| 亚洲一级片在线观看| 国产婷婷色一区二区三区| 欧美日韩国产高清一区二区三区| 国产成人在线免费观看| 日本v片在线高清不卡在线观看| 国产日韩影视精品| 欧美成人精品1314www| 欧美午夜宅男影院| 北岛玲一区二区三区四区| 激情综合一区二区三区| 无吗不卡中文字幕| 亚洲人成影院在线观看| 国产亚洲欧美日韩日本| 日韩精品一区二区三区视频播放 | 91免费视频网| 国产乱码一区二区三区| 另类欧美日韩国产在线| 日本中文在线一区| 亚洲国产成人精品视频| 樱桃视频在线观看一区| 综合久久一区二区三区| 国产精品伦理在线| 国产日韩欧美a| 久久精品一区二区三区不卡| 精品av久久707| 精品免费日韩av| 日韩欧美电影在线| 精品久久一区二区三区| 日韩一区二区免费视频| 欧美一区二区三区在| 91精品国产美女浴室洗澡无遮挡| 欧美色网一区二区| 欧美无人高清视频在线观看| 在线观看91视频| 欧美图区在线视频| 欧美日韩免费不卡视频一区二区三区 | 亚洲精品一区二区三区影院 | 国产精品亚洲一区二区三区妖精 | 北条麻妃国产九九精品视频| 成人小视频免费观看| 成人午夜激情在线| 91在线视频18| 91麻豆国产香蕉久久精品| 在线观看中文字幕不卡| 欧美日韩一区二区三区视频| 欧美日韩精品一区二区三区四区 | 91麻豆swag| 91成人免费在线| 欧美日韩国产首页| 日韩欧美在线1卡| 国产亚洲福利社区一区| 国产精品午夜电影| 亚洲美女视频在线观看| 午夜久久久久久久久| 久久www免费人成看片高清| 激情国产一区二区| 成人性生交大片免费看视频在线| 不卡一卡二卡三乱码免费网站| 91女厕偷拍女厕偷拍高清| 欧美另类变人与禽xxxxx| 26uuu精品一区二区三区四区在线| 国产婷婷色一区二区三区四区| 亚洲欧洲av色图| 偷拍日韩校园综合在线| 韩国一区二区三区| 色综合久久久久久久久久久| 欧美片在线播放| 国产午夜精品一区二区三区四区| **欧美大码日韩| 日韩精品欧美精品| 成人禁用看黄a在线| 7777精品久久久大香线蕉| 国产亚洲制服色| 亚洲成av人片www| 成人深夜视频在线观看| 欧美色视频一区| 久久久久久久免费视频了| 亚洲一线二线三线久久久| 韩国女主播一区| 在线观看日韩精品| 国产日韩欧美高清在线| 亚洲成a人v欧美综合天堂| 国产在线精品免费av| 欧美三级午夜理伦三级中视频| 久久综合九色综合欧美就去吻| 一区二区三区蜜桃网| 国产91丝袜在线观看| 91精品国产综合久久久蜜臀图片| 国产精品久线在线观看| 久久精品国产99| 欧美三级资源在线| 中文字幕一区二区在线观看 | 狠狠v欧美v日韩v亚洲ⅴ| 欧美最猛性xxxxx直播| 国产欧美日韩在线观看| 蜜臀av性久久久久蜜臀av麻豆| 在线观看日产精品| 亚洲欧洲日韩在线| 精品一区二区三区免费观看| 91久久线看在观草草青青| 亚洲国产精华液网站w | 高清在线观看日韩| 精品国产乱码久久久久久夜甘婷婷 | 在线精品视频小说1| 中文子幕无线码一区tr| 麻豆成人综合网| 3d动漫精品啪啪| 午夜成人在线视频| 欧美色爱综合网| 亚洲黄色av一区| 色综合久久九月婷婷色综合| 日本一区免费视频| 国产美女精品在线| 久久这里只有精品6| 国产专区欧美精品| 日韩美一区二区三区| 日本人妖一区二区| 欧美一级日韩一级| 麻豆免费精品视频| 日韩丝袜情趣美女图片| 久久精品理论片| 精品电影一区二区三区| 国产一区免费电影| 久久噜噜亚洲综合| 国产福利一区二区三区视频 | 亚洲精品免费一二三区| 97se亚洲国产综合自在线| 日本一区二区高清| 91在线观看污| 亚洲人成7777| 欧美日韩在线播| 青青青伊人色综合久久| 精品免费国产二区三区| 国产精品18久久久久久久网站| 国产午夜精品在线观看| 成人精品电影在线观看| 亚洲免费观看高清完整版在线观看熊| 91美女福利视频| 亚洲电影在线免费观看| 91麻豆精品国产91久久久使用方法 | 亚洲一区二区成人在线观看| 欧美午夜一区二区三区免费大片| 午夜亚洲福利老司机| 欧美一区二区视频在线观看2022| 久久av中文字幕片| 中文字幕不卡的av| 色悠久久久久综合欧美99| 亚洲成人动漫av| 精品美女一区二区| 成人av电影免费在线播放| 一区二区日韩av| 日韩一区二区中文字幕| 国产91富婆露脸刺激对白| 亚洲综合在线免费观看| 91精品国产91久久综合桃花 | www国产成人| 91免费版pro下载短视频| 丝袜美腿一区二区三区|