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

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

?? multconv.cpp

?? VC實現word 和ACCESS數據庫的連接
?? CPP
字號:
// convert.cpp : implementation file
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"
#include "wordpad.h"
#include "multconv.h"
#include "mswd6_32.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

#ifdef CONVERTERS
CConverter* CConverter::m_pThis = NULL;
#endif

#define BUFFSIZE 4096

CTrackFile::CTrackFile(CFrameWnd* pWnd) : CFile()
{
	m_nLastPercent = -1;
	m_dwLength = 0;
	m_pFrameWnd = pWnd;
	VERIFY(m_strComplete.LoadString(IDS_COMPLETE));
	VERIFY(m_strWait.LoadString(IDS_PLEASE_WAIT));
	VERIFY(m_strSaving.LoadString(IDS_SAVING));
//  OutputPercent(0);
}

CTrackFile::~CTrackFile()
{
	OutputPercent(100);
	if (m_pFrameWnd != NULL)
		m_pFrameWnd->SetMessageText(AFX_IDS_IDLEMESSAGE);
}

UINT CTrackFile::Read(void FAR* lpBuf, UINT nCount)
{
	UINT n = CFile::Read(lpBuf, nCount);
	if (m_dwLength != 0)
		OutputPercent((int)((GetPosition()*100)/m_dwLength));
	return n;
}

void CTrackFile::Write(const void FAR* lpBuf, UINT nCount)
{
	CFile::Write(lpBuf, nCount);
	OutputString(m_strSaving);
//  if (m_dwLength != 0)
//      OutputPercent((int)((GetPosition()*100)/m_dwLength));
}

void CTrackFile::OutputString(LPCTSTR lpsz)
{
	if (m_pFrameWnd != NULL)
	{
		m_pFrameWnd->SetMessageText(lpsz);
		CWnd* pBarWnd = m_pFrameWnd->GetMessageBar();
		if (pBarWnd != NULL)
			pBarWnd->UpdateWindow();
	}
}

void CTrackFile::OutputPercent(int nPercentComplete)
{
	if (m_pFrameWnd != NULL && m_nLastPercent != nPercentComplete)
	{
		m_nLastPercent = nPercentComplete;
		TCHAR buf[64];
		int n = nPercentComplete;
		wsprintf(buf, (n==100) ? m_strWait : m_strComplete, n);
		OutputString(buf);
	}
}

COEMFile::COEMFile(CFrameWnd* pWnd) : CTrackFile(pWnd)
{
}

UINT COEMFile::Read(void FAR* lpBuf, UINT nCount)
{
	UINT n = CTrackFile::Read(lpBuf, nCount);
	OemToCharBuffA((const char*)lpBuf, (char*)lpBuf, n);
	return n;
}

void COEMFile::Write(const void FAR* lpBuf, UINT nCount)
{
	CharToOemBuffA((const char*)lpBuf, (char*)lpBuf, nCount);
	CTrackFile::Write(lpBuf, nCount);
}

#ifdef CONVERTERS

HGLOBAL CConverter::StringToHGLOBAL(LPCSTR pstr)
{
	HGLOBAL hMem = NULL;
	if (pstr != NULL)
	{
		hMem = GlobalAlloc(GHND, (lstrlenA(pstr)*2)+1);
		char* p = (char*) GlobalLock(hMem);
		ASSERT(p != NULL);
		if (p != NULL)
			lstrcpyA(p, pstr);
		GlobalUnlock(hMem);
	}
	return hMem;
}

CConverter::CConverter(LPCSTR pszLibName, CFrameWnd* pWnd) : CTrackFile(pWnd)
{
	USES_CONVERSION;
	m_hBuff = NULL;
	m_pBuf = NULL;
	m_nBytesAvail = 0;
	m_nBytesWritten = 0;
	m_nPercent = 0;
	m_hEventFile = NULL;
	m_hEventConv = NULL;
	m_bDone = TRUE;
	m_bConvErr = FALSE;
	m_hFileName = NULL;
	OFSTRUCT ofs;
	if (OpenFile(pszLibName, &ofs, OF_EXIST) == HFILE_ERROR)
	{
		m_hLibCnv = NULL;
		return;
	}
	m_hLibCnv = LoadLibraryA(pszLibName);
	if (m_hLibCnv < (HINSTANCE)HINSTANCE_ERROR)
		m_hLibCnv = NULL;
	else
	{
		LoadFunctions();
		ASSERT(m_pInitConverter != NULL);
		if (m_pInitConverter != NULL)
		{
			CString str = AfxGetAppName();
			str.MakeUpper();
			VERIFY(m_pInitConverter(AfxGetMainWnd()->GetSafeHwnd(), T2CA(str)));
		}
	}
}

