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

📄 editwndmgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// EditWndMgr.cpp: implementation of the CEditWndMgr class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Chat.h"
#include "Hangul.h"
#include "menu.h"
#include "dragon.h"
#include "Hong_Sub.h"
#include "Map.h"
#include "CharDataTable.h"
#include "TeamBattle.h"
#include "GameProc.h"
#include "LineCommand.h"
#include "Tool.h"
#include "Hong_Sprite.h"
#include "directsound.h"
#include "SmallMenu.h"
#include "resource.h"
#include "MenuSet.h"
#include "SmallMenuSet.h"
#include "smallmenu.h"
#include "EditWndMgr.h"

bool g_ControlKeyOn;

extern void DoButtonCheckOfMenu( int i, int j );
extern void DoQuickmemoryByKeyInput(const int iInputKey,bool bIsDikCheck);

#ifdef STRICT
	WNDPROC	g_ParentProcAddress = NULL;
#else
	FARPROC	g_ParentProcAddress = NULL;
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEditWndMgr EWndMgr;
CEditWndMgr::CEditWndMgr()
{
	Clear();
}

CEditWndMgr::~CEditWndMgr()
{
	Clear();
}

HWND SetFocus2( const int iIndex)//021001 lsw
{
	return EWndMgr.SetWndFocus(iIndex);
}

HWND CEditWndMgr::SetWndFocus(int iIndex)
{
	HWND hWnd = 0;
#ifdef STRICT
	WNDPROC	ProcAddress;
#else
	FARPROC	ProcAddress;
#endif
	for(wndItor itor = vtWnd.begin() ;itor != vtWnd.end();itor++)//牢郸胶客 老摹窍绰 扩档快甫 罐绰促
	{
		if(iIndex == (*itor).iIndex)
		{
			hWnd		= (*itor).hWnd;
			ProcAddress = (*itor).ProcAddress; 
			break;
		}
	}
	
	for(wndItor itor2 = vtWnd.begin() ;itor2 != vtWnd.end();itor2++)//NowFocus俊 拱妨 霖促
	{
		if(HWND_NOW_FOCUS == (*itor2).iIndex)
		{
			(*itor2).hWnd = hWnd;
			(*itor).ProcAddress = ProcAddress;
		}
	}
	return SetFocus( hWnd );
}

int CEditWndMgr::CheckSysKey( UINT uiMessage, WPARAM wParam )
{
	if(WM_SYSKEYDOWN == uiMessage)
	{
		switch( wParam )
		{
		case VK_F4 :
			{
				CallMenu( MN_SYSTEM_LOGOUT, 193, 75, true ); 
				return 0;
			}break;
		}
	}
	return 1;
}

int CEditWndMgr::InitEditWnd()
{
	t_HWndInfo HwndInfo;

	HwndInfo.iIndex = HWND_NOW_FOCUS;
	HwndInfo.hWnd = NULL;
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_CHAT_INPUT;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD , 1,1, 500, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )ChatWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )ChatWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_CHAT_TARGET_INPUT;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD, 1,1, 150, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )ChatTargetWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )ChatTargetWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_1;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL , 1,1, 270, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_2;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL , 1,1, 270, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_3;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL |ES_WANTRETURN|ES_AUTOVSCROLL|ES_MULTILINE, 1,1, 265, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_BBS;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL , 1,1, 265, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )CommonEditWndProc );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_MAIL1;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL , 1,1, 265, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc1 );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc1 );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_MAIL2;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL , 1,1, 265, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc2 );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc2 );
#endif
	vtWnd.push_back(HwndInfo);

	HwndInfo.iIndex = HWND_MAIL3;
	HwndInfo.hWnd = ::CreateWindow( "edit", NULL, WS_CHILD| ES_AUTOHSCROLL |ES_AUTOVSCROLL| ES_WANTRETURN | ES_MULTILINE, 1,1, 265, 20, g_hwndMain, NULL, g_hInstance, NULL );
	if(!HwndInfo.hWnd){JustMsg("Edit Window Create Failed(1)"); return 0;}
#ifdef STRICT
	HwndInfo.ProcAddress = ( WNDPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc3 );
#else
	HwndInfo.ProcAddress = ( FARPROC )::SetWindowLong( HwndInfo.hWnd, GWL_WNDPROC, ( LONG )MailWndProc3 );
#endif
	vtWnd.push_back(HwndInfo);

	g_ParentProcAddress = HwndInfo.ProcAddress;
	
	HwndInfo.iIndex = HWND_GAME_MAIN;//霸烙扩档快 殿废
	HwndInfo.hWnd  = g_hwndMain;
	vtWnd.push_back(HwndInfo);
	return 1;
}

void CEditWndMgr::DestroyEditWnd()
{
	for(wndItor itor = vtWnd.begin() ;itor != vtWnd.end();itor++)
	{
		if(HWND_NOW_FOCUS != (*itor).iIndex)
		{
			if((*itor).hWnd)
			{
				DestroyWindow((*itor).hWnd);
				(*itor).hWnd = NULL;
			}
		}
	}
}

void CEditWndMgr::ClearAllTxt()//涝仿等 郴侩阑 葛滴 瘤矿聪促.//""甫 持绰疤聪促.
{
	for(int i = HWND_NOW_FOCUS;  HWND_GAME_MAIN >i;i++)
	{
		ClearTxt(i);
	}
}

