vc6.0 win32app 数据处理

qq_45368996 2020-05-10 05:37:19
根据arr数组中的数据,绘制成下面两个图。


目前初步搞定了左边的两个图,下面是我的效果图


我对左边图到右边图的处理方法没有什么头绪,希望有大神可以指点一二
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <winuser.h>
#include <math.h>

#define Pi 3.1415926
const int r = 200;

POINT pts[12];
int num = 7;
double max, min;
int color[12][12];
int Ellipse_color[60][60];
int rgb[20][3];
double divide[20];
int flag;

double arr[144]={
0,0.85,0.55,0.68,0.69,0.88,1.00,1.11,1.36,1.38,1.22,0.89,
0.85,0,0.57,0.45,0.51,0.70,0.80,0.89,1.09,1.18,1.09,0.85,
0.55,0.57,0,0.17,0.20,0.37,0.49,0.54,0.63,0.69,0.69,0.57,
0.68,0.45,0.17,0,0.21,0.49,0.61,0.69,0.82,0.90,0.91,0.77,
0.69,0.51,0.20,0.21,0,0.44,0.53,0.62,0.79,0.91,0.85,0.72,
0.88,0.70,0.37,0.49,0.44,0,0.58,0.92,1.02,1.15,1.13,0.95,
1.00,0.80,0.49,0.61,0.53,0.58,0,1.22,1.19,1.24,1.21,1.08,
1.11,0.89,0.54,0.69,0.62,0.92,1.22,0,0.64,1.43,1.32,1.19,
1.36,1.09,0.63,0.82,0.79,1.02,1.19,0.64,0,1.67,1.51,1.36,
1.38,1.18,0.69,0.90,0.91,1.15,1.24,1.43,1.67,0,1.27,1.40,
1.22,1.09,0.69,0.91,0.85,1.13,1.21,1.32,1.51,1.27,0,1.50,
0.89,0.85,0.57,0.77,0.72,0.95,1.08,1.19,1.36,1.40,1.50,0};



void Findmax_min (double* arr);
void Determine_color (double* arr);
void Determine_Ellcolor ();
void Determine_divide ();

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[] = "窗口"; //窗口类名
char lpszTitle[] = "My_Windows"; //窗口标题名

//窗口类的定义
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//窗口类型为默认类型
wndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc
wndclass.cbClsExtra = 0; //窗口类无扩展
wndclass.cbWndExtra = 0; //窗口实例无扩展
wndclass.hInstance = hInstance; //当前实例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //窗口最小化图标为默认图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName = NULL; //窗口中无菜单
wndclass.lpszClassName = lpszClassName; //窗口类名为"窗口示例"

//窗口类的注册
if (!RegisterClass(&wndclass))
{
MessageBeep(0);

return FALSE;
}

hwnd = CreateWindow (
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT, //默认窗口初始x坐标
CW_USEDEFAULT, //默认窗口初始y坐标
CW_USEDEFAULT, //默认窗口初始x大小
CW_USEDEFAULT, //默认窗口初始y大小
NULL, //窗口无父窗口
NULL, //窗口无主菜单
hInstance, //创建此窗口应用程序的当前句柄
NULL //不适用该值
);

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

while (GetMessage(&Msg, NULL, 0, 0))//如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT,返回零
{
TranslateMessage(&Msg);//讲按键消息转换为字符消息
DispatchMessage(&Msg);//以此消息为参数转发给相应的窗口消息处理程序
}

return Msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int i, j;
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hBrush; //定义指向画刷的句柄
HPEN hPen; //定义指向画笔的句柄
RECT rect;
POINT pt;
SIZE size;
TEXTMETRIC tm;

char a[255];

switch (message)
{
case WM_CREATE:
Findmax_min(arr);
Determine_divide();
Determine_color(arr);
//Determine_Ellcolor();

hdc = GetDC(hwnd);
GetClientRect (hwnd, &rect);

pts[0].x = rect.right / 4;
pts[0].y = rect.bottom / 2 - r;
pts[1].x = rect.right / 4 + r / 2;
pts[1].y = rect.bottom / 2 - r * 0.86;
pts[2].x = rect.right / 4 + r * 0.86;
pts[2].y = rect.bottom / 2 - r / 2;

pts[3].x = rect.right / 4 + r;
pts[3].y = rect.bottom / 2;
pts[4].x = rect.right / 4 + r * 0.86;
pts[4].y = rect.bottom / 2 + r / 2;
pts[5].x = rect.right / 4 + r / 2;
pts[5].y = rect.bottom / 2 + r * 0.86;

pts[6].x = rect.right / 4;
pts[6].y = rect.bottom / 2 + r;
pts[7].x = rect.right / 4 - r / 2;
pts[7].y = rect.bottom / 2 + r * 0.86;
pts[8].x = rect.right / 4 - r * 0.86;
pts[8].y = rect.bottom / 2 + r / 2;

pts[9].x = rect.right / 4 - r;
pts[9].y = rect.bottom / 2;
pts[10].x = rect.right / 4 - r * 0.86;
pts[10].y = rect.bottom / 2 - r / 2;
pts[11].x = rect.right / 4 - r / 2;
pts[11].y = rect.bottom / 2 - r * 0.86;

break;

case WM_MOUSEMOVE:
break;

case WM_LBUTTONDOWN:
break;

case WM_KEYDOWN:
break;

case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
GetClientRect (hwnd, &rect);

hPen = CreatePen(PS_SOLID, 1, RGB(211, 211, 211));
SelectObject(hdc, hPen);
hBrush = CreateSolidBrush(RGB(211, 211, 211));
SelectObject(hdc, hBrush);

Ellipse(hdc, rect.right / 4 - r, rect.bottom / 2 - r,
rect.right / 4 + r, rect.bottom / 2 + r);
DeleteObject(hPen);

//hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
//SelectObject(hdc, hPen);
//Polyline(hdc, pts, 12);
sprintf(a, "max = %lf, min = %lf", max, min);
TextOut(hdc, 0, 0, a, strlen(a));

for (i = 0; i < num; i++)
{
sprintf(a, "divide[%d] = %lf", i, divide[i]);
TextOut(hdc, rect.right / 2 - 60, 40 * (i + 1), a, strlen(a));

}


for (i = 0; i < 12; i++)
{
for (j = i + 1; j < 12; j++)
{
if (color[i][j] == 0)
flag = 0;
if (color[i][j] == 1)
flag = 1;
if (color[i][j] == 2)
flag = 2;
if (color[i][j] == 3)
flag = 3;
if (color[i][j] == 4)
flag = 4;
if (color[i][j] == 5)
flag = 5;
if (color[i][j] == 6)
flag = 6;
if (color[i][j] == 7)
flag = 7;
if (color[i][j] == 8)
flag = 8;


hPen = CreatePen(PS_SOLID, 2, RGB(rgb[flag][0], rgb[flag][1], rgb[flag][2]));
SelectObject(hdc, hPen);
MoveToEx(hdc, pts[i].x, pts[i].y, &pt);
LineTo(hdc, pts[j].x, pts[j].y);
DeleteObject(hPen);
}
}



hPen = CreatePen(PS_SOLID, 1, RGB(211, 211, 211));
SelectObject(hdc, hPen);

Ellipse(hdc, rect.right / 4 * 3 - r, rect.bottom / 2 - r,
rect.right / 4 * 3 + r, rect.bottom / 2 + r);

DeleteObject(hBrush);

EndPaint (hwnd, &ps);

return 0;
}