CConverter::CConverter(CFrameWnd* pWnd) : CTrackFile(pWnd)
{
	m_pInitConverter = NULL;
	m_pIsFormatCorrect = NULL;
	m_pForeignToRtf = NULL;
	m_pRtfToForeign = NULL;
	m_bConvErr = FALSE;
	m_hFileName = NULL;
}

CConverter::~CConverter()
{
	if (!m_bDone) // converter thread hasn't exited
	{
		WaitForConverter();
		m_nBytesAvail = 0;
		VERIFY(ResetEvent(m_hEventFile));
		m_nBytesAvail = 0;
		SetEvent(m_hEventConv);
		WaitForConverter();// wait for DoConversion exit
		VERIFY(ResetEvent(m_hEventFile));
	}

	if (m_hEventFile != NULL)
		VERIFY(CloseHandle(m_hEventFile));
	if (m_hEventConv != NULL)
		VERIFY(CloseHandle(m_hEventConv));
	if (m_hLibCnv != NULL)
		FreeLibrary(m_hLibCnv);
	if (m_hFileName != NULL)
		GlobalFree(m_hFileName);
}

void CConverter::WaitForConverter()
{
	// while event not signalled -- process messages
	while (MsgWaitForMultipleObjects(1, &m_hEventFile, FALSE, INFINITE,
		QS_SENDMESSAGE) != WAIT_OBJECT_0)
	{
		MSG msg;
		PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE);
	}
}

void CConverter::WaitForBuffer()
{
	// while event not signalled -- process messages
	while (MsgWaitForMultipleObjects(1, &m_hEventConv, FALSE, INFINITE,
		QS_SENDMESSAGE) != WAIT_OBJECT_0)
	{
		MSG msg;
		PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE);
	}
}

UINT CConverter::ConverterThread(LPVOID)
{
	ASSERT(m_pThis != NULL);

	HRESULT hRes = OleInitialize(NULL);
	ASSERT(hRes == S_OK || hRes == S_FALSE);
	m_pThis->DoConversion();
	OleUninitialize();

	return 0;
}

BOOL CConverter::IsFormatCorrect(LPCTSTR pszFileName)
{
	USES_CONVERSION;
	int nRet;
	if (m_hLibCnv == NULL || m_pIsFormatCorrect == NULL)
		return FALSE;

	char buf[_MAX_PATH];
	strcpy(buf, T2CA(pszFileName));

	CharToOemA(buf, buf);

	HGLOBAL hFileName = StringToHGLOBAL(buf);
	HGLOBAL hDesc = GlobalAlloc(GHND, 256);
	ASSERT(hDesc != NULL);
	nRet = m_pIsFormatCorrect(hFileName, hDesc);
	GlobalFree(hDesc);
	GlobalFree(hFileName);
	return (nRet == 1) ? TRUE : FALSE;
}

// static callback function
int CALLBACK CConverter::WriteOutStatic(int cch, int nPercentComplete)
{
	ASSERT(m_pThis != NULL);
	return m_pThis->WriteOut(cch, nPercentComplete);
}

int CALLBACK CConverter::WriteOut(int cch, int nPercentComplete)
{
	ASSERT(m_hBuff != NULL);
	m_nPercent = nPercentComplete;
	if (m_hBuff == NULL)
		return -9;
	if (cch != 0)
	{
		WaitForBuffer();
		VERIFY(ResetEvent(m_hEventConv));
		m_nBytesAvail = cch;
		SetEvent(m_hEventFile);
		WaitForBuffer();
	}
	return 0; //everything OK
}

int CALLBACK CConverter::ReadInStatic(int /*flags*/, int nPercentComplete)
{
	ASSERT(m_pThis != NULL);
	return m_pThis->ReadIn(nPercentComplete);
}

int CALLBACK CConverter::ReadIn(int /*nPercentComplete*/)
{
	ASSERT(m_hBuff != NULL);
	if (m_hBuff == NULL)
		return -8;

	SetEvent(m_hEventFile);
	WaitForBuffer();
	VERIFY(ResetEvent(m_hEventConv));

	return m_nBytesAvail;
}

