使用炫彩界面库之QQ聊天气泡

炫彩界面库 2019-03-08 09:43:10

使用炫彩界面库提供的聊天气泡组件, 完整代码已上传到CSDN, 等待审核.







//包含炫彩界面库文件
#pragma comment(lib, "XCGUI.lib")
#include "xcgui.h"

class CEditRecv
{
public:
HELE m_hEdit;
USHORT m_style1;
HIMAGE m_hImageAvatar;
HIMAGE m_hImageAvatar2;
HIMAGE m_hImageBubble;
HIMAGE m_hImageBubble2;
void OnExit()
{
if (XC_IsHXCGUI(m_hImageAvatar, XC_IMAGE_FRAME)) XImage_Release(m_hImageAvatar);
if (XC_IsHXCGUI(m_hImageAvatar2, XC_IMAGE_FRAME)) XImage_Release(m_hImageAvatar2);
if (XC_IsHXCGUI(m_hImageBubble, XC_IMAGE_FRAME)) XImage_Release(m_hImageBubble);
if (XC_IsHXCGUI(m_hImageBubble2, XC_IMAGE_FRAME)) XImage_Release(m_hImageBubble2);
}
void Init(HWINDOW hWindow, int left, int top, int width, int height)
{
m_hEdit = XEdit_Create(left, top, width, height, edit_type_chat, hWindow);
XEle_EnableKeyTab(m_hEdit, TRUE);
XEdit_SetRowHeight(m_hEdit, 20);
//XEle_SetPadding(m_hEdit,50, 0, 60, 0);

HFONTX hFont1 = XFont_Create2(L"微软雅黑", 9);
m_style1 = XEdit_AddStyle(m_hEdit, hFont1, RGB(0, 0, 255),TRUE);
m_hImageAvatar = XImage_LoadFile(L"image\\avatar.png"); //头像
m_hImageAvatar2 = XImage_LoadFile(L"image\\logo.png"); //头像
m_hImageBubble = XImage_LoadFileAdaptive(L"image\\bubble.png",20,15,20,15); //气泡
m_hImageBubble2 = XImage_LoadFileAdaptive(L"image\\bubble2.png", 20, 16, 20, 10); //气泡2

// XEdit_AddText(m_hEdit, L"\n");
// XChat_AddChatBegin(m_hEdit, 0, 0, 0x4);
// XEdit_AddText(m_hEdit, L"系统消息:123456\n");
// XChat_AddChatEnd(m_hEdit);

}
void Recv(edit_data_copy_ *data)
{
{
XEdit_AddText(m_hEdit, L"\n");
XEdit_AddChatBegin(m_hEdit, 0, 0, 0x4);
XEdit_AddText(m_hEdit, L"系统消息:123456\n");
XEdit_AddChatEnd(m_hEdit);
}

static int send_left = 1;
if(send_left%2)
XEdit_AddChatBegin(m_hEdit, m_hImageAvatar, m_hImageBubble, 0x1 | 0x8);
else
XEdit_AddChatBegin(m_hEdit, m_hImageAvatar2, m_hImageBubble2, 0x2 | 0x8);
send_left++;
XEdit_AddTextEx(m_hEdit, L"【实习】梦飞(154460336) 2019/1/23 20:30:12\n", m_style1);
int iCurRow = XEdit_GetCurRow(m_hEdit);
XEdit_SetRowHeightEx(m_hEdit, iCurRow-1, 40);
AddData(data);
XEdit_AddChatEnd(m_hEdit);

XEdit_AddText(m_hEdit, L"\n");
XEdit_AutoScroll(m_hEdit);
XEle_RedrawEle(m_hEdit);
}
void AddData(edit_data_copy_ *data)
{
//读取样式表
vector<USHORT> styleTable(data->nStyleCount, edit_style_no);
for (int i = 0; i < data->nStyleCount; i++)
{
HIMAGE hObj = data->pStyle[i].hFont_image_obj;
XC_OBJECT_TYPE ty = XObj_GetTypeBase(hObj);
if (XC_IMAGE_FRAME == ty)
{
//HIMAGE hSrc=XImage_GetImageSrc(hObj);
//const wchar_t* pFile = XImgSrc_GetFile(hSrc);
int iStyle = XEdit_AddStyle(m_hEdit, hObj, 0, FALSE);
styleTable[i] = iStyle;
} else if (XC_FONT == ty)
{
COLORREF color = data->pStyle[i].color;
int iStyle = XEdit_AddStyle(m_hEdit, (HFONTX)hObj, color, data->pStyle[i].bColor);
styleTable[i] = iStyle;
} else if (XC_ELE == ty)
{
if (XC_BUTTON == XC_GetObjectType(hObj))
{
HELE hBtn = XBtn_Create(0, 0, XEle_GetWidth((HELE)hObj), XEle_GetHeight((HELE)hObj), XBtn_GetText((HELE)hObj), m_hEdit);
int iStyle = XEdit_AddStyle(m_hEdit, hBtn, 0, FALSE);
styleTable[i] = iStyle;
}
} else if (XC_SHAPE == ty)
{
if (XC_IsHXCGUI(hObj, XC_SHAPE_GIF))
{
HIMAGE hImageGif = XShapeGif_GetImage(hObj);
//HIMAGE hSrc=XImage_GetImageSrc(hImageGif);
//const wchar_t* pFile = XImgSrc_GetFile(hSrc);
{
HXCGUI hGif = XShapeGif_Create(0, 0, XImage_GetWidth(hImageGif), XImage_GetHeight(hImageGif), m_hEdit);
XShapeGif_SetImage(hGif, hImageGif);
int iStyle = XEdit_AddStyle(m_hEdit, hGif, 0, FALSE);
styleTable[i] = iStyle;
}
}
}
}
XEdit_AddData(m_hEdit, data, styleTable.data(), data->nStyleCount);
}
};