case WM_DESTROY:
PostQuitMessage (0);//发出WM_QUIT消息,终止消息循环
return 0;
}

//缺省采用系统消息默认处理函数
return DefWindowProc (hwnd, message, wParam, lParam);
}

void Findmax_min (double* arr)
{
int i, j;
char a[255];

max = arr[1];
min = arr[1];

for (i = 1; i < 144; i++)
{
if (max < arr[i])
max = arr[i];

if (min > arr[i] && arr[i] != 0)
min = arr[i];
}
}

void Determine_divide ()
{
double t;
int i;

t = (max - min) / 9;

for (i = 1; i <= num; i++)
{
divide[i - 1] = min + t * i;
}
}

void Determine_color (double* arr)
{
int i, j;

rgb[0][0] = 255;
rgb[0][1] = 0;
rgb[0][2] = 0;

rgb[1][0] = 255;
rgb[1][1] = 69;
rgb[1][2] = 0;

rgb[2][0] = 255;
rgb[2][1] = 169;
rgb[2][2] = 71;

rgb[3][0] = 250;
rgb[3][1] = 140;
rgb[3][2] = 15;

rgb[4][0] = 250;
rgb[4][1] = 165;
rgb[4][2] = 0;

rgb[5][0] = 255;
rgb[5][1] = 255;
rgb[5][2] = 0;

rgb[6][0] = 173;
rgb[6][1] = 255;
rgb[6][2] = 47;

rgb[7][0] = 0;
rgb[7][1] = 255;
rgb[7][2] = 127;

rgb[8][0] = 0;
rgb[8][1] = 255;
rgb[8][2] = 0;

for (i = 0; i < 12; i++)
{
for (j = 0; j < 12; j++)
{
if (arr[i * 12 + j] < divide[0])
color[i][j] = 0;
else if (arr[i * 12 + j] < divide[1])
color[i][j] = 1;
else if (arr[i * 12 + j] < divide[2])
color[i][j] = 2;
else if (arr[i * 12 + j] < divide[3])
color[i][j] = 3;
else if (arr[i * 12 + j] < divide[4])
color[i][j] = 4;
else if (arr[i * 12 + j] < divide[5])
color[i][j] = 5;
else if (arr[i * 12 + j] < divide[6])
color[i][j] = 6;
else if (arr[i * 12 + j] < divide[7])
color[i][j] = 7;
else
color[i][j] = 8;
}
}
}

void Determine_Ellcolor ()
{

}
...全文
266 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_45368996 2020-05-11
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
int color[12][12];// 144
144 个颜色 arr[144] 你要 怎么 处理 ?


这个“怎么处理”,我有点不知道该怎么回答

这个是12*12的,左边效果图里不是有12个点嘛。
举个例子,arr[144]里第一行的数据,它的意思就是第一个点到另外12个点的权重,权重越低,线的颜色越红,权重越高,颜色越绿。
第一个点是

然后顺时针分布。
把数据初步转化完后,就完成了左边的效果图。

我现在想根据左边的图或者arr[144]中的数据做出右边的图。
schlafenhamster 2020-05-11
  • 打赏
  • 举报
回复
int color[12][12];// 144
144 个颜色 arr[144] 你要 怎么 处理 ?
qq_45368996 2020-05-11
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster的回复:
三角形也是有重叠的 ? 不会吧 ? 求 最小面积的 三角形
切割三角形 比较难 求直线 交点, 3个 交点 形成 一个 三角形,
我想了一下,网格和三角形结合一下。 三角形不用取最小的,就用12个点构成的大三角形。 如果网格在大三角形,就确定颜色 这样我感觉稍微好一些
qq_45368996 2020-05-11
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
三角形也是有重叠的 ? 不会吧 ? 求 最小面积的 三角形
切割三角形 比较难 求直线 交点, 3个 交点 形成 一个 三角形,


这个有点困难,确实不太好分割最小的三角形,我琢磨一下
schlafenhamster 2020-05-11
  • 打赏
  • 举报
回复
三角形也是有重叠的 ? 不会吧 ? 求 最小面积的 三角形
切割三角形 比较难 求直线 交点, 3个 交点 形成 一个 三角形,
qq_45368996 2020-05-11
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
以左边 切割 出的 三角形 3个边 的颜色 为 brush 填充 这个三角形 ?


谢谢提点。

切割三角形的话,边缘该如何考虑,三角形也是有重叠的,根据颜色来确定填充顺序吗
schlafenhamster 2020-05-11
  • 打赏
  • 举报
回复
以左边 切割 出的 三角形 3个边 的颜色 为 brush 填充 这个三角形 ?
qq_45368996 2020-05-11
  • 打赏
  • 举报
回复
现在搞成这么个样子了。想法是打网格