BOOL CConverter::DoConversion()
{
	USES_CONVERSION;
	m_nLastPercent = -1;
//  m_dwLength = 0; // prevent Read/Write from displaying
	m_nPercent = 0;

	ASSERT(m_hBuff != NULL);
	ASSERT(m_pThis != NULL);
	HGLOBAL hDesc = StringToHGLOBAL("");
	HGLOBAL hSubset = StringToHGLOBAL("");

	int nRet;
	if (m_bForeignToRtf)
	{
		ASSERT(m_pForeignToRtf != NULL);
		ASSERT(m_hFileName != NULL);
		nRet = m_pForeignToRtf(m_hFileName, NULL, m_hBuff, hDesc, hSubset,
			(LPFNOUT)WriteOutStatic);
		// wait for next CConverter::Read to come through
		WaitForBuffer();
		VERIFY(ResetEvent(m_hEventConv));
	}
	else if (!m_bForeignToRtf)
	{
		ASSERT(m_pRtfToForeign != NULL);
		ASSERT(m_hFileName != NULL);
		nRet = m_pRtfToForeign(m_hFileName, NULL, m_hBuff, hDesc,
			(LPFNIN)ReadInStatic);
		// don't need to wait for m_hEventConv
	}

	GlobalFree(hDesc);
	GlobalFree(hSubset);
	if (m_pBuf != NULL)
		GlobalUnlock(m_hBuff);
	GlobalFree(m_hBuff);

	if (nRet != 0)
		m_bConvErr = TRUE;

	m_bDone = TRUE;
	m_nPercent = 100;
	m_nLastPercent = -1;

	SetEvent(m_hEventFile);

	return (nRet == 0);
}

void CConverter::LoadFunctions()
{
	m_pInitConverter = (PINITCONVERTER)GetProcAddress(m_hLibCnv, "InitConverter32");
	m_pIsFormatCorrect = (PISFORMATCORRECT)GetProcAddress(m_hLibCnv, "IsFormatCorrect32");
	m_pForeignToRtf = (PFOREIGNTORTF)GetProcAddress(m_hLibCnv, "ForeignToRtf32");
	m_pRtfToForeign = (PRTFTOFOREIGN)GetProcAddress(m_hLibCnv, "RtfToForeign32");
}
#endif

///////////////////////////////////////////////////////////////////////////////

BOOL CConverter::Open(LPCTSTR pszFileName, UINT nOpenFlags,
	CFileException* pException)
{
	USES_CONVERSION;
	// we convert to oem and back because of the following case
	// test(c).txt becomes testc.txt in OEM and stays testc.txt to Ansi
	char buf[_MAX_PATH];
	strcpy(buf, T2CA(pszFileName));
	CharToOemA(buf, buf);
	OemToCharA(buf, buf);

	LPTSTR lpszFileNameT = A2T(buf);

	// let's make sure we could do what is wanted directly even though we aren't
	m_bCloseOnDelete = FALSE;
	m_hFile = (UINT)hFileNull;

	BOOL bOpen = CFile::Open(lpszFileNameT, nOpenFlags, pException);
	CFile::Close();
	if (!bOpen)
		return FALSE;

	m_bForeignToRtf = !(nOpenFlags & (CFile::modeReadWrite | CFile::modeWrite));

	// check for reading empty file
	if (m_bForeignToRtf)
	{
		CFileStatus stat;
		if (CFile::GetStatus(lpszFileNameT, stat) && stat.m_size == 0)
			return TRUE;
	}

	//set security attributes to inherit handle
	SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
	//create the events
	m_hEventFile = CreateEvent(&sa, TRUE, FALSE, NULL);
	m_hEventConv = CreateEvent(&sa, TRUE, FALSE, NULL);
	//create the converter thread and create the events

	CharToOemA(buf, buf);
	ASSERT(m_hFileName == NULL);
	m_hFileName = StringToHGLOBAL(buf);

	m_pThis = this;
	m_bDone = FALSE;
	m_hBuff = GlobalAlloc(GHND, BUFFSIZE);
	ASSERT(m_hBuff != NULL);

	AfxBeginThread(ConverterThread, this, THREAD_PRIORITY_NORMAL, 0, 0, &sa);

	return TRUE;
}

// m_hEventConv -- the main thread signals this event when ready for more data
// m_hEventFile -- the converter signals this event when data is ready

