当前位置:网站首页>C language handwritten qq-ai version
C language handwritten qq-ai version
2022-07-29 05:20:00 【CPP programming】

2. The library files
#include "tx_qq.h" #pragma comment(lib, "tx_qq.lib") int main(void) { printf("hello world\n"); return 0; }char ip_addr[32]; int main(void) { printf(" Please input the IP Address : "); scanf_s("%s", ip_addr, sizeof(ip_addr)); return 0; }
The most commonly used network protocol TCP And UDP

What is? IP Address

What is a port

298 service

198 service


SOCKET
serverSocket;
sockaddr_in sockAddr;
#define PORT 2021
#include <winsock.h>
#pragma comment(lib, "ws2_32.lib") int main(void) {
printf(" Please input the IP Address : ");
scanf_s("%s", ip_addr, sizeof(ip_addr));
if (!TCPInit(&serverSocket, &sockAddr, ip_addr, PORT)) { printf(" Network initialization failed !\n"); return -1; }return 0; }void connect() { // Connect to the server side ( Initiate a network connection request ) connect(serverSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr)); printf(" Have access to !\n"); } int main(void) { printf(" Please input the IP Address : "); scanf_s("%s", ip_addr, sizeof(ip_addr)); if (!init()) { printf(" Network initialization failed !\n"); return -1; }printf(" Connecting qiniu customer service ...\n"); connect(); return 0; }HWND hwnd; // Chat window handle int screenWidth; int screenHeight; int msgHeight; // New bubble y coordinate IMAGE imgBg; // Chat window background IMAGE imageArrows[2]; // Arrow of bubble IMAGE imageHeads[2]; // The head of the character // Three buttons Button btnClose; Button btnTitle; Button btnSend; void initUI() { // 1. Create a chat window initgraph(WINDOW_WIDTH, WINDOW_HEIGHT, EW_SHOWCONSOLE); // Create a drawing window setbkmode(TRANSPARENT); // 2. Move window position screenWidth = GetSystemMetrics(SM_CXSCREEN); screenHeight = GetSystemMetrics(SM_CYSCREEN); hwnd = GetHWnd(); // Gets the current window handle SetWindowLong( // Set window properties hwnd, GWL_STYLE, // Set a new window style . //GetWindowLong Get the properties of the specified serial port GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);//WS_CAPTION Window style with title bar MoveWindow(hwnd, screenWidth / 8, 100, WINDOW_WIDTH, WINDOW_HEIGHT, false); // 3. Draw a background picture loadimage(&imgBg, "res/bg.png"); putimage(0, 0, &imgBg); // 4. Load bubble tail and avatar loadimage(&imageArrows[0], "res/left_arrow.jpg", 6, 8, true); loadimage(&imageArrows[1], "res/right_arrow.jpg", 6, 8, true); loadimage(&imageHeads[1], "res/niu.jpg", 44, 51, true); loadimage(&imageHeads[0], "res/rock.jpg", 55, 51, true); // 5. initialization 3 Button
// 5.1 Initialize the close button initButton(&btnClose, "res/close_normal.jpg", "res/close_press.jpg", 32, 33, 0); btnClose.x = WINDOW_WIDTH - 32; btnClose.y = 0; // 5.2 Initialize the title button initButton(&btnTitle, "res/title.jpg", "res/title.jpg", 460, 39, 0); btnTitle.x = 0; btnTitle.y = 0; // 5.3 Initialize the send button initButton(&btnSend, "res/send_normal.jpg", "res/send_press.jpg", 88, 28, 0); btnSend.x = 337; btnSend.y = 784; // 6. Initialize bubble position msgHeight = 120; // 7. Set the text color of the editing area setcolor(BLACK); }
call initUI
int main(void) {printf(" Please input the IP Address : "); scanf_s("%s", ip_addr, sizeof(ip_addr)); if (!init()) { printf(" Network initialization failed !\n"); return -1; }printf(" Connecting qiniu customer service ...\n"); connect(); initUI(); return 0; }
Program , adopt “ Multithreading ” To achieve “ a ”
int main(void) { printf(" Please input the IP Address : "); scanf_s("%s", ip_addr, sizeof(ip_addr)); if (!init()) { printf(" Network initialization failed !\n"); return -1; }printf(" Connecting qiniu customer service ...\n"); connect(); initUI(); DWORD threadID = 0; HANDLE handleSecond = CreateThread(NULL, 0, ThreadFuncRcv, 0, 0, &threadID); HANDLE handleEdit = CreateThread(NULL, 0, msgEditHandle, NULL, 0, &threadID); return 0; }DWORD WINAPI ThreadFuncRcv(LPVOID param) { return NULL; }DWORD WINAPI msgEditHandle(LPVOID param) { return NULL; }DWORD WINAPI msgEditHandle(LPVOID param) { textBox(10, 663, 420, 110, LINE_HEIGHT, WHITE, BLACK, msgEdit, &msgLen); return NULL; }void mainUI() { while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Will cause too many mouse messages , There's chaos !switch (m.uMsg) { case WM_MOUSEMOVE: if (checkButtonSelect(&btnTitle, &m)) { } else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); } else { // Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true;
drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { //btnClose.pressed = false; //drawButton(&btnClose); closegraph(); exit(0); }else if (checkButtonSelect(&btnSend, &m)) { }else if (checkButtonSelect(&btnTitle, &m)) { }break; } } }call mainUI
int main(void) { printf(" Please input the IP Address : "); scanf_s("%s", ip_addr, sizeof(ip_addr)); if (!init()) { printf(" Network initialization failed !\n"); return -1; }printf(" Connecting qiniu customer service ...\n"); connect(); initUI(); DWORD threadID = 0; HANDLE handleSecond = CreateThread(NULL, 0, ThreadFuncRcv, 0, 0, &threadID); HANDLE handleEdit = CreateThread(NULL, 0, msgEditHandle, NULL, 0, &threadID); mainUI(); system("pause");
return 0; }void mainUI() { bool titleDrag = false; // Express “ The title bar ” Whether it is clicked and dragged int titleLastX; // The last position of the window (X coordinates ) int titleLastY; // The last position of the window (X coordinates ) while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Too many mouse messages , There's chaos !switch (m.uMsg) {
case WM_MOUSEMOVE: // Mouse over the title bar if (checkButtonSelect(&btnTitle, &m)) { if (btnTitle.pressed == true) { if (titleDrag == false) { // At this time, the title bar has been clicked and pressed , Preparing to drag titleLastX = m.x; // Record the initial coordinates titleLastY = m.y; titleDrag = true; }else { // At this time, the title bar has been clicked and pressed , Dragging // Calculate the drag offset int offX = m.x - titleLastX; int offY = m.y - titleLastY; moveWindow(hwnd, offX, offY); // According to the drag offset , Move the window } } } else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); } else { // Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { btnTitle.pressed = true; // Click to press the title bar }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }
else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { //btnClose.pressed = false; //drawButton(&btnClose); closegraph(); exit(0); }else if (checkButtonSelect(&btnSend, &m)) { }else if (checkButtonSelect(&btnTitle, &m)) { // Release the title bar button ( Left key up ) btnTitle.pressed = false; titleDrag = false; }break; } } }msg_t msgAll[5]; int msgCount = 0; int currentMsgIndex = -1; // The index of the latest current message void mainUI() { bool titleDrag = false; // Express “ The title bar ” Whether it is clicked and dragged int titleLastX; // The last position of the window (X coordinates ) int titleLastY; // The last position of the window (X coordinates ) while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Too many mouse messages , There's chaos !
switch (m.uMsg) { case WM_MOUSEMOVE: // Mouse over the title bar if (checkButtonSelect(&btnTitle, &m)) { if (btnTitle.pressed == true) { if (titleDrag == false) { // At this time, the title bar has been clicked and pressed , Preparing to drag titleLastX = m.x; // Record the initial coordinates titleLastY = m.y; titleDrag = true; }else { // At this time, the title bar has been clicked and pressed , Dragging // Calculate the drag offset int offX = m.x - titleLastX; int offY = m.y - titleLastY; moveWindow(hwnd, offX, offY); // According to the drag offset , Move the window } } } else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); } else { // Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { btnTitle.pressed = true; // Click to press the title bar }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose);
}else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { //btnClose.pressed = false; //drawButton(&btnClose); closegraph(); exit(0); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = false; drawButton(&btnSend); int ret = send(serverSocket, msgEdit, msgLen, 0); printf(" Has sent %d Characters \n", ret); currentMsgIndex = (currentMsgIndex + 1) % (sizeof(msgAll) / sizeof(msgAll[0]));msgEdit[msgLen] = 0; strcpy(msgAll[currentMsgIndex].msg, msgEdit); memset(msgEdit, 0, sizeof(msgEdit)); msgLen = 0; msgAll[currentMsgIndex].type = SEND; msgCount++; //drawMsg(); drawMsg(msgAll, currentMsgIndex, &msgHeight, imageArrows, imageHeads); }else if (checkButtonSelect(&btnTitle, &m)) { // Release the title bar button ( Left key up ) btnTitle.pressed = false; titleDrag = false; }break; } } }DWORD WINAPI ThreadFuncRcv(LPVOID param) { char buff[4096]; while (1) { int ret = recv(serverSocket, buff, sizeof(buff), 0); if (ret <= 0) return false; buff[ret] = 0; // Add string Terminator printf(" received :%s\n", buff); currentMsgIndex = (currentMsgIndex + 1) % (sizeof(msgAll) / sizeof(msgAll[0])); strcpy(msgAll[currentMsgIndex].msg, buff); msgAll[currentMsgIndex].type = RECEIVE; msgCount++; //drawMsg(); drawMsg(msgAll, currentMsgIndex, &msgHeight, imageArrows, imageHeads); }return NULL; }#include "tx_qq.h" #pragma comment(lib, "tx_qq.lib") int main(void) { printf("hello world\n"); return 0; }
#include <winsock.h> #pragma comment(lib, "ws2_32.lib") #define PORT 2021 SOCKET serverSocket; bool init() { WSADATA wsaData; int err = WSAStartup(MAKEWORD(1, 1), &wsaData); if (err != 0) { return false; }serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockAddr; sockAddr.sin_family = PF_INET; sockAddr.sin_addr.S_un.S_addr = 0; sockAddr.sin_port = htons(PORT); // Bind socket bind(serverSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr)); // Create a listening queue listen(serverSocket, 1); return NULL; }int main() { init(); ...... system("pause"); return 0; }SOCKET clientSock;
void waitAccept() { SOCKADDR client; // The network address of the monitoring end ( Equivalent to the network address of the client ) int nSize = sizeof(client); printf(" Wait for client to initiate connection ...\n"); clientSock = accept(serverSocket, &client, &nSize); printf(" The client has been connected !\n"); }int main(void) { init(); waitAccept(); return 0; }HWND hwnd; // Chat window handle int screenWidth; int screenHeight; int msgHeight; // New bubble y coordinate IMAGE imgBg; // Chat window background IMAGE imageArrows[2]; // Arrow of bubble IMAGE imageHeads[2]; // The head of the character // Three buttons Button btnClose; Button btnTitle; Button btnSend; void initUI() { // 1. Create a chat window initgraph(WINDOW_WIDTH, WINDOW_HEIGHT, EW_SHOWCONSOLE); // Create a drawing window setbkmode(TRANSPARENT); // 2. Move window position screenWidth = GetSystemMetrics(SM_CXSCREEN); screenHeight = GetSystemMetrics(SM_CYSCREEN); hwnd = GetHWnd(); // Gets the current window handle SetWindowLong( // Set window properties
hwnd, GWL_STYLE, // Set a new window style . //GetWindowLong Get the properties of the specified serial port GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);//WS_CAPTION Window style with title bar MoveWindow(hwnd, screenWidth * 0.7 , 100, WINDOW_WIDTH, WINDOW_HEIGHT, false); // 3. Draw a background picture loadimage(&imgBg, "res/bg.png"); putimage(0, 0, &imgBg); // 4. Load bubble tail and avatar loadimage(&imageArrows[0], "res/left_arrow.jpg", 6, 8, true); loadimage(&imageArrows[1], "res/right_arrow.jpg", 6, 8, true); loadimage(&imageHeads[0], "res/niu.jpg", 44, 51, true); loadimage(&imageHeads[1], "res/rock.jpg", 55, 51, true); // 5. initialization 3 Button // 5.1 Initialize the close button initButton(&btnClose, "res/close_normal.jpg", "res/close_press.jpg", 32, 33, 0); btnClose.x = WINDOW_WIDTH - 32; btnClose.y = 0; // 5.2 Initialize the title button initButton(&btnTitle, "res/title.jpg", "res/title.jpg", 460, 39, 0); btnTitle.x = 0; btnTitle.y = 0; // 5.3 Initialize the send button initButton(&btnSend, "res/send_normal.jpg", "res/send_press.jpg", 88, 28, 0); btnSend.x = 337; btnSend.y = 784; // 6. Initialize bubble position msgHeight = 120; // 7. Set the text color of the editing area setcolor(BLACK); }
call initUI
int main(void) { init(); waitAccept(); initUI(); return 0; }int main() { init(); waitAccept(); initUI(); DWORD dwThreadID = 0; HANDLE handleSecond = CreateThread(NULL, 0, ThreadFuncRcv, 0, 0, &dwThreadID); HANDLE handleEdit = CreateThread(NULL, 0, msgEditHandle, NULL, 0, &dwThreadID);
mainUI(); system("pause"); return 0; }DWORD WINAPI ThreadFuncRcv(LPVOID param) { return NULL; }DWORD WINAPI msgEditHandle(LPVOID param) { return NULL; }char msgEdit[1024]; int msgLen; DWORD WINAPI msgEditHandle(LPVOID param) { textBox(10, 663, 420, 110, LINE_HEIGHT, WHITE, BLACK, msgEdit, &msgLen); return NULL; }void mainUI() { while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Will cause too many mouse messages , There's chaos !switch (m.uMsg) { case WM_MOUSEMOVE: if (checkButtonSelect(&btnTitle, &m)) { } else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true;
drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); } else { // Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { //btnClose.pressed = false; //drawButton(&btnClose); closegraph(); exit(0); }else if (checkButtonSelect(&btnSend, &m)) { }else if (checkButtonSelect(&btnTitle, &m)) { }
break; } } }int main(void) { init(); waitAccept(); initUI(); DWORD dwThreadID = 0; HANDLE handleSecond = CreateThread(NULL, 0, ThreadFuncRcv, 0, 0, &dwThreadID); HANDLE handleEdit = CreateThread(NULL, 0, msgEditHandle, NULL, 0, &dwThreadID); mainUI(); return 0; }void mainUI() { bool titleDrag = false; // Express “ The title bar ” Whether it is clicked and dragged int titleLastX; // The last position of the window (X coordinates ) int titleLastY; // The last position of the window (X coordinates ) while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Too many mouse messages , There's chaos !switch (m.uMsg) { case WM_MOUSEMOVE: // Mouse over the title bar if (checkButtonSelect(&btnTitle, &m)) { if (btnTitle.pressed == true) { if (titleDrag == false) { // At this time, the title bar has been clicked and pressed , Preparing to drag titleLastX = m.x; // Record the initial coordinates titleLastY = m.y; titleDrag = true;
}else { // At this time, the title bar has been clicked and pressed , Dragging // Calculate the drag offset int offX = m.x - titleLastX; int offY = m.y - titleLastY; moveWindow(hwnd, offX, offY); // According to the drag offset , Move the window } } } else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); } else { // Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { btnTitle.pressed = true; // Click to press the title bar }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { //btnClose.pressed = false;
//drawButton(&btnClose); closegraph(); exit(0); }else if (checkButtonSelect(&btnSend, &m)) { }else if (checkButtonSelect(&btnTitle, &m)) { // Release the title bar button ( Left key up ) btnTitle.pressed = false; titleDrag = false; }break; } } }msg_t msgAll[5]; int msgCount = 0; int currentMsgIndex = -1; // The index of the latest current message void mainUI() { bool titleDrag = false; // Express “ The title bar ” Whether it is clicked and dragged int titleLastX; // The last position of the window (X coordinates ) int titleLastY; // The last position of the window (X coordinates ) while (1) { MOUSEMSG m = GetMouseMsg(); FlushMouseMsgBuffer(); // It can't be less , Suffix quickly drag the title button at the top , Will cause too many mouse messages , There's chaos !switch (m.uMsg) { case WM_MOUSEMOVE: if (checkButtonSelect(&btnTitle, &m)) { if (btnTitle.pressed == true) { if (titleDrag == false) { // At this time, the title bar has been clicked and pressed , Preparing to drag titleLastX = m.x; // Record the initial coordinates titleLastY = m.y; titleDrag = true; }else { // At this time, the title bar has been clicked and pressed , Dragging
// Calculate the drag offset int offX = m.x - titleLastX; int offY = m.y - titleLastY; moveWindow(hwnd, offX, offY); // According to the drag offset , Move the window } } }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }else {// Check whether the mouse moves from inside the button to outside the button if (btnClose.pressed == true) { // Move the mouse away from the close button btnClose.pressed = false; drawButton(&btnClose); }if (btnSend.pressed == true) { // Move the mouse away from the send button btnSend.pressed = false; drawButton(&btnSend); } }break; case WM_LBUTTONDOWN: if (checkButtonSelect(&btnTitle, &m)) { btnTitle.pressed = true; // Click to press the title bar }else if (checkButtonSelect(&btnClose, &m)) { btnClose.pressed = true; drawButton(&btnClose); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = true; drawButton(&btnSend); }break; case WM_LBUTTONUP: if (checkButtonSelect(&btnClose, &m)) { closegraph();
exit(0); }else if (checkButtonSelect(&btnSend, &m)) { btnSend.pressed = false; drawButton(&btnSend); //int ret = send(serverSocket, msgEdit, msgLen, 0); int ret = send(clientSock, msgEdit, msgLen, 0); printf(" Has sent %d Characters \n", ret); currentMsgIndex = (currentMsgIndex + 1) % (sizeof(msgAll) / sizeof(msgAll[0]));msgEdit[msgLen] = 0; strcpy(msgAll[currentMsgIndex].msg, msgEdit); memset(msgEdit, 0, sizeof(msgEdit)); msgLen = 0; msgAll[currentMsgIndex].type = SEND; msgCount++; //drawMsg(); drawMsg(msgAll, currentMsgIndex, &msgHeight, imageArrows, imageHeads); }else if (checkButtonSelect(&btnTitle, &m)) { // Release the title bar button ( Left key up ) btnTitle.pressed = false; titleDrag = false; }break; } } }DWORD WINAPI ThreadFuncRcv(LPVOID param) { while (1) { char buff[1024]; int ret = recv(clientSock, buff, sizeof(buff), 0); if (ret <= 0) { printf(" The other party is offline \n");
closesocket(clientSock); //TerminateThread(); waitAccept(); }else {buff[ret] = 0; printf("[ received ] %s\n", buff); currentMsgIndex = (currentMsgIndex + 1) % (sizeof(msgAll) / sizeof(msgAll[0])); strcpy(msgAll[currentMsgIndex].msg, buff); msgAll[currentMsgIndex].type = RECEIVE; msgCount++; //drawMsg(); drawMsg(msgAll, currentMsgIndex, &msgHeight, imageArrows, imageHeads); } }return NULL; }Today's sharing is here , Everyone should study hard C Language /C++ yo ~
Welcome to change careers and learn programming partners , Using more information to learn and grow faster than thinking about it yourself !
For preparing to learn C/C++ Programming partners , If you want to better improve your core programming skills ( Internal skill ) From now on !
Organize and share ( Years of learning source code 、 Project practice video 、 Project notes , Introduction to Basics ) Add the group below to get ~
C Language C++ Programming learning communication circle ,QQ Group :763855696 【 Click to enter 】
边栏推荐
- Create a mindscore environment in modelars, install mindvision, and conduct in-depth learning and training (Huawei)
- 【[第一次写博客]Uda课程中的P控制器实现说明】
- 网安学习-内网安全1
- AI应用第一课:C语言支付宝刷脸登录
- TCP三次握手四次挥手
- C how to realize simple factory mode
- Modification of annotation based three-tier project and the way of adding package scanning
- 【文件下载】Easyexcel快速上手
- QML定制TabBar
- 传奇服务端如何添加地图
猜你喜欢

Jackson解析JSON详细教程

Scikit learn -- steps and understanding of machine learning application development

Modification of annotation based three-tier project and the way of adding package scanning

Young freshmen yearn for more open source | here comes the escape guide from open source to employment!

Apache POI implements excel import, read data, write data and export

Google gtest事件机制

Qml类型:MouseArea

开源汇智创未来 | 2022开放原子全球开源峰会 openEuler 分论坛圆满召开

Jackson parsing JSON detailed tutorial

Network Security Learning - Intranet Security 1
随机推荐
JS (foreach) return cannot end the function solution
Learn the first program of database
Qml类型:State 状态
C 语言手写 QQ-AI 版
基于注解的三层项目的改造及添加包扫描的方式
What if excel is stuck and not saved? The solution of Excel not saved but stuck
tmux随笔
什么是_GLIBCXX_VISIBILITY(default)
NumPy基础
The representation of time series analysis: is the era of learning coming?
[sudden] solve remote: support for password authentication was removed on August 13, 2021. please use a perso
【文件下载】Easyexcel快速上手
On AspectJ framework
Apache POI实现Excel导入读取数据和写入数据并导出
缓存穿透、缓存击穿、缓存雪崩以及解决方法
[untitled]
The song of the virtual idol was originally generated in this way!
Unity Metaverse(三)、Protobuf & Socket 实现多人在线
C语言函数实现输出I love you
Webrtc audio anti weak network technology (Part 2)