下面是部分代码,全部的代码太长复制不了。


void Determine_line(RECT rect)//计算线的k,b
{
int i, j;

for (i = 0; i < 12; i++)
{
for (j = i + 1; j < 12; j++)
{
if (pts_r[i].y - pts_r[j].y == 0)
{
line[cnt].k = 0;
line[cnt].b = pts_r[i].y;
line[cnt++].col = color[i][j];
continue;
}

if (pts_r[i].x - pts_r[j].x == 0)
{
line[cnt].k = MAX;
line[cnt].b = pts_r[i].x;
line[cnt++].col = color[i][j];
continue;
}

line[cnt].k = (pts_r[i].y - pts_r[j].y) * 1.0 / (pts_r[i].x - pts_r[j].x);
line[cnt].b = ((pts_r[i].y - line[cnt].k * pts_r[i].x) + (pts_r[j].y - line[cnt].k * pts_r[j].x)) / 2;
line[cnt++].col = color[i][j];
}
}
}

void Determine_Ellcolor (RECT rect)
{
int i, j, t;

//初始化mpts,以圆的中心为坐标原点
for (i = 0; i < 200; i++)
{
for (j = 0; j < 200; j++)
{
mpts[i][j].p.x = - r + j * 2;
mpts[i][j].p.y = r - i * 2;
mpts[i][j].col = -1;
}
}

for (i = 0; i < 200; i++)//太菜了,就直接三重循环了
{
for (j = 0; j < 200; j++)
{
if (mpts[i][j].p.x * mpts[i][j].p.x + mpts[i][j].p.y + mpts[i][j].p.y > r * r)//不在圆中就跳过
continue;
else
mpts[i][j].col = 0;

int term_num = 1;
for (t = 0; t < cnt; t++)//判断线是不是经过小方格,是的话就加上线的颜色,最好平均,得出方块的颜色
{
if (line[t].k == MAX)
{
if (mpts[i][j].p.x == line[t].b)
{
term_num++;
mpts[i][j].col += line[t].col;
}
}
else if (line[t].k == 0)
{
if (mpts[i][j].p.y == line[t].b)
{
term_num++;
mpts[i][j].col += line[t].col;
}
}
else
{
double t1 = ((mpts[i][j].p.x +1) * line[t].k - mpts[i][j].p.y - 1 + line[t].b) * ((mpts[i][j].p.x +1) * line[t].k - mpts[i][j].p.y - 1 + line[t].b);
double t2 = line[t].k * line[t].k + 1;
if (t1 / t2 < 50)//判断线是不是经过小方格的条件,初步是点到直线的距离的平方是否大于50
{
term_num++;
mpts[i][j].col += line[t].col;
}
}

}

mpts[i][j].col = mpts[i][j].col / term_num;//平均
}
}

for (i = 1; i < 199; i++)//对于可能没有经过的方格,要进行处理。初步是加上周围方格的颜色,然后平均
{
for (j = 1; j < 199; j++)
{
if (mpts[i][j].col == 0)
{
mpts[i][j].col = mpts[i][j + 1].col + mpts[i][j - 1].col + mpts[i + 1][j].col + mpts[i - 1][j].col +
mpts[i + 1][j + 1].col + mpts[i + 1][j - 1].col + mpts[i - 1][j - 1].col + mpts[i - 1][j + 1].col;
mpts[i][j].col = mpts[i][j].col / 8;
}
}
}

//坐标变换,换回窗口坐标系
for (i = 0; i < 200; i++)
{
for (j = 0; j < 200; j++)
{
mpts[i][j].p.x = rect.right / 4 * 3 - r + 2 * j;
mpts[i][j].p.y = rect.bottom / 2 - r + 2 * i;
}
}
}





qq_45368996 2020-05-10
  • 打赏
  • 举报
回复
引用 1 楼 universe87 的回复:
厉害了!厉害了!


有什么想法吗,求建议
universe87 2020-05-10
  • 打赏
  • 举报