UINT CConverter::Read(void FAR* lpBuf, UINT nCount)
{
	ASSERT(m_bForeignToRtf);
	if (m_bDone)
		return 0;
	// if converter is done
	int cch = nCount;
	BYTE* pBuf = (BYTE*)lpBuf;
	while (cch != 0)
	{
		if (m_nBytesAvail == 0)
		{
			if (m_pBuf != NULL)
				GlobalUnlock(m_hBuff);
			m_pBuf = NULL;
			SetEvent(m_hEventConv);
			WaitForConverter();
			VERIFY(ResetEvent(m_hEventFile));
			if (m_bConvErr)
				AfxThrowFileException(CFileException::generic);
			if (m_bDone)
				return nCount - cch;
			m_pBuf = (BYTE*)GlobalLock(m_hBuff);
			ASSERT(m_pBuf != NULL);
		}
		int nBytes = min(cch, m_nBytesAvail);
		memcpy(pBuf, m_pBuf, nBytes);
		pBuf += nBytes;
		m_pBuf += nBytes;
		m_nBytesAvail -= nBytes;
		cch -= nBytes;
		OutputPercent(m_nPercent);
	}
	return nCount - cch;
}

void CConverter::Write(const void FAR* lpBuf, UINT nCount)
{
	ASSERT(!m_bForeignToRtf);

	m_nBytesWritten += nCount;
	while (nCount != 0)
	{
		WaitForConverter();
		VERIFY(ResetEvent(m_hEventFile));
		if (m_bConvErr)
			AfxThrowFileException(CFileException::generic);
		m_nBytesAvail = min(nCount, BUFFSIZE);
		nCount -= m_nBytesAvail;
		BYTE* pBuf = (BYTE*)GlobalLock(m_hBuff);
		ASSERT(pBuf != NULL);
		memcpy(pBuf, lpBuf, m_nBytesAvail);
		GlobalUnlock(m_hBuff);
		SetEvent(m_hEventConv);
	}
	OutputString(m_strSaving);
}

LONG CConverter::Seek(LONG lOff, UINT nFrom)
{
	if (lOff != 0 && nFrom != current)
		AfxThrowNotSupportedException();
	return 0;
}

DWORD CConverter::GetPosition() const
{
	return 0;
}

void CConverter::Flush()
{
}

void CConverter::Close()
{
}

void CConverter::Abort()
{
}

DWORD CConverter::GetLength() const
{
	ASSERT_VALID(this);
	return 1;
}

CFile* CConverter::Duplicate() const
{
	AfxThrowNotSupportedException();
	return NULL;
}

void CConverter::LockRange(DWORD, DWORD)
{
	AfxThrowNotSupportedException();
}

void CConverter::UnlockRange(DWORD, DWORD)
{
	AfxThrowNotSupportedException();
}