void CEditWndMgr::ClearTxt(const int iIndex)//急琶茄 俊叼飘 冠胶狼 郴侩阑 瘤矿聪促.
{	
	for(wndItor itor = vtWnd.begin() ;itor != vtWnd.end();itor++)
	{
		if(iIndex == (*itor).iIndex )
		{
			SetTxt(iIndex,"");
		}
	}
}

void CEditWndMgr::Clear()
{
	DestroyEditWnd();
	vtWnd.clear();
}

//俊叼飘 冠胶俊 楷搬瞪 橇肺矫廉
LRESULT CALLBACK CommonEditWndProc( HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam )
{
	if( EWndMgr.CheckSysKey( uiMessage, wParam ) == 0 ) return 0;

	switch ( uiMessage )
	{
	case WM_INPUTLANGCHANGE :	
		{
			::CheckChineseInput( hWnd, lParam );
		}break;

	case	WM_KEYDOWN:
		{
			int		nVirtKey = ( int )wParam;	// virtual-key code 
			LPARAM	lKeyData = lParam;			// key data
			switch ( nVirtKey )
			{
				case	VK_LEFT:
				case	VK_RIGHT:
				case	VK_UP:
				case	VK_DOWN:
				case	VK_HOME:
				case	VK_INSERT:
				case	VK_DELETE:
				{
					return	0;
				}break;
			}
		}break;
	case WM_KEYUP:
		{
			int		nVirtKey = ( int )wParam;	// virtual-key code 
			LPARAM	lKeyData = lParam;			// key data
			switch ( nVirtKey )
			{
			case	VK_RETURN:
			case	VK_TAB:		
				{
					if(SMenu[MN_GUILD_REGIST_DEGREE].bActive) 
					{
						SMenu[MN_GUILD_REGIST_DEGREE].work++;
						SMenu[MN_GUILD_REGIST_DEGREE].work %= 5;
						SetWindowText( hWnd, "" );
					}
					if(SMenu[MN_LOGIN].bActive)//皋牢 牢磐其捞胶 涝仿 傈捞扼搁
					{
						switch(EWndMgr.GetFocusWndIndex())
						{
						case HWND_1:
							{
								id_password = false;
								EWndMgr.SetWndFocus(HWND_2);
							}break;
						case HWND_2:
							{
								switch (nVirtKey)
								{
								case	VK_RETURN:
									{
										SMenu[MN_LOGIN].nField[0].fCheakFlag=TRUE;
										EWndMgr.SetWndFocus(HWND_GAME_MAIN);
									}break;
								case	VK_TAB:	
									{
										id_password = true;
										EWndMgr.SetWndFocus(HWND_1);
									}break;
								}
							}break;
						default:
							{
							}break;
						}
					}
					g_aCurrentKeys[DIK_RETURN] = 0;
				}break;	
			}
		}break;
	case WM_CHAR: 
		{
			int		nVirtKey = ( int )wParam;	// virtual-key code 
			LPARAM	lKeyData = lParam;			// key data

			switch ( nVirtKey )//浚磐唱 徘 摹搁 秽秽 家府唱绰芭 规瘤
			{
				case	VK_RETURN: return 0;
				case	VK_TAB: return 0;
			}
		}break;
	}
	return	CallWindowProc( g_ParentProcAddress, hWnd, uiMessage, wParam, lParam );
}

LRESULT CALLBACK ChatWndProc( HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam )
{
	if( EWndMgr.CheckSysKey( uiMessage, wParam ) == 0 ) return 0;

	switch ( uiMessage )
	{
	case WM_INPUTLANGCHANGE :	
		{
			::CheckChineseInput( hWnd, lParam );
		}break;
	case WM_KEYDOWN:
		{
			const int	nVirtKey = ( int )wParam;	// virtual-key code 
			LPARAM	lKeyData = lParam;			// key data
			switch ( nVirtKey )
			{
			case	VK_UP:
			case	VK_DOWN:
			case	VK_LEFT:
			case	VK_RIGHT:
			case	VK_HOME:
			case	VK_END:
			case	VK_INSERT:
			case	VK_DELETE:
				{
					return	0;
				}break;
			case	VK_TAB:	
				{
					const int iTarget = GetChatTarget();
					switch(iTarget)
					{
						case CHAT_TARGET_WISPER1	:
						case CHAT_TARGET_WISPER2	:
						case CHAT_TARGET_WISPER3	:
						case CHAT_TARGET_WISPER4	:
						case CHAT_TARGET_WISPER5	:
							{
								char temp[MAX_CHAT_STRING_]={""};
								EWndMgr.ClearTxt(HWND_CHAT_INPUT);
								SetChatTarget(iTarget+1);
							}break;
						case CHAT_TARGET_GUILD:
							{
								char temp[MAX_CHAT_STRING_]={""};
								EWndMgr.ClearTxt(HWND_CHAT_INPUT);
								SetChatTarget(SELECT_WISPER_MODE);
							}break;
						case CHAT_TARGET_NORMAL:
							{
								char temp[MAX_CHAT_STRING_]={""};
								EWndMgr.ClearTxt(HWND_CHAT_INPUT);
								SetChatTarget(CHAT_TARGET_GUILD);

⌨️ 快捷键说明

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