回复
厉害了!厉害了!
程序名称:RadASM 版 本:2.2.1.9 汉 化 人:cao_cong 联系方式:cao_cong_hx@yahoo.com.cn 使用说明: 此汉化增强版根据RadASM作者网站正式发布的 2.2.1.9 版汉化,可对中文完美支持,可编译DOS下的程 序并可看到运行结果。这个版本增强了对 C 编译器的支持,增加了从已有具体的更新内容请大家参考安 装目录下的 WhatsNew.txt。增强版中附带的 MASM32 更新为 10.0,我在其中放了开发驱动的相关文件 ,安装后即可使用,可以直接开发驱动程序。我还写了一篇《如何配置RasASM来支持你的编译器》的文 章放在安装包中,希望能给大家在为 RadASM 配置新的编译器时提供一点参考。汉化增强版适合于未安 装Masm32及Viusual C++的用户,添加了RadASM的帮助文件及Win32 Api等帮助文件。RadASM可通过添加 ini文件来支持别的语言,可以自己配置ini文件来支持你所使用的编程语言。此汉化增强版根据网友 aboil的建议,添加了我最新修正的 OllyDBG 汉化第二版,选择安装后路径会自动设置好,直接可在 RadASM中调试你编译后的程序。 注意: 1、如果你曾安装了以前版本的RadASM汉化增强版,请不要卸载,只需覆盖安装即可。安装版本 除了你选择了注册文件类型会在你的注册表中添加数据(可到ICON目录下查看具体添加内容,如果选择卸 载同样会删除这些数据)外,不会产生别的垃圾文件,所以没必要卸载。因为卸载时可能把你安装后新建 的一些工程一并删除,请谨慎使用卸载(默认在Masm和Cpp中新添加的工程不会被删除,但还是小心一点 比较好)。若必须要卸载的话,请把你安装后新建的工程及配置文件备份到其它目录,再执行卸载! 2、这个版本我去掉了 TASM 5.0 的安装文件(主要为减小安装包体积),若要编译Tasm的程序的 话请大家自己去下载TASM。 3、考虑到在有的未装VC的机器上测试时,编译时会提示找不到MSPDB60.DLL的错误,我在这个 安装版本中复制了一个VC的MSPDB60.DLL到你的系统目录,因为有些程序可能会用到它,所以在卸载时未 作处理。你要是不需要的话,可到你的系统目录手工删除(建议保留这个文件)。 4、如果你第一次编译 MASM 的 Dos App,可能会在构建的时候提示找不到 *.obj 文件,其实 这时 *.obj 文件已经生成了。简单的方法就是重新启动一下 RadASM,再编译、构建时就正常了。 增强版主要更新: 1、包含了编译 Win32 Asm 、C++ 的必须文件及我汉化的 OllyDBG(安装时需选择OllyDBG、 Masm32及VC6.0这几个组件)。 2、添加了用于RadASM关联汇编文件的图标(安装时需选择文件关联组件),安装后你可在安装目 录下的Icon目录内使用你喜欢的图标来定制关联文件的显示图标(替换图标时请把你需要替换的图标更名 为原目录下的对应图标名称)。 3、添加了由怜香整理的8086汇编教程、Venjiang整理的 Win32 汇编教程、陈国强整理的Win32 API参考(VB描述)、www.vcok.com整理的C语言教程及经典的 Windows 程序设计电子书。 4、添加了一个Cpp的对话框程序模板文件。 5、添加了一个Masm的注册机程序示例,位于Masm的工程目录下的ASMkeyg文件夹内,推荐大家 看一下。
程序名称:RadASM 版 本:2.2.1.9 汉 化 人:cao_cong 联系方式:cao_cong_hx@yahoo.com.cn 使用说明: 此汉化增强版根据RadASM作者网站正式发布的 2.2.1.9 版汉化,可对中文完美支持,可编译DOS下的程序并可看到运行结果。这个版本增强了对 C 编译器的支持,增加了从已有具体的更新内容请大家参考安装目录下的 WhatsNew.txt。增强版中附带的 MASM32 更新为 10.0,我在其中放了开发驱动的相关文件,安装后即可使用,可以直接开发驱动程序。我还写了一篇《如何配置RasASM来支持你的编译器》的文章放在安装包中,希望能给大家在为 RadASM 配置新的编译器时提供一点参考。汉化增强版适合于未安装Masm32及Viusual C++的用户,添加了RadASM的帮助文件及Win32 Api等帮助文件。RadASM可通过添加ini文件来支持别的语言,可以自己配置ini文件来支持你所使用的编程语言。此汉化增强版根据网友aboil的建议,添加了我最新修正的 OllyDBG 汉化第二版,选择安装后路径会自动设置好,直接可在RadASM中调试你编译后的程序。 注意: 1、如果你曾安装了以前版本的RadASM汉化增强版,请不要卸载,只需覆盖安装即可。安装版本除了你选择了注册文件类型会在你的注册表中添加数据(可到ICON目录下查看具体添加内容,如果选择卸载同样会删除这些数据)外,不会产生别的垃圾文件,所以没必要卸载。因为卸载时可能把你安装后新建的一些工程一并删除,请谨慎使用卸载(默认在Masm和Cpp中新添加的工程不会被删除,但还是小心一点比较好)。若必须要卸载的话,请把你安装后新建的工程及配置文件备份到其它目录,再执行卸载! 2、这个版本我去掉了 TASM 5.0 的安装文件(主要为减小安装包体积),若要编译Tasm的程序的话请大家自己去下载TASM。 3、考虑到在有的未装VC的机器上测试时,编译时会提示找不到MSPDB60.DLL的错误,我在这个安装版本中复制了一个VC的MSPDB60.DLL到你的系统目录,因为有些程序可能会用到它,所以在卸载时未作处理。你要是不需要的话,可到你的系统目录手工删除(建议保留这个文件)。 4、如果你第一次编译 MASM 的 Dos App,可能会在构建的时候提示找不到 *.obj 文件,其实这时 *.obj 文件已经生成了。简单的方法就是重新启动一下 RadASM,再编译、构建时就正常了。 增强版主要更新: 1、包含了编译 Win32 Asm 、C++ 的必须文件及我汉化的 OllyDBG(安装时需选择OllyDBG、Masm32及VC6.0这几个组件)。 2、添加了用于RadASM关联汇编文件的图标(安装时需选择文件关联组件),安装后你可在安装目录下的Icon目录内使用你喜欢的图标来定制关联文件的显示图标(替换图标时请把你需要替换的图标更名为原目录下的对应图标名称)。 3、添加了由怜香整理的8086汇编教程、Venjiang整理的 Win32 汇编教程、陈国强整理的Win32 API参考(VB描述)、www.vcok.com整理的C语言教程及经典的 Windows 程序设计电子书。 4、添加了一个Cpp的对话框程序模板文件。 5、添加了一个Masm的注册机程序示例,位于Masm的工程目录下的ASMkeyg文件夹内,推荐大家看一下。 060621新增: 1、把RadASM作者另一个资源编辑工具ResEd的汉化版也打包放在安装目录下,虽然RadASM自带有可视化的资源编辑器,但这个ResEd工具有些时候还是很有用的,你可以可视化的编辑其他的资源脚本,很方便。这个工具我以RadASM网站上的最新版本为基础汉化的。 2、从WinASM中提取了两个模板(MDI和SDI模板),放了一个简单的注册机模板。 3、放了一个可以在对话框程序中添加调整对话框控件大小代码的插件 KSresizer,已汉化并配置好了。把作者提供的例子程序也放在了MASM的工程目录下,有兴趣的可以看看。 4、把帮助文件更新为 RadASM 官方主页上的最新版本。 061207新增: 1、添加由 drizz 写的两个库文件: (1)、Stdlib.lib:包含一些对文件、注册表、INI文件、字串等一些常用的操作函数,可以直接调用,以减少编程工作量。 (2)、cryptohash.lib:密码学算法库,包含大部分常用密码学算法。 这两个库我都在RadASM中添加了相应的API文件,方便写代码时自动列出函数。 081218: ResEd 更新为 2.2.0.0d 汉化版,支持把 .rc 文件中的对话框部分导出为 RadASM 的 dlg 格式文件及添加 XP 界面等。 Language目录下的RadCHS.lng和RadENG.lng分别是简体中文和英文语言文件,可在RadASM的选项->语言菜单中选择。RadLNG.exe是用来查看语言文件的工具。 091209: 1、主程序汉化版本更新为 2.2.1.8f,同时更新语言文件。 2、ResEd 汉化版本更新为 2.2.0.5b。 3、除汉化了更新的插件外,重新汉化了 AdvEdit.dll(高级编辑) 插件。 091228: 1、主程序汉化版本更新为 2.2.1.9。 2、RadASM.ini 中的 [Accept] 段下添加了 DontAsk=1,这样执行编译好的程序时不会再有提示(类似与 2.2.1.5 及以前版本)。如仍需要执行程序时提示的话,请把添加的 DontAsk=1 这一行删除。 一点建议: 1、建议把RadASM安装在根目录下,如 D:\RadASM。 2、如果在编译 Win32 Asm 程序时有问题,一个简单的方法就是把 RadASM 目录下的 Masm32 剪切到 RadASM 安装的根目录,如 D:\Masm32,再在 RadASM 中重新设置路径。 3、RadASM 中添加的插件 CodeTemplates.dll 是用于在编辑代码时输入定义好的代码模板的,默认调出方式是Ctrl+J,可根据Addins\Help目录下的帮助文件CodeTemplates.Txt(我已翻译过)来自己配置需要的模板。 4、格式化代码的插件(TabAddin.dll)我根据其帮助文档和自己的测试结果进行了汉化。本来想把这个插件的帮助文档一起汉化的,可实在没太多时间,只能让大家根据汉化插件的界面来对照英文的帮助文档来理解此插件的功能,造成不便的地方还望大家原谅!简单说一下此插件汉化后菜单上各个按钮的功能:“左移”:把选中的代码左移一个制表符;“右移”:选中代码右移一个制表符;“规范化”:把选中的排列不整齐的代码按照选项中的设置进行排列;“标准化”:把你选中的代码按选项中的设置进行整理,使代码具有更好的可读性;“显示选项”:显示设置选项。 声明: 1、此汉化软件是免费软件,请在转载时保留其内容的完整性! 2、此软件仅用于个人学习使用,禁止用于商业用途,否则后果自负! HA.RadASM.v2.2.1.9.cao_cong.exe 的 MD5 值: 7BE397D8B107D68286EA07964DEF8A61
1,01.zipMFC Extension LibraryMFC扩展界面库, 使用Visual C++ 6.0(15KB)2,02.zipVisual Studio style UIVisual Studio风格的界面效果(15KB)3,03.zipInternet Explorer 4 style UIIE4.0风格的界面效果(29KB)4,04.zipOutlook Style UIOutlook风格的界面效果(16KB)5,05.zipDynamic child window repositioning动态改变对话框的大小, 对话框中的控件相应改变(15KB)6,06.zipEnhanced list control增强的List控件(43KB)7,07.zipCDialog using animated control在CDialog中使用动画(12KB)8,08.zipOpen Dialog with Bitmap Preview位图预览的打开文件对话框(43KB)9,09.zipStandard file open dialog with preview标准位图预览的打开文件对话框(24KB)10,10.zipBitmap Dialog Class位图对话框类(13KB)11,11.zipClass for Browsing shell namespace with your own dialog显示目录的树型结构, 可用于目录的选择(31KB)12,12.zipUsing ON_UPDATE_COMMAND_UI with dialogs在对话框中使用ON_UPDATE_COMMAND_UI(13KB)13,13.zipUsing ON_UPDATE_COMMAND_UI with dialogs (2)使用ON_UPDATE_COMMAND_UI(11KB)14,14.zipModeless child dialog in a Main Dialog with corrected tab order非模式对话框在主对话框中的TAB顺序(21KB)15,15.zipCostumizing CFileDialog定制的CFileDialog(22KB)16,16.zipAttaching Elements to Borders一个可以在对话框中改变按纽位置、大小的容器(26KB)17,17.zipScrolling credits dialog滚动信用对话框(12KB)18,18.zipColor Dialog with Persistent Custom Colors对话框继承了上一次的颜色风格(12KB)19,19.zipA Base Dialog Class for Modal/Modeless Dialog with Custom Background Color自定义背景的对话框(13KB)20,20.zipParse IP addresses解析IP地址(12KB)21,21.zipParse phone fields解析电话区域(11KB)22,22.zipChanging the default file open/save dialogs in an MFC doc/view application初始化对话框和支持动态数据交换(DDX)(15KB)23,23.zipDialog with Splash Screen Example Code...Splash对话框的例子(18KB)24,24.zipClass to select directory选择目录的类(13KB)25,25.zipClass to select directory (Enhancements)增强的选择目录的类(12KB)26,26.zipDirectory Picker Dialog目录采集对话框(42KB)27,27.zipSimple way to change dialog's background and text colors改变对话框背景颜色和文字颜色的简单途径(11KB)28,28.zipA Simple Dialog Layout Manager一个简单的对话框设计管理器(19KB)29,29.zipUsing Buttons on a Dialog Bar with CCmdUI通过CCmdUI在对话框条中使用按纽(19KB)30,30.zipDisplay help for dialog controls on the status bar在状态条中显示对话框中控件的帮助信息(12KB)31,31.zipDragging a dialog by clicking anywhere on it点击任何地方拖动对话框(11KB)32,32.zipSplash screen with text on it that uses its own thread通过自己的线程在Splash对话框中显示文字(136KB)33,33.zipCreating an expanding dialog创建一个可扩展的对话框(15KB)34,34.zipExpanding/Contracting Dialog Box扩展/缩小对话框(24KB)35,35.zipCFileDialog class that only displays folders让CFileDialog只显示目录(很有用)(2KB)36,36.zipFolder Browsing Dialog目录浏览对话框(3KB)37,37.zipFont dialog with custom text preview & color字体对话框中增加字体和颜色的预览(12KB)38,38.zipEmbedding an HTML Help window into a dialog嵌入一个超文本(HTML)的帮助窗口到对话框中(22KB)39,39.zipDialog which can be used as MDI child window使用MDI子窗口的对话框(13KB)40,40.zipConvert modal dialogs to modeless将模式对话框转换成非模式对话框(12KB)41,41.zipNetscape 4.x Preferences Dialog类似Netscape 4.x参数选择的对话框(7KB)42,42.zipHandling OnUpdate() processing for menu itemsOnUpdate()处理菜单项(5KB)43,43.zipOptions Tree Dialog树状的配置对话框(25KB)44,44.zipCustomizing the font dialog定制的字体对话框(4KB)45,45.zipSizable dialogs at its easiest轻松改变对话框的大小(5KB)46,46.zipA Snap Size Dialog Class一个捕获对话框大小的类(5KB)47,47.zipCSplitterWnd in a Dialog based Application一个基于对话框的应用(6KB)48,48.zipSplash Screen with 256 color support支持256色的Splash对话框(7KB)49,49.zipSubselection Dialog 子项选择的对话框(5KB)50,50.zipSwitching dialog boxes in a dialog-based application在基于对话框应用中切换对话框(5KB)51,51.zipBetter Tip of the Day dialog典型的Did you konw...对话框(26KB)52,52.zipToolbars and Statusbars on Dialogs在对话框中增加工具条和状态条(7KB)53,53.zipTooltips in modal dialog boxes在模式对话框中实现工具提示(6KB)54,54.zipTooltips for dialog controls实现对话框控件的工具提示(4KB)55,55.zipTransparent Dialog透明的对话框(5KB)56,56.zipViewing Dialog Template Resources at Runtime运行时看对话框模板资源(5KB)57,57.zipAlternative Wizard Dialog一个Wizard对话框, 在安装程序中也有用(5KB)58,58.zipAVLTree实现AVL(Addison-Velski and Landis)树结构(5KB)59,59.zipTemplate class to manipulate bits of undefined type一个操作未知类型的模板库(5KB)60,60.zipBlowfish EncryptionBlowfish加密算法加密(4KB)61,61.zipBlowfish encryption classBlowfish加密类(5KB)62,62.zipExpression Evaluation数学公式识别类(5KB)63,63.zipA Y2.038K-Safe Replacement for CTimeCTime的替换类(5KB)64,64.zipIterating through List Containers关于List容器的话题(5KB)65,65.zipLexical Analyser词汇分析(8KB)66,66.zipLocales and Facets in Visual C++VC++的许多细节话题(10KB)67,67.zipA Generalized Parsing Class for MFC一个普通的MFC解析类(5KB)68,69.zipCreating Singleton Objects using Visual C++使用VC++创建一个单独的对象(9KB)69,69.zipSmart Pointers and other Pointer classes指针类(5KB)70,70.zipSortable CObArray class对CObArray类排序(5KB)71,71.zipSortable CObList class对CObList类排序(6KB)72,72.zipExtension to the STL find_if and for_each扩充STL库(5KB)73,73.zipChange from child window to popup window (and back) 将一个子窗口改成弹出式窗口(5KB)74,74.zipRestoring Window Position With Multiple Monitors在多层监视器中恢复窗口的位置(5KB)75,75.zipTransparent Window透明的窗口(6KB)76,CenterMDIWnd_demo.zipCenter CMDIChildWnds in the client area of the main frame window(151KB)77,TabbedMDI.zipA variation on the MDI that indicates the open child windows in a tab control. (400KB)78,AdvancedPrev.zipA simple class that helps provide faster Print Preview within MFC Doc/View applications(38KB)79,mditab.zipA dockable bar containing a tabbed list of open windows(91KB)80,CloseUnusedDocs_src.zipClosing unused MDI documents with 1 line of code(2KB)81,graphfx_demo.zipA Doc/View framework for displaying graphical data(192KB)82,WindowsManager.zipImplementing "Windows..." dialog(39KB)83,MultiMRUList_src.zipThis article describes how to maintain the separate MRU list for each document type that is needed in some applications(26KB)84,MultiTop.zipAllows an application to have multiple top-level windows. (22KB)85,PersistFrames.zipA collection of classes that allows MFC SDI and MDI applications to remember the positions and sizes of their main frame and child frame windows. (71KB)86,step0.zipA series of articles that resulted from experimenting with adding Drag and Drop features to my existing application. (16KB)87,undo.zipEasily add Undo/Redo to your CDocument/CView Based Applciation(2KB)88,PropertyView.zipA "Property Sheet"-like view class for MFC (108KB)89,DocViewWTL.zipA library that provides the easiest way to get loosely coupled components. (156KB)90,Dialog2.zipA step by step tutorial showing how to create your first windows program using MFC(112KB)91,MyMDIApp.zipA brief step-by-step tutorial that demonstrates creating an SDI and MDI based applications using the MFC Doc/View architecture.(54KB)92,sditutorial_demo.zipA brief step-by-step tutorial that demonstrates creating an SDI based application that does not use the MFC Doc/View architecture.(15KB)93,QuickWin.zipRedirect stdin, stdout and stderr into a window(125KB)94,GradientTitleBar.zipThis article shows you how to give your Win95/NT4 modeless dialogs a Win98/W2K like gradient title bar.(42KB)95,MsgBoxDemo.zipThe system Message Box that is closed atuomatically after some time(21KB)96,step1.zipSimple step by step article explaining how to create a modeless dialog box as child window.(21KB)97,step2.zipSimple step by step article explaining how to create a modeless dialog box as sibling of the app's main window.(22KB)98,ResizableDialog.zipA CDialog derived class to implement resizable dialogs with MFC (98KB)99,CenterAnywhere_demo.zipThis is a good replacement for CWnd::CenterWindow() that works. (43KB)100,CardDialog.zipA auto-sizing dialog used to store and display smaller child dialogs(22KB)101,scrolling_credits.zipA Scrolling Credits Dialog(209KB)102,snapdialog.zipDialog class that implement a snap-to-screen-border feature like Winamp(16KB)103,messagebox.zipA class which encapsulates MessageBoxIndirect.(18KB)104,rfldlg.zipThis article demonstrates how to add a recent file list to a dialog based application(25KB)105,dialogspl_demo.zipSplash screens are not only for Doc/View based applications(142KB)106,CClockCtrl_src.zipA Freeware MFC class to display an analog clock.(17KB)107,ChildDlg.zipChild Dialog (Sub Forms)(29KB)108,CIconDialog_src.zipA Freeware MFC dialog class to select an icon.(12KB)109,CPushPinFrame_src.zipA Freeware MFC PushPin property page dialog class.(19KB)110,showhide.zipA neat way to show/hide groups of related controls(13KB)111,ResizeCtrl.zipA resize control to implement resizable dialogs with MFC(38KB)112,DDXFile_src.zipA Freeware DDX routine for selecting a filename.(29KB)113,DynWindow_src.zipDescribes a method to implement resizable child windows.(108KB)114,DynamicDialog.zipCreate dialogs dynamically, and easily, without the need for a dialog resource script.(40KB)115,DlgExpand.zipThis article shows gives you the ability to make your dialogs expand or contract, depending on how much information the user wishes to view(15KB)116,TipDemo.zipImproved Tip-of-the-Day Dialog(149KB)117,layoutmgr.zipA framework to provide automatic layout control for dialogs and forms(101KB)118,MainWndPlacement.zipSave/restore the main window size at application exit/startup with a single function call in MDI, SDI and dialog based applications.(29KB)119,sizer_demo.zipAn article on extendable layout management classes(27KB)120,Splasher_src.zipAn improved splash screen component for MFC.(62KB)121,StackDialog.zipCreating a stacked dialog such as Netscape's 'Preferences' dialog(22KB)122,bitmappreviewdialog_src.zipThis article describes a completely object oriented standard file open dialog with preview.(12KB)123,subselect_dialog.zipSubselection Dialog(123KB)124,TabDialog.zipA docking dialog that auto-expands when the mouse passes over it(35KB)125,TcxMsgBox.zipTCX Message Box (derived from CWnd)(35KB)126,ToolTips.zipA demonstration of how to show tooltips in modal dialog bozes(23KB)127,UpdateModalDlg_demo.zipHow to update a modal dialog contents using a callback function(17KB)128,WinampWnd_demo.zipAn article discussing a Plugin for Nullsoft Winamp which looks and behaves like the Winamp UI.(43KB)129,Skins.zipA mini library to build Bitmap based skinnable apps.(174KB)130,FaderWnd_demo.zipAn MFC class to fade any window with only one line of code.(28KB)131,Win2kFileDlg.zipEver wanted to use the new Office 2000 file dialogs on Win 95/98/NT/Me, including the file previewing? Well now you can.(76KB)132,win2000fd.zipHow to show the new Common File Dialog in MFC Apps in Windows 2000(36KB)133,Wizard2000.zipCreate Windows 2000 style Wizards with white backgrounds(109KB)134,FileExportDialog.zipAdding filters to the Open File dialog(24KB)135,customize_dialog.zipCustomizing the Windows Common File Open Dialog(15KB)136,SelectFolder.zipThe windows 'Select Folder' dialog with some extra functionality(41KB)137,animate_dlg.zipAnimated Icon on Titlebar of a Dialog based Application(34KB)138,BmpDlg.zipBitmap Dialog Class(52KB)139,namespace.zipClass for Browsing shell namespace with your own dialog(78KB)140,OnUpdate_demo.zipHandling OnUpdate() processing for menu items(10KB)141,DialogUpdates.zipUsing ON_UPDATE_COMMAND_UI with all controls in a Dialog(18KB)142,override.zipCustomizing the font dialog(4KB)143,cmdlg.zipCostumizing CFileDialog(31KB)144,custom_open.zipCustom Open File or Save as Dialog(25KB)145,ColorFormView.zipCFormView Class with Custom Background Color(33KB)146,Banner.zipAnimated Background Banner(88KB)147,MDIClient.zipA Custom MDI Client Class(42KB)148,html_help_view.zipHTML Help In CView Window(5KB)149,MDIPreview_demo.zipPrint Preview in MDI Frame(20KB)150,zoom_scale.zipAdd Zoom and Scale Capabilities to CScrollView(338KB)151,autopan.zipAuto-Panning Windows(44KB)152,autopan2.zipMicrosoft Internet Explorer like Intellimouse AutoScroll(42KB)153,intellipan.zipIntellimouse panning (improved Auto-Panning Windows)(5KB)154,intellipan2.zipIntellimouse panning 2 (A universal Auto-Panning solution)(12KB)155,bigscroll.zipBreaking the CScrollView 32768 size limitation with CBigScrollView(90KB)156,variable_splitter.zipVariable splitter views(58KB)157,TabbedViews_src.zipTabbed Views(78KB)158,animate_icon_src.zipAnimated Icon on Titlebar of a window(48KB)159,msdi1632.zipMultiSingle (MSDI) Document interface(77KB)160,msdidao.zipMultiSingle (MSDI) Document interface with DAO doc(508KB)161,ScreenSwitch_demo.zipMultiple Views Using SDI(26KB)162,multiview.zipMultiple views for a single document (MDI) 3(86KB)163,WinMenu_demo.zipHome made MDI windows list in Window menu(21KB)164,SdiMulti.zipSDI Interface with Multi-Views and Multi-Splitters(88KB)165,DocViewInDll_demo.zipSeparating the views of an MDI application into different DLLs(60KB)166,MultiFrame_demo.zipMultiple frame windows in SDI application(76KB)167,mrcext.zipResizable Docking Window(862KB)168,sizing.zipSizing TabControlBar(46KB)169,devstudio.zipAnother DevStudio-alike DialogBar(43KB)170,docking.zipResizable Docking Window 2(98KB)171,simple_splitter.zipGeneral Purpose Splitter Class(43KB)172,cxysplitter.zipA pair of splitter classes used in dialogbox(21KB)173,dynamic_splitter.zipSplitter Window - "True" dynamic splitter window(52KB)174,outlook_style.zipOutook Style Splitter Bar(59KB)175,minsplit.zipMinimum size splitter(36KB)176,scrbsplt.zipRemoving and reapplying splitter windows on-the-fly in Scribble with a custom splitter window class(157KB)177,switchviews_in_splitter.zipSwitching views in splitter panes (SDI)(44KB)178,rulers_src.zipImplementing Rulers inside of Splitter Panes(5KB)179,dynamic1.zipDifferent Views In Dynamic Splitter(202KB)180,dialogstartupanimation.zipThis sample shows you how to create dialog startup animation like that of Window 98'menu(18KB)181,yqeditgridcontrol.zipa grid control that enable keyboard input. That is to say, you can write data in it. (31KB)182,switchmdiviews.zipThis sample shows you how to switch from one view to the other in a MDI splitter window application(31KB) 183,yqmdireplaceview.zipThis sample shows you how to replace different views in a MDI splitter window application(36KB) 184,switchview.zipThis sample shows you how to switch from one MDI window to another by using the "Ctrl Tab" key.(29KB) 185,filterreturnkey.zipThis sample shows you how to trap, filter the ENTER and ESCAPE key of a dialog box (17KB)186,filterkey.zipThis sample shows you how to filter a certain key and mask that key(18KB)187,editenter.zipThis sample shows you how to use RETURN key to switch among edit controls of a dialog box(18KB)188,dialoghook.zipThis sample shows you how to set keyboard hook function of a dialog box to trap RETURN ,ESCAPE key.(17KB) 189,contexthelp.zipThis sample shows you how to create context sensitive help of a control of a dialog box(26KB) 190,traparrokey.zipThis sample describes how to trap arrow keys in an control of a dialog box (18KB)191,yqadvancedbtn.zipOwner draw hot button support both bitmap and icon, with flat, gripper property. (108KB)192,drawlistbo.zipOwner draw CTabCtrl with flat gripper property (40KB)193,startupanimation.zipCreate Window startup animation, including several kind of animation style, very interesting(23KB) 194,flatlistbox.zipusing a unique way to implement flat attribute( other than those published on the codegurn), as well as hot ,gripper attribute.(21KB) 195,yqhoteditctrl.zipCreate edit control with Hot , flat, gripper. separator attributes (21KB)196,3dmdishadow.zipCreate 3D shadow of a MDI frame windows(32KB) 197,3dsdishadow.zipCreate 3D shadow of a SDI frame windows(29KB)198,getfile.zipA DDX routine for MFC to retrieve filenames(29KB)199,splasher.zipAn improved splash screen component for MFC(62KB)200,pushpin.zipA pushpin button MFC class(12KB)201,getfolder.zipA DDX routine for MFC to retrieve folders(30KB)202,ntray.zipAn MFC class to manipulate tray icons(17KB)203,hlinkctrl.zipAn MFC class to support hyperlinks on windows and dialogs(16KB)204,icondialog.zipAn icon selection dialog class for MFC(12KB)205,pushpinframe.zipAn MFC class to provide property dialogs ala Developer Studio(16KB)206,mappin.zipAn MFC class to implement map pins(286KB)207,iconcombobox.zip2 MFC classes to implement icon selection combo boxes(19KB)208,menuex_demo.zipImplementing an Ownerdrawn menu (35KB)209,bcmenu261.zipCool Owner Drawn Menus with BitmapsVersion 2.61(70KB)210,dynmenu.zipSome handy functions for adding and deleting submenus and menuitems in runtime (16KB)211,gradientmenu.zipCreate Popup menus in MFC with a gradient and text on the left side (89KB)212,menuicon_demo.zipGive your apps a unique look by adding a logo to your menu(48KB)213,bcgbappwizard.zipBCGControlBar library version 4.6(2121KB)214,mpcstatusbar.zipAn enhanced CStatusBar to easily and dynamically add/remove controls on a status bar (48KB)215,textonlystatusbar.zipAn easy to use and implement Text Only Status Bar with Tool tip text extracted from the status bar panes. (39KB)216,progressbar.zipShowing progress bar in a status bar pane(33KB)217,sizecbar_src.zipDevStudio-like docking window (64KB)218,sizing_tabct1_demo.zipCreates a dockable and resizable control bar. (46KB)219,dockview.zipA fairly simple way to incoporate views into sizing control bars(69KB)220,spin_slide_toolbar.zipHow to create toolbars with spinners and/or sliders(48KB)221,tearoffrebars_prj.zipThis article Implements the functionality similar to the Office 2000 toolbars(26KB)222,flatbar.zipA flat toolbar implementation that does not require the updated common controls library from Internet Explorer. (197KB)223,toolbar_droparrow_demo.zipDemonstrates how to use the new toolbar styles to add dropdown arrows to toolbar buttons (28KB)224,dynamictb.zipA simple tutorial that shows how to dynamically replace toolbars at runtime (35KB)225,toolbar_docking_demo.zipDemonstrates how to dock toolbars side-by-side (29KB)226,tapetoolbar.zipA spectacular variation on toolbars (35KB)227,chevions.zipAn introduction to using the cool new toolbar chevrons (18KB)228,toolgroupmanager.zipA reusable template class for managing multiple toolbars, only one of which is displayed at a time(30KB)229,toolbar_hotbuttons_demo.zipDemonstrates how to add rollover buttons to your toolbar(30KB)230,toolbar.zipWTL Tool Bar Drop-Down Extension(64KB)231,win95asm.zipIntroduction to Menus(113KB)232,outbar.zipCGfxOutBarCtrl, an Outlook98 bar-like control(163KB)233,tabstatus.zipAdvanced UI - MDI list in the status bar (and a custom Window List dialog)(62KB)234,gfxlist.zipList Control - Enhanced list control(1544KB)235,maillook.zipInternet Mail Look(42KB)236,cdxcdynamic.zipDynamic child window repositioning for dialogs, property sheets, form views and any other CWnd derived classes. (227KB)237,voicecmd.zipVoice Command Enabling Your Software (27KB)238,cj60lib.zipMFC Extension Library - CJ60 Version 6.07(1100KB)239,infobar.zipInformation Bar (62KB)240,switcher.zipA Switcher Control (like the Windows Task Bar) (40KB)

19,468

社区成员

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

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