⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chtxtin.cpp

📁 Windows上的MUD客户端程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:

		if (pStdEditMenu = GetMainInfo()->GetStdEditMenu())
		{
			pStdEditMenu->Promote( false );
		}
	}
}


void ChTextInputEdit::OnSetFocus( CWnd* pOldWnd )
{
	CEdit::OnSetFocus( pOldWnd );

	if (GetMainInfo() && GetMainInfo()->IsMenuInstalled())
	{
											/* Promote our window (we want to
												get the Cut/Copy/Paste menu
												messages first) */
		GetMainInfo()->GetStdEditMenu()->Promote();
	}
}


void ChTextInputEdit::OnRButtonDown( UINT nFlags, CPoint ptMouse )
{
	ClientToScreen( &ptMouse );
	DoRightButtonMenu( ptMouse );
}


/*----------------------------------------------------------------------------
	Chaco message handlers
----------------------------------------------------------------------------*/

CH_IMPLEMENT_MESSAGE_HANDLER( defTextInHandler )
{
	chparam		retVal = 0;

	return retVal;
}

CH_IMPLEMENT_MESSAGE_HANDLER( textInInitHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;

	pInfo->Initialize();
	return 0;
}

CH_IMPLEMENT_MESSAGE_HANDLER( textInShowModuleHandler )
{
	ChShowModuleMsg*	pMsg = (ChShowModuleMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;

	pInfo->ShowModule( pMsg->IsShowing() );
	return 0;
}

CH_IMPLEMENT_MESSAGE_HANDLER( textInGetPageCountHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChGetPageCountMsg*	pMsg = (ChGetPageCountMsg*)&msg;
	ChPageType			type;
	int					iPageCount;

	pMsg->GetParams( type );

	if (pInfo->IsShown())
	{
		switch( type )
		{
			case pagePreferences:
			{
				iPageCount = 1;
				break;
			}

			default:
			{
				iPageCount = 0;
				break;
			}
		}
	}
	else
	{
		iPageCount = 0;
	}

	return iPageCount;
}


CH_IMPLEMENT_MESSAGE_HANDLER( TextInGetPagesHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChGetPagesMsg*		pMsg = (ChGetPagesMsg*)&msg;
	ChPageType			type;
	chint16				sCount;
	chparam*			pPages;

	pMsg->GetParams( type, sCount, pPages );

	switch( type )
	{
		case pagePreferences:
		{
			ASSERT( 1 == sCount );

			#if defined( CH_MSW )
			{
				ChTextInPrefsPage*	pPage;

				pPage = new ChTextInPrefsPage;

//				pPage->SetEditLines( pInfo->GetEditLines() );

				pPages[0] = (chparam)pPage;
			}
			#endif
			break;
		}

		default:
		{
			break;
		}
	}

	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( TextInGetPageDataHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChGetPageDataMsg*	pMsg = (ChGetPageDataMsg*)&msg;
	ChPageType			type;
	chint16				sCount;
	chparam*			pPages;

	pMsg->GetParams( type, sCount, pPages );

	switch( type )
	{
		case pagePreferences:
		{
			ASSERT( 1 == sCount );

			#if defined( CH_MSW )
			{
				if (pPages[0])
				{
					ChTextInPrefsPage*	pPage = (ChTextInPrefsPage*)pPages[0];

					pPage->OnCommit();
					pInfo->UpdatePreferences();
				}
			}
			#endif	// defined( CH_MSW )
			break;
		}

		default:
		{
			break;
		}
	}

	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( TextInReleasePagesHandler )
{
	ChReleasePagesMsg*	pMsg = (ChReleasePagesMsg*)&msg;
	ChPageType			type;
	chint16				sCount;
	chparam*			pPages;

	pMsg->GetParams( type, sCount, pPages );

	switch( type )
	{
		case pagePreferences:
		{
			ASSERT( 1 == sCount );

			#if defined( CH_MSW )
			{
				if (pPages[0])
				{
					ChTextInPrefsPage*	pPage = (ChTextInPrefsPage*)pPages[0];

					delete pPage;
				}
			}
			#endif	// defined( CH_MSW )
			break;
		}

		default:
		{
			break;
		}
	}

	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( textInSetFocusHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;

	if (pInfo->IsShown())
	{
		pInfo->GetEdit()->SetFocus();
	}
	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( textInTextHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChTextMsg*			pMsg = (ChTextMsg*)&msg;
	string				strText;

	pMsg->GetParams( strText );
	pInfo->GetEdit()->SetWindowText( strText );
	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( textInClearTextHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;

	pInfo->GetEdit()->EraseText();
	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( textInInstallHookHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChInstallHookMsg*	pMsg = (ChInstallHookMsg*)&msg;
	ChHookManager*		pHookMgr = pInfo->GetHookMgr();
	ChModuleID			idHookModule;
	chint32				lMessage;

	pMsg->GetParams( idHookModule, lMessage );
	ASSERT( 0 == lMessage || CH_MSG_TEXT == lMessage );

	pHookMgr->Install( idHookModule );

	return 0;
}

CH_IMPLEMENT_MESSAGE_HANDLER( textInPromoteHookHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChPromoteHookMsg*	pMsg = (ChPromoteHookMsg*)&msg;
	ChHookManager*		pHookMgr = pInfo->GetHookMgr();
	ChModuleID			idHookModule;
	bool				boolPromote;
	chint32				lMessage;

	pMsg->GetParams( idHookModule, boolPromote, lMessage );
	ASSERT( 0 == lMessage || CH_MSG_TEXT == lMessage );

	pHookMgr->Promote( idHookModule, boolPromote );

	return 0;
}

CH_IMPLEMENT_MESSAGE_HANDLER( textInUninstallHookHandler )
{
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMainInfo;
	ChUninstallHookMsg*	pMsg = (ChUninstallHookMsg*)&msg;
	ChHookManager*		pHookMgr = pInfo->GetHookMgr();
	ChModuleID			idHookModule;
	chint32				lMessage;

	pMsg->GetParams( idHookModule, lMessage );
	ASSERT( 0 == lMessage || CH_MSG_TEXT == lMessage );

	pHookMgr->Uninstall( idHookModule );

	return 0;
}


CH_IMPLEMENT_MESSAGE_HANDLER( textInSetPasswordHandler )
{
	ChTextInMainInfo*		pInfo = (ChTextInMainInfo*)pMainInfo;
	ChTextSetPasswordMsg*	pMsg = (ChTextSetPasswordMsg*)&msg;
	bool					boolPassword;

	pMsg->GetParams( boolPassword );
	pInfo->SetPassword( boolPassword );

	return 0;
}


/*----------------------------------------------------------------------------
	Chaco menu handlers
----------------------------------------------------------------------------*/

CH_IMPLEMENT_MESSAGE_HANDLER( stdEditMenuHandler )
{
	chparam		retVal = 0;

	return retVal;
}


CH_IMPLEMENT_MESSAGE_HANDLER( OnStdEditCut )
{
	chparam				retVal = false;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMsg->GetItem()->GetData();
	ChTextInputEdit*	pEdit = pInfo->GetEdit();

	pMsg->SetProcessed();

	switch( pMsg->GetMessage() )
	{
		case CH_MSG_MENU_SHOW:
		{
			int		iStart;
			int		iEnd;

			pEdit->GetSel( iStart, iEnd );

			if (iStart == iEnd)
			{
				pMsg->GetItem()->Enable( false );
			}
			else
			{
				pMsg->GetItem()->Enable();
			}
			pMsg->SetProcessed();
			break;
		}

		case CH_MSG_MENU_SELECT:
		{
			pEdit->Cut();
			pMsg->SetProcessed();
			break;
		}

		default:
		{
			break;
		}
	}
	return retVal;
}

CH_IMPLEMENT_MESSAGE_HANDLER( OnStdEditCopy )
{
	chparam		retVal = false;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMsg->GetItem()->GetData();
	ChTextInputEdit*	pEdit = pInfo->GetEdit();

	pMsg->SetProcessed();

	switch( pMsg->GetMessage() )
	{
		case CH_MSG_MENU_SHOW:
		{
			int		iStart;
			int		iEnd;

			pEdit->GetSel( iStart, iEnd );

			if (iStart == iEnd)
			{
				pMsg->GetItem()->Enable( false );
			}
			else
			{
				pMsg->GetItem()->Enable();
			}
			pMsg->SetProcessed();
			break;
		}

		case CH_MSG_MENU_SELECT:
		{
			pEdit->Copy();
			pMsg->SetProcessed();
			break;
		}

		default:
		{
			break;
		}
	}

	return retVal;
}


CH_IMPLEMENT_MESSAGE_HANDLER( OnStdEditPaste )
{
	chparam				retVal = false;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMsg->GetItem()->GetData();
	ChTextInputEdit*	pEdit = pInfo->GetEdit();

	pMsg->SetProcessed();

	switch( pMsg->GetMessage() )
	{
		case CH_MSG_MENU_SHOW:
		{
			if (pEdit->OpenClipboard())
			{
				if (::GetClipboardData( CF_TEXT ))
				{
					pMsg->GetItem()->Enable();
				}
				else
				{
					pMsg->GetItem()->Enable( false );
				}

				::CloseClipboard();
			}
			pMsg->SetProcessed();
			break;
		}

		case CH_MSG_MENU_SELECT:
		{
			pEdit->Paste();
			pMsg->SetProcessed();
			break;
		}

		default:
		{
			break;
		}
	}

	return retVal;
}


CH_IMPLEMENT_MESSAGE_HANDLER( OnStdEditClear )
{
	chparam				retVal = false;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMsg->GetItem()->GetData();
	ChTextInputEdit*	pEdit = pInfo->GetEdit();

	pMsg->SetProcessed();

	switch( pMsg->GetMessage() )
	{
		case CH_MSG_MENU_SHOW:
		{
			int		iStart;
			int		iEnd;

			pEdit->GetSel( iStart, iEnd );

			if (iStart == iEnd)
			{
				pMsg->GetItem()->Enable( false );
			}
			else
			{
				pMsg->GetItem()->Enable();
			}
			pMsg->SetProcessed();
			break;
		}

		case CH_MSG_MENU_SELECT:
		{
			pEdit->Clear();
			pMsg->SetProcessed();
			break;
		}

		default:
		{
			break;
		}
	}

	return retVal;
}


CH_IMPLEMENT_MESSAGE_HANDLER( stdWindowMenuHandler )
{
	chparam		retVal = 0;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	pMsg->SetProcessed();

	return retVal;
}


CH_IMPLEMENT_MESSAGE_HANDLER( OnStdWindowCommand )
{
	chparam				retVal = false;
	ChMenuMsg*			pMsg = (ChMenuMsg*)&msg;
	ChTextInMainInfo*	pInfo = (ChTextInMainInfo*)pMsg->GetItem()->GetData();
	ChTextInputEdit*	pEdit = pInfo->GetEdit();

	pMsg->SetProcessed();

	switch( pMsg->GetMessage() )
	{
		case CH_MSG_MENU_SELECT:
		{
			pEdit->SetFocus();
			pMsg->SetProcessed();
			break;
		}

		default:
		{
			break;
		}
	}

	return retVal;
}


/*----------------------------------------------------------------------------
	Utility functions
----------------------------------------------------------------------------*/

CH_GLOBAL_FUNC( void )
TruncateMenuString( string& strText )
{
	if (strText.GetLength() > MAX_MENU_STRING_LEN)
	{
									/* Truncate the string to make a
										happy menu, and add ellipses */

		strText = strText.Left( MAX_MENU_STRING_LEN );
		strText += "...";
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -