stoneage8.5/石器时代8.5客户端最新源代码/石器源码/systeminc/talkwindow.h

112 lines
3.8 KiB
C
Raw Permalink Normal View History

2020-06-23 15:53:23 +08:00
#ifndef _TALKWINDOW_H_
2020-06-23 15:27:59 +08:00
#define _TALKWINDOW_H_
#include <windows.h>
#include "../systeminc/chat.h"
#define WM_UPDATE_SKIN 0x8000
#define MAX_TALK_WINDOW_LINE 6
2020-06-23 15:53:23 +08:00
#define TALK_WINDOW_SXO 12 // 对话视窗输出文字的起始x座标
#define TALK_WINDOW_SYO 10 // 对话视窗输出文字的起始y座标
#define TALK_WINDOW_SXI 30 // 对话视窗输入文字的起始x座标
#define TALK_WINDOW_SYI 128 // 对话视窗输入文字的起始y座标
2020-06-23 15:27:59 +08:00
#define SKIN_WIDTH 645
#define SKIN_HEIGHT 155
#define SKIN_KIND 5
2020-06-23 15:53:23 +08:00
#define TALK_WINDOW_MAX_CHAT_LINE 40 // 最大聊天buffer
2020-06-23 15:27:59 +08:00
#ifdef _STONDEBUG_
2020-06-23 15:53:23 +08:00
#define FACE_SYMBOL_NUM 20 // 表情符号数量
#define STORE_SYMBOL_NUM 200 // 记录表情位置数量
#define LINE_HEIGHT 20 // 文字输出时的行距
#define SYMBOL_WIDTH 19 // 表情符号图宽
#define SYMBOL_HEIGHT 19 // 表情符号图高
2020-06-23 15:27:59 +08:00
#endif
extern BOOL g_bTalkWindow;
extern int g_iCursorCount;
#ifdef _STONDEBUG_
2020-06-23 15:53:23 +08:00
typedef struct _tsFaceSymbol{ // 表情符号
2020-06-23 15:27:59 +08:00
HDC hDraw;
HDC hDrawMask;
HBITMAP hbmpMaskBMP;
HANDLE hLoadBMP;
HANDLE hOldLoadBMP;
HANDLE hOldMaskBMP;
BOOL bUse;
2020-06-23 15:53:23 +08:00
char szSymbol[8]; // 符号( :) :( :D ...etc)
char szFaceName[32]; // 档名
2020-06-23 15:27:59 +08:00
}FaceSymbol;
2020-06-23 15:53:23 +08:00
typedef struct _tsStoreSymbol{ // 记录在那里显示表情
2020-06-23 15:27:59 +08:00
BOOL bUse;
HDC hDraw;
HDC hDrawMask;
int x;
int y;
}StoreSymbol;
#endif
typedef struct _tsChatBufferLink{
CHAT_BUFFER ChatBuffer;
_tsChatBufferLink *prev;
_tsChatBufferLink *next;
BOOL bUse;
}ChatBufferLink;
LRESULT CALLBACK TalkWindowProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam);
class CTalkWindow
{
private:
2020-06-23 15:53:23 +08:00
HWND m_hWnd; // 父视窗的 HWND
HWND m_hTalkWindow; // 自己的 HWND
HINSTANCE m_hInstance; // 父视窗的 HINSTANCE
2020-06-23 15:27:59 +08:00
HANDLE m_hSkin[SKIN_KIND]; // SKIN_KIND->0:base 1:up arrow 2:up arrow hit 3:down arrow 4:down arrow hit
HANDLE m_hOldSkin[SKIN_KIND];
HDC m_hdcSkin[SKIN_KIND]; // SKIN_KIND->0:base 1:up arrow 2:up arrow hit 3:down arrow 4:down arrow hit
HDC m_hdcBackBuffer; // backbuffer dc for draw
HBITMAP m_hbmpBackBuffer; // backbuffer of memory for draw
HANDLE m_hbmpOldBackBuffer;
2020-06-23 15:53:23 +08:00
BOOL m_bUpArrowHit; // 上卷按钮是否按下
BOOL m_bDownArrowHit; // 下卷按钮是否按下
BOOL m_bScroll; // 现在是否正处于卷动中
BOOL m_bInit; // 初始化成功或失败
ChatBufferLink *m_pCBLHead; // 指向对话link第一个link的指标
ChatBufferLink *m_pCBLTail; // 指向对话link最后一个link的指标
ChatBufferLink *m_pCBLString; // 指向对话link准备被填入字串的link的指标
ChatBufferLink *m_pCBLView; // 指向要显示在画面上第一行的字串的link指标
ChatBufferLink *m_pCBLViewBottom; // 指向要显示在画面上最后一行的字串的link指标
2020-06-23 15:27:59 +08:00
#ifdef _STONDEBUG_
2020-06-23 15:53:23 +08:00
FaceSymbol m_fsFaceSymbol[FACE_SYMBOL_NUM]; // 表情符号
StoreSymbol m_ssStoreSymbol[STORE_SYMBOL_NUM]; // 记录在那边显示表情
2020-06-23 15:27:59 +08:00
int m_iSymbolCount;
#endif
int m_iline;
public:
CTalkWindow(void);
~CTalkWindow(void);
void Create();
void Update(void);
void LoadSkin(char *szSkinPath);
void DrawSkin(BOOL bShowCursor);
void AddString(char *szString,int color);
HWND GetTalkWindowWND(void) { return m_hTalkWindow;};
void UpArrowHit(BOOL bHit);
void DownArrowHit(BOOL bHit);
void ClearChatBuffer(void);
void Init(HWND hWnd,HINSTANCE hInstance);
void Visible(BOOL flag);
void Release(void);
#ifdef _STONDEBUG_
void ReadFaceSymbolFile(void);
void InitFaceSymbol(COLORREF MaskColor);
void ReleaseFaceSymbol(void);
void SetToFaceSymbolString(char *szDestString,ChatBufferLink *pCBL,int x,int y);
void ShowFaceSymbol(void);
#endif
};
extern CTalkWindow TalkWindow;
#endif