void CConverter::SetLength(DWORD)
{
	AfxThrowNotSupportedException();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品网站一区| 色狠狠桃花综合| 久久蜜桃av一区精品变态类天堂| 亚洲精品一二三四区| 欧美亚洲综合一区| 日韩国产欧美三级| 国产精品视频观看| 国产女主播一区| 欧美中文字幕一区| 久久精品理论片| 久久午夜羞羞影院免费观看| 国产不卡视频在线播放| 国产精品第四页| 欧美日韩aaaaa| 日韩国产精品久久久久久亚洲| 2024国产精品| 欧美色中文字幕| 亚洲一区二区在线播放相泽 | 国产suv精品一区二区6| 91视频国产资源| 亚洲男女毛片无遮挡| 国产一本一道久久香蕉| 久久久国产精品午夜一区ai换脸| 九九九精品视频| 美女任你摸久久| 亚洲免费在线观看| 日韩午夜三级在线| 国产成人精品在线看| 亚洲免费观看高清完整版在线观看熊 | 亚洲人亚洲人成电影网站色| 国产一区二区三区日韩| 捆绑紧缚一区二区三区视频| 亚洲第一福利视频在线| 国产免费观看久久| 亚洲色图清纯唯美| 亚洲一区二区三区精品在线| 亚洲成人激情自拍| 久久99精品久久久久| 岛国精品一区二区| 99re视频精品| 国产乱人伦偷精品视频不卡| 色偷偷88欧美精品久久久 | 日本电影欧美片| 欧美日韩精品福利| 欧美tk—视频vk| 国产精品短视频| 国产精品色噜噜| 亚洲午夜久久久久久久久电影网| 亚洲精品国产一区二区精华液| 亚洲第四色夜色| 九九**精品视频免费播放| 国产一区美女在线| 色综合天天狠狠| 日韩欧美电影一二三| 国产欧美一区二区精品性色超碰| 亚洲三级电影网站| 老司机精品视频在线| 成人app网站| 欧美高清精品3d| 亚洲国产成人一区二区三区| 一区二区理论电影在线观看| 免费xxxx性欧美18vr| 成人激情视频网站| 宅男噜噜噜66一区二区66| 国产欧美一区视频| 欧美不卡激情三级在线观看| 亚洲欧美激情小说另类| 久久国产视频网| 色婷婷亚洲一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 国产天堂亚洲国产碰碰| 亚洲小少妇裸体bbw| 久久成人麻豆午夜电影| 欧美亚洲国产bt| 国产欧美精品在线观看| 天堂va蜜桃一区二区三区| 久久99久久99| 欧美怡红院视频| 久久精品夜色噜噜亚洲a∨| 亚洲综合偷拍欧美一区色| 国产福利一区在线| 日韩一级黄色大片| 中文字幕免费不卡| 麻豆国产精品777777在线| 在线观看av一区二区| 国产精品毛片久久久久久| 亚洲一区视频在线| 国产盗摄一区二区| 日韩欧美第一区| 亚洲午夜久久久久久久久久久| 成人h动漫精品一区二| 欧美视频一区二区| 综合色中文字幕| 亚洲va国产天堂va久久en| 94色蜜桃网一区二区三区| 欧美三级韩国三级日本三斤| 中文字幕制服丝袜一区二区三区| 亚洲精品免费一二三区| 成人性生交大合| 久久―日本道色综合久久| 国产精品综合一区二区三区| 欧美日韩成人一区| 亚洲电影一区二区三区| 北岛玲一区二区三区四区| 欧美国产日产图区| 国产高清不卡一区| 亚洲精品在线网站| 狠狠色综合日日| 日韩免费观看高清完整版 | 精品欧美一区二区在线观看| 亚洲午夜羞羞片| 91丝袜美女网| 中文一区二区完整视频在线观看 | 亚洲激情av在线| 91在线观看免费视频| 国产精品天美传媒沈樵| 国产高清在线精品| 日本一区二区三区四区| 国产成人8x视频一区二区| 国产亚洲自拍一区| 成人一级视频在线观看| 欧美精品一区男女天堂| 韩国欧美国产一区| 久久综合资源网| 精品一区二区三区欧美| 91精品一区二区三区久久久久久| 日韩精品免费视频人成| 欧美疯狂做受xxxx富婆| 亚洲精品视频在线观看网站| 日本大香伊一区二区三区| 亚洲精品v日韩精品| 欧美视频一区二区| 久久91精品久久久久久秒播 | 日韩不卡免费视频| 欧美在线观看视频一区二区 | 国产一区视频网站| 午夜精品影院在线观看| 欧美一区二区在线视频| 久久99精品久久只有精品| 久久婷婷色综合| 99久久精品免费| 日韩精品一二三四| 26uuu欧美日本| av亚洲产国偷v产偷v自拍| 亚洲一线二线三线久久久| 日韩视频不卡中文| 粉嫩av一区二区三区| 亚洲综合在线视频| 欧美一区二区三区在线电影| 成人性生交大合| 亚洲一本大道在线| 日本一区二区三区四区在线视频| 色悠悠久久综合| 精品一区二区在线免费观看| 中文字幕欧美国产| 欧美一级理论片| 丁香啪啪综合成人亚洲小说| 偷拍日韩校园综合在线| 久久这里都是精品| 欧美日韩中文精品| 国产传媒欧美日韩成人| 日本在线不卡视频一二三区| 久久人人爽爽爽人久久久| 欧美精品视频www在线观看| 国产精品白丝jk黑袜喷水| 午夜在线成人av| 久久久久久电影| 91精品国产综合久久婷婷香蕉| 成人午夜伦理影院| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲人成影院在线观看| 久久精品水蜜桃av综合天堂| 欧美日韩视频在线第一区| 91丨porny丨国产| 久久超级碰视频| 99视频在线精品| 亚洲成av人片一区二区梦乃| 亚洲天堂福利av| 99re这里只有精品首页| 国产高清不卡一区二区| 亚洲一区二区三区视频在线 | 亚洲天堂av老司机| 精品国产第一区二区三区观看体验| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产一区二区三区在线观看精品 | 久久综合九色综合97婷婷女人 | 一区二区三区在线播放| 国产精品水嫩水嫩| 欧美一区二区免费视频| 欧洲国内综合视频| 99国产麻豆精品| 成人黄色国产精品网站大全在线免费观看| 日韩在线一二三区| 午夜影视日本亚洲欧洲精品| 亚洲人123区| 亚洲欧美日韩国产成人精品影院| 久久久久高清精品| 国产网站一区二区三区| 精品久久国产字幕高潮| 日韩欧美三级在线|