class CEditSend
{
public:
HWINDOW m_hWindow;
HELE m_hEdit;
HELE m_hBtnSend;
HELE m_hBtnImg1;
HELE m_hBtnImg2;
HELE m_hBtnImg3;
HELE m_hButton;
HELE m_hBtnFont1;
HELE m_hBtnFont2;
HELE m_hBtnFont3;
HELE m_hBtnColor1;
HELE m_hBtnColor2;
HELE m_hBtnColor3;
int m_iCurStyle;

CEditRecv* m_pRecv;
void Init(HWINDOW hWindow, int left, int top, int width, int height)
{
m_hWindow = hWindow;
InitBar(left, top);
m_hBtnSend = XBtn_Create(left + width + 10, top, 80, 30, L"发 送", hWindow);
XEle_EnableFocus(m_hBtnSend, FALSE);

m_hEdit = XEdit_Create(left, top, width, height, edit_type_richedit, hWindow);

XEle_EnableKeyTab(m_hEdit, TRUE);
XEdit_EnableAutoWrap(m_hEdit, FALSE);

XEdit_AddText(m_hEdit, L"ABC");

HIMAGE hImage1 = XImage_LoadFile(L"image\\123.png");
HIMAGE hImage2 = XImage_LoadFile(L"image\\logo.png");
XEdit_AddObject(m_hEdit, hImage1);
XEdit_AddObject(m_hEdit, hImage2);

HELE hBtn = XBtn_Create(0, 0, 60, 24, L"cc", m_hEdit);
XEdit_AddObject(m_hEdit, hBtn);

HIMAGE hImageGif=XImage_LoadFile(L"image\\gif.gif");
if (hImageGif)
{
HXCGUI hGif = XShapeGif_Create(0, 0, XImage_GetWidth(hImageGif), XImage_GetHeight(hImageGif), m_hEdit);
XShapeGif_SetImage(hGif, hImageGif);
XEdit_AddObject(m_hEdit, hGif);
}

int iStyle = XEdit_AddStyleEx(m_hEdit, L"微软雅黑",16, 0, RGB(200, 0, 0), TRUE);
XEdit_AddTextEx(m_hEdit, L"123", iStyle);
iStyle = XEdit_AddStyleEx(m_hEdit, L"微软雅黑", 24, 0, RGB(0, 200, 0), TRUE);
XEdit_AddTextEx(m_hEdit, L"123", iStyle);
iStyle = XEdit_AddStyleEx(m_hEdit, L"微软雅黑", 36, 0, RGB(0, 0, 200), TRUE);
XEdit_AddTextEx(m_hEdit, L"123", iStyle);

XEle_RegEventCPP(m_hBtnSend, XE_BNCLICK, &CEditSend::OnBtnClick_Send);
XEle_RegEventCPP(m_hBtnImg1, XE_BNCLICK, &CEditSend::OnBtnClick_img1);
XEle_RegEventCPP(m_hBtnImg2, XE_BNCLICK, &CEditSend::OnBtnClick_img2);
XEle_RegEventCPP(m_hBtnImg3, XE_BNCLICK, &CEditSend::OnBtnClick_img3);
XEle_RegEventCPP(m_hButton, XE_BNCLICK, &CEditSend::OnBtnClick_button);
XEle_RegEventCPP(m_hBtnFont1, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_font1);
XEle_RegEventCPP(m_hBtnFont2, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_font2);
XEle_RegEventCPP(m_hBtnFont3, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_font3);

XEle_RegEventCPP(m_hBtnColor1, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_color1);
XEle_RegEventCPP(m_hBtnColor2, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_color2);
XEle_RegEventCPP(m_hBtnColor3, XE_BUTTON_CHECK, &CEditSend::OnBtnClick_color3);
XEle_RegEventCPP(m_hEdit, XE_EDIT_STYLE_CHANGED, &CEditSend::OnEditStyleChanged);
XWnd_RegEventCPP(hWindow, WM_PAINT, &CEditSend::OnWndDrawWindow);
}
void InitBar(int left, int top)
{
int x = left;
m_hBtnImg1 = XBtn_Create(x, top - 25, 60, 20, L"img1", m_hWindow); x += 65;
m_hBtnImg2 = XBtn_Create(x, top - 25, 60, 20, L"img2", m_hWindow); x += 65;
m_hBtnImg3 = XBtn_Create(x, top - 25, 60, 20, L"gif", m_hWindow); x += 65;
m_hButton = XBtn_Create(x, top - 25, 60, 20, L"button", m_hWindow); x += 65;
m_hBtnFont1 = XBtn_Create(x, top - 25, 60, 20, L"字体12", m_hWindow); x += 65;
m_hBtnFont2 = XBtn_Create(x, top - 25, 60, 20, L"字体24", m_hWindow); x += 65;
m_hBtnFont3 = XBtn_Create(x, top - 25, 60, 20, L"字体36", m_hWindow); x += 65;

m_hBtnColor1 = XBtn_Create(x, top - 25, 60, 20, L"color1", m_hWindow); x += 65;
m_hBtnColor2 = XBtn_Create(x, top - 25, 60, 20, L"color2", m_hWindow); x += 65;
m_hBtnColor3 = XBtn_Create(x, top - 25, 60, 20, L"color3", m_hWindow); x += 65;

XEle_EnableFocus(m_hBtnImg1, FALSE);
XEle_EnableFocus(m_hBtnImg2, FALSE);
XEle_EnableFocus(m_hBtnImg3, FALSE);
XEle_EnableFocus(m_hButton, FALSE);
XEle_EnableFocus(m_hBtnFont1, FALSE);
XEle_EnableFocus(m_hBtnFont2, FALSE);
XEle_EnableFocus(m_hBtnFont3, FALSE);

XEle_EnableFocus(m_hBtnColor1, FALSE);
XEle_EnableFocus(m_hBtnColor2, FALSE);
XEle_EnableFocus(m_hBtnColor3, FALSE);

XBtn_SetType(m_hBtnFont1, button_type_radio);
XBtn_SetType(m_hBtnFont2, button_type_radio);
XBtn_SetType(m_hBtnFont3, button_type_radio);
XBtn_SetGroupID(m_hBtnFont1, 2);
XBtn_SetGroupID(m_hBtnFont2, 2);
XBtn_SetGroupID(m_hBtnFont3, 2);

XBtn_SetType(m_hBtnColor1, button_type_radio);
XBtn_SetType(m_hBtnColor2, button_type_radio);
XBtn_SetType(m_hBtnColor3, button_type_radio);
XBtn_SetGroupID(m_hBtnColor1, 3);
XBtn_SetGroupID(m_hBtnColor2, 3);
XBtn_SetGroupID(m_hBtnColor3, 3);
}
...全文
172 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
炫彩界面库 2019-03-09
  • 打赏
  • 举报
回复

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