/*!
	クリップボードに1文字だけ入れる
	@param[in]	ch	入れたい文字
	@return	HRESULT	終了状態コード
*/
HRESULT DocClipLetter( TCHAR ch )
{
	TCHAR	atBuff[3];

	ZeroMemory( atBuff, sizeof(atBuff) );
	atBuff[0] = ch;

	DocClipboardDataSet( atBuff, 4, D_UNI );

	return S_OK;
}
示例#2
0
/*!
	MAAからSJISを受け取って処理する・Editor側にもある
	@param[in]	hWnd	ウインドウハンドル
	@param[in]	pcCont	AAの文字列
	@param[in]	cbSize	バイト数・末端NULLは含まない
	@param[in]	dMode	使用モード・デフォもしくは個別指定
	@return		非0デフォ動作した 0指定モードだった
*/
UINT ViewMaaMaterialise( HWND hWnd, LPSTR pcCont, UINT cbSize, UINT dMode )
{
	LPTSTR		ptString;
	UINT_PTR	cchSize;
	UINT		uRslt = TRUE;	//	デフォ動作であるならTRUE<いつでもTRUEにした

//	FLASHWINFO	stFshWInfo;

	//	デフォ動作であるかどうか
//	if( dMode == gdUseMode ){		uRslt = TRUE;	}
	if( MAA_DEFAULT ==  dMode ){	dMode = gdUseMode;	}
	if( MAA_SUBDEFAULT== dMode ){	dMode = gdUseSubMode;	}

	if( MAA_UNICLIP == dMode )	//	ユニコード
	{
		ptString = SjisDecodeAlloc( pcCont );	//	ユニコードにしておく
		StringCchLength( ptString, STRSAFE_MAX_CCH, &cchSize );

		//	ユニコード的にクリッペ
		DocClipboardDataSet( ptString, (cchSize + 1) * 2, D_UNI );

		FREE(ptString);
	}
	else if( MAA_DRAUGHT == dMode ){	DraughtItemAdding( hWnd, pcCont );	}	//	ドラフトボードに追加
	else{	DocClipboardDataSet( pcCont, (cbSize + 1), D_SJIS );	}	//	SJISコピー


	//ZeroMemory( &stFshWInfo, sizeof(FLASHWINFO) );
	//stFshWInfo.cbSize    = sizeof(FLASHWINFO);	//	この構造体のサイズ
	//stFshWInfo.hwnd      = ghMaaWnd;	//	wktkさせたいウインダウのハンドル
	//stFshWInfo.dwFlags   = FLASHW_ALL;	//	キャプションとタスクバーのボタン両方
	//stFshWInfo.uCount    = 2;			//	wktkさせる回数
	//stFshWInfo.dwTimeout = 0;			//	間隔。0でデフォルト的な間隔
	//FlashWindowEx( &stFshWInfo );		//	wktkさせる

	return uRslt;
}
/*!
	頁全体をコピーする
	@param[in]	bStyle	ユニコードかシフトJIS
	@return		HRESULT	終了状態コード
*/
HRESULT DocPageAllCopy( UINT bStyle )
{
	INT	cbSize;
	LPVOID	pString = NULL;

	//	SJISの場合は、ユニコード文字は&#dddd;で確保される

//	cbSize = DocPageTextAllGetAlloc( bStyle, &pString );
	cbSize = DocPageGetAlloc( bStyle, &pString );

	TRACE( TEXT("BYTE:%d"), cbSize );

	DocClipboardDataSet( pString, cbSize, bStyle );

	FREE( pString );

	return S_OK;
}
/*!
	選択範囲のデータをクリップボードする
	@param[in]	bStyle	1ユニコードかシフトJISで、矩形かどうか
	@return				コピーしたバイト数・NULLターミネータも含む
*/
INT DocExClipSelect( UINT bStyle )
{
	INT	cbSize;
	LPVOID	pString = NULL;

	//	SJISの場合は、ユニコード文字は&#dddd;で確保される

	cbSize = DocSelectTextGetAlloc( bStyle, &pString, NULL );

	TRACE( TEXT("BYTE:%d"), cbSize );

	//	もし選択範囲なかったら、Focus行の内容をコピるとか

	DocClipboardDataSet( pString, cbSize, bStyle );

	FREE( pString );

	return cbSize;
}
示例#5
0
/*!
	ホットキーによる投下の調整
	@return		HRESULT	終了状態コード
*/
HRESULT DocThreadDropCopy( VOID )
{
	CHAR	acBuf[260];
	TCHAR	atTitle[64], atInfo[256];
	INT	cbSize, maxPage;//, dFocusBuf;
	LPVOID	pcString = NULL;

//	dFocusBuf = gixFocusPage;	//	現在頁を一旦待避させて
//	gixFocusPage = gixDropPage;	//	投下用頁にして

//	cbSize = DocPageTextAllGetAlloc( D_SJIS, &pcString );
	cbSize = DocPageTextGetAlloc( gitFileIt, gixDropPage, D_SJIS, &pcString, FALSE );

//	gixFocusPage = dFocusBuf;	//	終わったら戻す

	TRACE( TEXT("%d 頁をコピー"), gixDropPage );

	DocClipboardDataSet( pcString, cbSize, D_SJIS );

	ZeroMemory( acBuf, sizeof(acBuf) );
	StringCchCopyNA( acBuf, 260, (LPCSTR)pcString, 250 );
	ZeroMemory( atInfo, sizeof(atInfo) );
	MultiByteToWideChar( CP_ACP, 0, acBuf, (INT)strlen(acBuf), atInfo, 256 );

	StringCchPrintf( atTitle, 64, TEXT("%d 頁をコピーしたよ"), gixDropPage + 1 );

	NotifyBalloonExist( atInfo, atTitle, NIIF_INFO );

	FREE( pcString );

	gixDropPage++;	//	次の頁へ

	maxPage = DocNowFilePageCount(  );
	if( maxPage <= gixDropPage )	gixDropPage = 0;
	//	最終頁までイッたら先頭に戻る


	return S_OK;
}
示例#6
0
/*!
	抽出対象領域を取り出す
	@param[in]	hInst	実存値
	@return		HRESULT	終了状態コード
*/
HRESULT DocExtractExecute( HINSTANCE hInst )
{
	INT	dOffDot, dCount;
	BOOLEAN	bLnFirst, bMzFirst, bIsVoid;
	LPTSTR	ptSpace, ptString;
	UINT_PTR	cch;//, i;

	LINE_ITR	itLnFirst, itLnLast, itLnErate, itLnEnd;
	LETR_ITR	itMozi, itMzEnd;

	wstring	wsBuffer;


	if( 0 >= DocNowFilePageCount( ) )	return S_FALSE;

	//	開始行と終止行・オフセット量を検索
	itLnErate = (*gitFileIt).vcCont.at( gixFocusPage ).ltPage.begin();
	itLnEnd   = (*gitFileIt).vcCont.at( gixFocusPage ).ltPage.end();
	itLnFirst = itLnErate;
	itLnLast  = itLnEnd;

	dOffDot = DocPageMaxDotGet( -1, -1 );	//	MAX位置を初期にしとけばおk

	bLnFirst = TRUE;

	for( ; itLnEnd != itLnErate; itLnErate++ )	//	行サーチ
	{
		itMozi  = itLnErate->vcLine.begin();
		itMzEnd = itLnErate->vcLine.end();

		dCount = 0;

		for( ; itMzEnd != itMozi; itMozi++ )	//	文字サーチ
		{
			if( CT_SELECT & itMozi->mzStyle )	//	選択状態発見
			{
				if( bLnFirst )	//	最初の行が未発見であれば
				{
					itLnFirst = itLnErate;	//	今の行を記録する
					bLnFirst = FALSE;
				}
				itLnLast  = itLnErate;	//	選択状態があるので終止行を更新

				//	そこまでのオフセット量よりさらに小さければ更新
				if( dOffDot > dCount )	dOffDot = dCount;

				break;	//	次の行に移動
			}

			dCount += itMozi->rdWidth;	//	そこまでのドット数をため込む

		}
	}
	if( itLnLast != itLnEnd )	 itLnLast++;	//	終止の次の行を示しておく

	if( bLnFirst )	return  S_FALSE;	//	選択範囲がなかったら死にます

	wsBuffer.clear();

	//	開始行から内容を確保していく
	for( itLnErate = itLnFirst; itLnLast != itLnErate; itLnErate++ )	//	行サーチ
	{
		itMozi  = itLnErate->vcLine.begin();
		itMzEnd = itLnErate->vcLine.end();

		bMzFirst = TRUE;
		bIsVoid  = FALSE;
		dCount   = 0;

		for( ; itMzEnd != itMozi; itMozi++ )	//	文字サーチ
		{
			if( CT_SELECT & itMozi->mzStyle )	//	選択状態発見
			{
				if( bIsVoid )	//	直前まで未選択状態
				{
					if( bMzFirst )	//	最初の空白部分であれば
					{
						dCount -= dOffDot;	//	オフセットする
						if( 0 > dCount )	dCount = 0;
						bMzFirst = FALSE;
					}

					//	埋めSpaceを作る・不可ならNULLが返る
					ptSpace = DocPaddingSpaceMake( dCount );
					if( ptSpace )
					{
						wsBuffer += ptSpace;
						//StringCchLength( ptSpace, STRSAFE_MAX_CCH, &cch );
						//for( i = 0; cch > i; i++ )
						//{
						//	wsBuffer += (ptSpace[i]);
						//}
						FREE(ptSpace);
					}
				}

				wsBuffer += itMozi->cchMozi;
				dCount =  0;	//	リセット
				bIsVoid = FALSE;
			}
			else
			{
				dCount += itMozi->rdWidth;	//	そこまでのドット数をため込む
				bIsVoid = TRUE;
			}
		}

		wsBuffer += CH_CRLFW;	//	改行追加
	}
	//	この時点で、wsBufferに全体が入っているはず

	cch = wsBuffer.size( ) + 1;
	ptString = (LPTSTR)malloc( cch * sizeof(TCHAR) );
	StringCchCopy( ptString, cch, wsBuffer.c_str( ) );

	if( hInst )	//	実存してるならレイヤボックスへ
	{
		LayerBoxVisibalise( hInst, ptString, 0x00 );
	}
	else	//	ないならクルッペボード
	{
		DocClipboardDataSet( ptString, cch * sizeof(TCHAR), D_UNI );
	}


	FREE(ptString);

	return S_OK;
}