控制台窗口界面控制设计

控制台窗口界面控制设计
控制台窗口界面控制设计

摘要:文本界面的控制台应用程序开发是深入学习C++、掌握交互系统的实现方法的最简单的一种手段。然而,Visual C++的C++专用库却没有TC所支持的文本(字符)屏幕控制函数,为此本系列文章从一般控制步骤、控制台窗口操作、文本(字符)控制、滚动和移动、光标、键盘和鼠标等几个方面讨论控制台窗口界面的编程控制方法。

在众多C++开发工具中,由于Microsoft本身的独特优势,选用Visual C++已越来越被众多学习者所接受。显然,现今如果还再把TC作为开发环境的话,不仅没有必要,而且也不利于向Windows应用程序开发的过渡。然而,Visual C++的C++专用库却没有TC所支持的文本屏幕(控制台窗口)控制函数(相应的头文件是conio.h)。这必然给C++学习者在文本界面设计和编程上带来诸多不便。要知道,文本界面设计是一种深入学习C++、掌握交互系统的实现方法的最简单的一种手段,它不像C++的Windows图形界面应用程序,涉及知识过多。为此,本系列文章来讨论在Visual C++ 6.0开发环境中,如何编写具有美观清晰的控制台窗口界面的C++应用程序。

一、概述

所谓控制台应用程序,就是指那些需要与传统DOS操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。简单地讲,就是指在Windows环境下运行的DOS程序。一旦C++控制台应用程序在Windows 9x/NT/2000操作系统中运行后,就会弹出一个窗口。例如下列过程:

单击Visual C++标准工具栏上的“New Text File”按钮,打开一个新的文档窗口。

选择File | Save菜单或按快捷键Ctrl+S或单击标准工具栏的Save按钮,弹出“保存为”文件对话框。将文件名为“Hello.cpp” (注意扩展名.cpp不能省略)。

在文档窗口中输入下列代码:

#include

void main()

{

cout<<"Hello, Console!"< }

单击小型编译工具栏中的“Build”按钮或按F7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。

单击小型编译工具栏中的“Execute Program”按钮或按Ctrl+F5键,运行刚才的程序。

程序运行后,弹出下图的窗口。

这就是控制台窗口,与传统的DOS屏幕窗口相比最主要的区别有:

(1) 默认的控制台窗口有系统菜单和标题,它是一个内存缓冲区窗口,缓冲区大小取决于Windows操作系统的分配;而DOS屏幕是一种物理窗口,不具有Windows窗口特性,其大小取决于ROM BIOS分配的内存空间。

(2) 控制台窗口的文本操作是调用低层的Win32 APIs,而DOS屏幕的文本操作是通过调用BIOS的16(10h)中断而实现的。

(3) 默认的控制台窗口可以接收键盘和鼠标的输入信息,设备驱动由Windows管理,而DOS屏幕窗口接收鼠标时需要调用33h中断,且鼠标设备驱动程序由自己安装。

二、控制台文本窗口的一般控制步骤

在Visual C++ 6.0中,控制台窗口界面的一般编程控制步骤如下:

调用GetStdHandle获取当前的标准输入(STDIN)和标准输出(STDOUT)设备句柄。函数原型为:

HANDLE GetStdHandle( DWORD nStdHandle );

其中,nStdHandle可以是STD_INPUT_HANDLE(标准输入设备句柄)、

STD_OUTPUT_HANDLE(标准输出设备句柄)和STD_ERROR_HANDLE(标准错误句柄)。需要说明的是,“句柄”是Windows最常用的概念。它通常用来标识Windows资源(如菜单、图标、窗口等)和设备等对象。虽然可以把句柄理解为是一个指针变量类型,但它不是对象所在的地址指针,而是作为Windows系统内部表的索引值来使用的。

调用相关文本界面控制的API函数。这些函数可分为三类。一是用于控制台窗口操作的函数(包括窗口的缓冲区大小、窗口前景字符和背景颜色、窗口标题、大小和位置等);二是用于控制台输入输出的函数(包括字符属性操作函数);其他的函数并为最后一类。

调用CloseHandle()来关闭输入输出句柄。

注意,在程序中还必须包含头文件windows.h。下面看一个程序:

#include

void main()

{

HANDLE hOut;

hOut = GetStdHandle(STD_OUTPUT_HANDLE);

// 获取标准输出设备句柄

CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息

GetConsoleScreenBufferInfo(hOut, &bInfo );

// 获取窗口信息

printf("\n\nThe soul selects her own society,\n");

printf("Then shuts the door;\n");

printf("On her devine majority\n");

printf("Obtrude no more.\n\n");

_getch();

COORD pos = {0, 0};

FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X *

bInfo.dwSize.Y, pos, NULL);

// 向窗口中填充字符以获得清屏的效果

CloseHandle(hOut); // 关闭标准输出设备句柄

}

程序中,COORD和CONSOLE_SCREEN_BUFFER_ INFO是wincon.h定义的控制台结构体类型,其原型如下:

// 坐标结构体

typedef struct _COORD {

SHORT X;

SHORT Y;

} COORD;

// 控制台窗口信息结构体

typedef struct _CONSOLE_SCREEN_BUFFER_INFO {

COORD dwSize; // 缓冲区大小

COORD dwCursorPosition; // 当前光标位置

WORD wAttributes; // 字符属性

SMALL_RECT srWindow; // 当前窗口显示的大小和位置

COORD dwMaximumWindowSize; // 最大的窗口缓冲区大小

} CONSOLE_SCREEN_BUFFER_INFO ;

还需要说明的是,虽然在C++中,iostream.h定义了cin和cout的标准输入和输出流对象。但它们只能实现基本的输入输出操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream.h和它们是C++两套不同的输入输出操作方式,使用时要特别注意。

三、控制台窗口操作

用于控制台窗口操作的API函数如下:

此外,还有窗口字体、显示模式等控制函数,这里不再细说。下列举一个示例,程序如下:

#include

#include

#include

void main()

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

// 获取标准输出设备句柄

CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息GetConsoleScreenBufferInfo(hOut, bInfo );

// 获取窗口缓冲区信息

char strTitle[255];

GetConsoleTitle(strTitle, 255); // 获取窗口标题

printf("当前窗口标题是:%s\n", strTitle);

_getch();

SetConsoleTitle("控制台窗口操作"); // 获取窗口标题

_getch();

COORD size = {80, 25};

SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大

_getch();

SMALL_RECT rc = {0,0, 80-1, 25-1}; // 重置窗口位置和大小SetConsoleWindowInfo(hOut,true ,&rc);

CloseHandle(hOut); // 关闭标准输出设备句柄

}

需要说明的是,控制台窗口的原点坐标是(0, 0),而最大的坐标是缓冲区大小减1,例如当缓冲区大小为80*25时,其最大的坐标是(79, 24)。

四、文本属性操作

与DOS字符相似,控制台窗口中的字符也有相应的属性。这些属性分为:文本的前景色、背景色和双字节字符集(DBCS)属性三种。事实上,我们最关心是文本颜色,这样可以构造出美观的界面。颜色属性都是一些预定义标识:

与文本属性相关的主要函数有:

BOOL FillConsoleOutputAttribute( // 填充字符属性

HANDLE hConsoleOutput, // 句柄

WORD wAttribute, // 文本属性

DWORD nLength, // 个数

COORD dwWriteCoord, // 开始位置

LPDWORD lpNumberOfAttrsWritten // 返回填充的个数

);

BOOL SetConsoleTextAttribute( // 设置WriteConsole等函数

的字符属性

HANDLE hConsoleOutput, // 句柄

WORD wAttributes // 文本属性

);

BOOL WriteConsoleOutputAttribute( // 在指定位置处写属性HANDLE hConsoleOutput, // 句柄

CONST WORD *lpAttribute, // 属性

DWORD nLength, // 个数

COORD dwWriteCoord, // 起始位置

LPDWORD lpNumberOfAttrsWritten // 已写个数

);

另外,获取当前控制台窗口的文本属性是通过调用函数GetConsoleScreenBufferInfo后,在CONSOLE_SCREEN_ BUFFER_INFO结构成员wAttributes中得到。

五、文本输出

文本输出函数有:

BOOL FillConsoleOutputCharacter( // 填充指定数据的字符

HANDLE hConsoleOutput, // 句柄

TCHAR cCharacter, // 字符

DWORD nLength, // 字符个数

COORD dwWriteCoord, // 起始位置

LPDWORD lpNumberOfCharsWritten // 已写个数

);

BOOL WriteConsole( // 在当前光标位置处插入指定数量的字符HANDLE hConsoleOutput, // 句柄

CONST VOID *lpBuffer, // 字符串

DWORD nNumberOfCharsToWrite, // 字符个数

LPDWORD lpNumberOfCharsWritten, // 已写个数

LPVOID lpReserved // 保留

);

BOOL WriteConsoleOutput( // 向指定区域写带属性的字符

HANDLE hConsoleOutput, // 句柄

CONST CHAR_INFO *lpBuffer, // 字符数据区

COORD dwBufferSize, // 数据区大小

COORD dwBufferCoord, // 起始坐标

PSMALL_RECT lpWriteRegion // 要写的区域

);

BOOL WriteConsoleOutputCharacter( // 在指定位置处插入指定

数量的字符

HANDLE hConsoleOutput, // 句柄

LPCTSTR lpCharacter, // 字符串

DWORD nLength, // 字符个数

COORD dwWriteCoord, // 起始位置

LPDWORD lpNumberOfCharsWritten // 已写个数

);

可以看出:WriteConsoleOutput函数功能相当于SetConsoleTextAttribute 和WriteConsole的功能。而WriteConsoleOutputCharacter函数相当于SetConsoleCursorPosition(设置光标位置)和WriteConsole的功能。不过在具体使用要注意它们的区别。

六、文本操作示例

下面看一个示例程序:

#include

HANDLE hOut;

void ShadowWindowLine(char *str); // 在具有阴影效果的窗口中显示一行字符,窗口为居中显示

void DrawBox(bool bSingle, SMALL_RECT rc); // 绘制边框

void main()

{

hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄

SetConsoleOutputCP(437); // 设置代码页

ShadowWindowLine("Display a line of words, and center the window with shadow.");

CloseHandle(hOut); // 关闭标准输出设备句柄

}

void ShadowWindowLine(char *str)

{

CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息GetConsoleScreenBufferInfo( hOut, &bInfo ); // 获取窗口缓冲区信息

// 计算显示窗口大小和位置

int x1, y1, x2, y2, chNum = strlen(str);

x1 = (bInfo.dwSize.X - chNum)/2 - 2;

y1 = bInfo.dwSize.Y/2 - 2;

x2 = x1 + chNum + 4;

y2 = y1 + 5;

WORD att1 = BACKGROUND_INTENSITY; // 阴影属性

WORD att0 = FOREGROUND_RED |FOREGROUND_GREEN

|FOREGROUND_BLUE |

FOREGROUND_INTENSITY |

BACKGROUND_RED | BACKGROUND_BLUE; // 文本属性

WORD attText = FOREGROUND_RED |FOREGROUND_INTENSITY; // 文本属性

// 设置阴影

COORD posShadow = {x1+1, y1+1}, posText = {x1, y1};

for (int i=0; i<5; i++){

FillConsoleOutputAttribute(hOut, att1, chNum + 4, posShadow, NULL);

posShadow.Y++;

}

// 填充窗口背景

for (i=0; i<5; i++){

FillConsoleOutputAttribute(hOut, att0, chNum + 4, posText, NULL);

posText.Y++;

}

// 写文本和边框

posText.X = x1 + 2;

posText.Y = y1 + 2;

WriteConsoleOutputCharacter(hOut, str, strlen(str), posText, NULL);

SMALL_RECT rc = {x1, y1, x2-1, y2-1};

DrawBox(true, rc);

SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性

}

void DrawBox(bool bSingle, SMALL_RECT rc)

{

char chBox[6];

if (bSingle) {

chBox[0] = (char)0xda; // 左上角点

chBox[1] = (char)0xbf; // 右上角点

chBox[2] = (char)0xc0; // 左下角点

chBox[3] = (char)0xd9; // 右下角点

chBox[4] = (char)0xc4; // 水平

chBox[5] = (char)0xb3; // 坚直

} else {

chBox[0] = (char)0xc9; // 左上角点

chBox[1] = (char)0xbb; // 右上角点

chBox[2] = (char)0xc8; // 左下角点

chBox[3] = (char)0xbc; // 右下角点

chBox[4] = (char)0xcd; // 水平

chBox[5] = (char)0xba; // 坚直

}

COORD pos = {rc.Left, rc.Top};

WriteConsoleOutputCharacter(hOut, &chBox[0], 1, pos, NULL);

for (pos.X = rc.Left + 1; pos.X WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL); pos.X = rc.Right;

WriteConsoleOutputCharacter(hOut, &chBox[1], 1, pos, NULL);

for (pos.Y = rc.Top+1; pos.Y {

pos.X = rc.Left;

WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);

pos.X = rc.Right;

WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);

}

pos.X = rc.Left; pos.Y = rc.Bottom;

WriteConsoleOutputCharacter(hOut, &chBox[2], 1, pos, NULL);

for (pos.X = rc.Left + 1; pos.X

WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL);

pos.X = rc.Right;

WriteConsoleOutputCharacter(hOut, &chBox[3], 1, pos, NULL);

}

程序运行结果如下图所示。

需要说明的是,上述程序在不同的字符代码页面(code page)下显示的结果是不同的。例如,中文Windows操作系统的默认代码页是简体中文(936),在该代码页面下值超过128的单字符在Windows NT/XP是显示不出来的。下表列出了可以使用的代码页。

七、滚动和移动

ScrollConsoleScreenBuffer是实现文本区滚动和移动的API函数。它可以将指定的一块文本区域移动到另一个区域,被移空的那块区域由指定字符填充。函数的原型如下:

利用这个API函数还可以实现删除指定行的操作。下面来举一个例子,程序如下:

#include

#include

#include

HANDLE hOut;

void DeleteLine(int row); // 删除一行

void MoveText(int x, int y, SMALL_RECT rc); // 移动文本块区域

void ClearScreen(void); // 清屏

void main()

{

hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设

备句柄

WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY |

BACKGROUND_BLUE ;

// 背景是蓝色,文本颜色是黄色

SetConsoleTextAttribute(hOut, att);

ClearScreen();

printf("\n\nThe soul selects her own society,\n");

printf("Then shuts the door;\n");

printf("On her devine majority;\n");

printf("Obtrude no more.\n\n");

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD endPos = {0, bInfo.dwSize.Y - 1}; SetConsoleCursorPosition(hOut, endPos); // 设置光标位置SMALL_RECT rc = {0, 2, 40, 5};

_getch();

MoveText(10, 5, rc);

_getch();

DeleteLine(5);

CloseHandle(hOut); // 关闭标准输出设备句柄

}

void DeleteLine(int row)

{

SMALL_RECT rcScroll, rcClip;

COORD crDest = {0, row - 1};

CHAR_INFO chFill;

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

rcScroll.Left = 0;

rcScroll.Top = row;

rcScroll.Right = bInfo.dwSize.X - 1;

rcScroll.Bottom = bInfo.dwSize.Y - 1;

rcClip = rcScroll;

chFill.Attributes = bInfo.wAttributes;

chFill.Char.AsciiChar = ' ';

ScrollConsoleScreenBuffer(hOut, &rcScroll, &rcClip, crDest, &chFill);

}

void MoveText(int x, int y, SMALL_RECT rc)

{

COORD crDest = {x, y};

CHAR_INFO chFill;

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

chFill.Attributes = bInfo.wAttributes;

chFill.Char.AsciiChar = ' ';

ScrollConsoleScreenBuffer(hOut, &rc, NULL, crDest, &chFill);

}

void ClearScreen(void)

{

CONSOLE_SCREEN_BUFFER_INFO bInfo;

GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, 0};

WORD att = bInfo.wAttributes;

unsigned long size = bInfo.dwSize.X * bInfo.dwSize.Y; FillConsoleOutputAttribute(hOut, att, size, home, NULL); FillConsoleOutputCharacter(hOut, ' ', size, home, NULL);

}

程序中,实现删除行的操作DeleteLine的基本原理是:首先将裁剪区域和移动区域都设置成指定行row(包括该行)以下的控制台窗口区域,然后将移动的位置指定为(0, row-1)。这样,超出裁剪区域的内容被裁剪掉,从而达到删除行的目的。

需要说明的是,若裁剪区域参数为NULL,则裁剪区域为整个控制台窗口。

八、光标操作

控制台窗口中的光标反映了文本插入的当前位置,通过SetConsoleCursorPosition函数可以改变这个“当前”位置,这样就能控制字符(串)输出。事实上,光标本身的大小和显示或隐藏也可以通过相应的API函数进行设定。例如:

这两个函数都与CONSOLE_CURSOR_INFO结构体类型有关,其定义如下:

需要说明的是,dwSize值反映了光标的大小,它的值范围为1-100;当为1时,光标最小,仅是一条最靠下的水平细线,当为100,光标最大,为一个字符大小的方块。

九、读取键盘信息

键盘事件通常有字符事件和按键事件,这些事件所附带的信息构成了键盘信息。它是通过API函数ReadConsoleInput来获取的,其原型如下:

其中,INPUT_RECORD定义如下:

与键盘事件相关的记录结构KEY_EVENT_RECORD定义如下:

我们知道,键盘上每一个有意义的键都对应着一个唯一的扫描码,虽然扫描码可以作为键的标识,但它依赖于具体设备的。因此,在应用程序中,使用的往往是与具体设备无关的虚拟键代码。这种虚拟键代码是与设备无关的键盘编码。在Visual C++中,最常用的虚拟键代码已被定义在Winuser.h中,例如:VK_SHIFT表示SHIFT键,VK_F1表示功能键F1等。

上述结构定义中,dwControlKeyState用来表示控制键状态,它可以是

CAPSLOCK_ON(CAPS LOCK灯亮)、ENHANCED_KEY(按下扩展键)、

LEFT_ALT_PRESSED(按下左ALT键)、LEFT_CTRL_PRESSED(按下左CTRL键)、NUMLOCK_ON (NUM LOCK灯亮)、RIGHT_ALT_PRESSED(按下右ALT键)、

RIGHT_CTRL_PRESSED(按下右CTRL键)、SCROLLLOCK_ON(SCROLL LOCK灯亮)和SHIFT_PRESSED(按下SHIFT键)中的一个或多个值的组合。

下面的程序是将用户按键的字符输入到一个控制台窗口的某个区域中,并当按下NUM LOCK、CAPS LOCK和SCROLL LOCK键时,在控制台窗口的最后一行显示这些键的状态。

#include

HANDLE hOut;

HANDLE hIn;

void DrawBox(bool bSingle, SMALL_RECT rc);

void ClearScreen(void);

void CharWindow(char ch, SMALL_RECT rc); // 将ch输入到指定的窗

口中

void ControlStatus(DWORD state); // 在最后一行显示控制键的状态

void DeleteTopLine(SMALL_RECT rc); // 删除指定窗口中最上面的行并

滚动

void main()

{

hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设

备句柄

hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句

WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY |

BACKGROUND_BLUE ;

// 背景是蓝色,文本颜色是黄色

SetConsoleTextAttribute(hOut, att);

ClearScreen(); // 清屏

INPUT_RECORD keyRec;

DWORD state = 0, res;

char ch;

SMALL_RECT rc = {20, 2, 40, 12};

DrawBox(true, rc);

COORD pos = {rc.Left+1, rc.Top+1};

SetConsoleCursorPosition(hOut, pos); // 设置光标位置

for(;;) // 循环

{

ReadConsoleInput(hIn, &keyRec, 1, &res);

if (state != keyRec.Event.KeyEvent.dwControlKeyState) { state = keyRec.Event.KeyEvent.dwControlKeyState;

ControlStatus(state);

}

if (keyRec.EventType == KEY_EVENT){

if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) break;

// 按ESC键退出循环

if (keyRec.Event.KeyEvent.bKeyDown) {

ch = keyRec.Event.KeyEvent.uChar.AsciiChar;

CharWindow(ch, rc);

}

}

}

pos.X = 0; pos.Y = 0;

SetConsoleCursorPosition(hOut, pos); // 设置光标位置CloseHandle(hOut); // 关闭标准输出设备句柄

CloseHandle(hIn); // 关闭标准输入设备句柄

}

void CharWindow(char ch, SMALL_RECT rc) // 将ch输入到指定的窗口中

{

static COORD chPos = {rc.Left+1, rc.Top+1}; SetConsoleCursorPosition(hOut, chPos); // 设置光标位置

if ((ch<0x20)||(ch>0x7e)) return;

WriteConsoleOutputCharacter(hOut, &ch, 1, chPos, NULL);

if (chPos.X>=(rc.Right-1))

{

chPos.X = rc.Left;

chPos.Y++;

}

if (chPos.Y>(rc.Bottom-1))

{

DeleteTopLine(rc);

chPos.Y = rc.Bottom-1;

}

chPos.X++;

SetConsoleCursorPosition(hOut, chPos); // 设置光标位置

}

void ControlStatus(DWORD state) // 在最后一行显示控制键的状态{

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, bInfo.dwSize.Y-1};

WORD att0 = BACKGROUND_INTENSITY ;

WORD att1 = FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_RED;

FillConsoleOutputAttribute(hOut, att0, bInfo.dwSize.X, home, NULL);

FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X, home, NULL);

SetConsoleTextAttribute(hOut, att1);

COORD staPos = {bInfo.dwSize.X-16,bInfo.dwSize.Y-1}; SetConsoleCursorPosition(hOut, staPos);

if (state & NUMLOCK_ON)

WriteConsole(hOut, "NUM", 3, NULL, NULL);

staPos.X += 4;

SetConsoleCursorPosition(hOut, staPos);

if (state & CAPSLOCK_ON)

WriteConsole(hOut, "CAPS", 4, NULL, NULL);

staPos.X += 5;

SetConsoleCursorPosition(hOut, staPos);

if (state & SCROLLLOCK_ON)

WriteConsole(hOut, "SCROLL", 6, NULL, NULL); SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性

SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition); // 恢复原来的光标位置

}

void DeleteTopLine(SMALL_RECT rc)

{

COORD crDest;

CHAR_INFO chFill;

SMALL_RECT rcClip = rc;

rcClip.Left++; rcClip.Right--;

rcClip.Top++; rcClip.Bottom--;

crDest.X = rcClip.Left;

crDest.Y = rcClip.Top - 1;

程序运行结果如下图所示:

十、读取鼠标信息

与读取键盘信息方法相似,鼠标信息也是通过ReadConsoleInput来获取的,其MOUSE_EVENT_RECORD具有下列定义:

其中,dwButtonState反映了用户按下鼠标按钮的情况,它可以是:

FROM_LEFT_1ST_BUTTON_PRESSED(最左边按钮)、

RIGHTMOST_BUTTON_PRESSED(最右边按钮)、

FROM_LEFT_2ND_BUTTON_PRESSED(左起第二个按钮)、

FROM_LEFT_3RD_BUTTON_PRESSED(左起第三个按钮)和

FROM_LEFT_4TH_BUTTON_PRESSED (左起第四个按钮)。而dwEventFlags表示鼠标的事件,如DOUBLE_CLICK(双击)、MOUSE_MOVED(移动)和MOUSE_WHEELED(滚轮滚动,

只适用于Windows 2000/XP)。dwControlKeyState的含义同前。

下面举一个例子。这个例子能把鼠标的当前位置显示在控制台窗口的最后一行上,若单击鼠标左键,则在当前位置处写一个字符…A?,若双击鼠标任一按钮,则程序终止。具体代码如下:

#include <WINDOWS.H>

#include <STDIO.H>

#include <STRING.H>

HANDLE hOut;

HANDLE hIn;

void ClearScreen(void);

void DispMousePos(COORD pos); // 在最后一行显示鼠标位置

void main()

{

hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设

备句柄

hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句

WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY |

BACKGROUND_BLUE ;

// 背景是蓝色,文本颜色是黄色

SetConsoleTextAttribute(hOut, att);

ClearScreen(); // 清屏

INPUT_RECORD mouseRec;

DWORD state = 0, res;

COORD pos = {0, 0};

for(;;) // 循环

{

ReadConsoleInput(hIn, &mouseRec, 1, &res);

if (mouseRec.EventType == MOUSE_EVENT){

if (mouseRec.Event.MouseEvent.dwEventFlags ==

DOUBLE_CLICK) break;

// 双击鼠标退出循环

pos = mouseRec.Event.MouseEvent.dwMousePosition;

DispMousePos(pos);

if (mouseRec.Event.MouseEvent.dwButtonState ==

FROM_LEFT_1ST_BUTTON_PRESSED)

FillConsoleOutputCharacter(hOut, 'A', 1, pos, NULL);

}

}

pos.X = 0; pos.Y = 0;

SetConsoleCursorPosition(hOut, pos); // 设置光标位置

CloseHandle(hOut); // 关闭标准输出设备句柄

CloseHandle(hIn); // 关闭标准输入设备句柄

}

void DispMousePos(COORD pos) // 在最后一行显示鼠标位置

{

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, bInfo.dwSize.Y-1};

WORD att0 = BACKGROUND_INTENSITY ; FillConsoleOutputAttribute(hOut, att0, bInfo.dwSize.X, home, NULL);

FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X, home, NULL);

char s[20];

sprintf(s,"X = %2lu, Y = %2lu",pos.X, pos.Y); SetConsoleTextAttribute(hOut, att0);

SetConsoleCursorPosition(hOut, home);

WriteConsole(hOut, s, strlen(s), NULL, NULL); SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性

SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition); // 恢复原来的光标位置

}

void ClearScreen(void)

{

CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, 0};

unsigned long size = bInfo.dwSize.X * bInfo.dwSize.Y; FillConsoleOutputAttribute(hOut, bInfo.wAttributes, size, home, NULL);

FillConsoleOutputCharacter(hOut, ' ', size, home, NULL);

}

程序运行结果如下:

十一、结语

综上所述,利用控制台窗口的Widows API函数可以设计简洁美观的文本界面,使得用Visual C++ 6.0开发环境深入学习C++以及文本界面设计成为一件比较容易的事件。当然文本界面的设计还需要一定的方法和技巧,限于篇幅,这里不再阐述。

上古卷轴装备控制台代码

Player.additem X X 说明:第一个X为装备或武器的代码,第二个X为你要调出来的数量,要一件就打1 别忘了空格! 龙轻甲: 0001393D 龙轻鞋子 0001393E 龙轻盔甲 0001393F 龙轻手套 00013940 龙轻头盔 00013941 龙轻盾牌 恶魔重甲: 0001396A 恶魔重鞋子 0001396B 恶魔重盔甲 0001396C 恶魔重手套 0001396D 恶魔重头盔 0001396E 恶魔重盾牌 恶魔武器: 000139B5 恶魔弓 000139B7 恶魔大剑 000139B9 恶魔剑 000139B6 恶魔匕首 夜莺套 000FCC0D 000FCC0F 000FCC11 000FCC13 000F652C 夜莺弓 000F6527 夜莺剑 000fcc12 000FCC0E 000fcc11 000fcc0c 0007c932 首席大法师袍 00050F3A 刀锋盾

0004B28F 刀锋头盔0004B28D 刀锋长手套0004B28B 刀锋盔甲0004B288 刀锋靴子 00042BE9 小偷公会手套00036585 小偷公会风帽00036584 小偷公会盔甲00036583 小偷公会靴子 00013963 乌木头盔00013962 乌木手套00013961 乌木盔甲00013960 乌木靴 00013950 矮人盾牌0001394F 矮人头盔0001394E 矮人手套0001394D 矮人盔甲0001394C 矮人的靴子 0001393C 玻璃盾0001393B 玻璃头盔0001393A 玻璃手套00013939 玻璃装甲00013938 玻璃靴000139A5 玻璃弓

上古卷轴天际控制台装备代码大全

上古卷轴天际控制台装备 代码大全 The pony was revised in January 2021

上古卷轴5天际控制台装备代码大全 TGM-无敌 Tcl-穿墙 tcai-开关NPC攻击反应 tfc-拍照用!自由视角! resurrect-复活你鼠标所选择的人或怪 lock*-再控制台下将鼠标所选择的门或者箱子用等级为*的锁锁住。#必须介于1到100之间, unlock-再控制台下用鼠标选择门或箱子,输入指令即开。 kill–再控制台下用鼠标选择人或其它生物,输入指令秒杀。 settimescaleto#-时间流失速度!数字越大!时间流失越快!默认是7 caqs-完成所有任务(不要轻易尝试!一旦使用!恭喜你通关了~) ShowSubtitle-开关NPC对话字幕 SexChange-改变性别 advlevel-立刻升级 psb-获得所有魔法!包括一些没有测试完成的BUG魔法!

其它命令 TM-开关所有菜单~包括控制台 TDETECT-开关人工智能探测 TLL-开关远景 TS-开关天空 TLV-开关树叶 TWF-开关框架模式 TAI-开关人工智能(所有npc无法正常对话!) TG-开关草丛 TT-开关树木 tws-开关水(有问题) #-得到代号FormID的物品#个000000f为金币 得到代号FormID的法术 PlaceAtMeformid,FormID,x,y-在地图上生成代号为formid的物品或者生物#个#-从你身上移除代号为FormID的物品#个 移除代号为FormID的法术

modpcs技能名称#-技能名称对应的技能,比如sneak,增加#个技能点 modpca属性名称#-属性名称对应的属性,比如luck,增加#点 #-改变角色的等级到#你想要的等级 技能或属性名称#-将名称为技能或属性名称的技能或者属性的值设为# advskill技能名称#-技能名称对应的技能上升#个级别,比如advskillblade5 ShowRaceMenu-调出改变种族窗口 TFOW-开关战争迷雾 FOV#-改变视野为#度,缺省设定为75度 setcamerafov#-设置相机视野为#度。缺省设定为75度 setscale#-先用鼠标选择对应的物体,然后输入指令改变物体大小为原来的#倍。#必须介于到之间。走路速度,跳跃高度,攻击距离,等等,都会按比例变化。 stopcombat-先用鼠标选择对象,然后输入指令就能立刻停止战斗,不管对手是朋友还是敌人。 清掉自己头上的赏金。要注意的是如果正被守卫追赶,则必须离开城市再回来指令才会生效。 守卫停止攻击,你头上的赏金清除。 showfullquestlog[questid]-显示代号为[questid]的任务的全部记录信息

《上古卷轴 全控制台NPC代码》

本篇代码根据3DM v2.31汉化进行命名 指令是player.placeatme 代码数量(单个可以不用数量,控制台按↑↓翻查已输入命令,PageUp PageDown翻页,[help "The English name" 0]翻查代码,FF 开头是暂存地址无效,中文版下不显示。保存txt文件后,点击文本上方“编辑”“查找”进行检索,快捷键Ctrl F。) 萨雷提农场Sarethi Farm: 19BFE阿瓦卢萨·萨雷提Avrusa Sarethi(姐/葫芦/土豆/奈恩根/猩红奈恩根/幸德莱昂-侄女) 19BFF阿都丽·萨雷提Aduri Sarethi(妹) ?: 19c00格罗斯塔Grosta(女磨坊主/柴火/雷夫纳尔-妻) 19c01 Gralnach(磨坊主男孩) 溪木农场Riverwood: 13475阿尔沃Alvor(铁匠) 13476西格里Sigrid(阿尔沃-妻) 13477朵西Dorthe(阿尔沃-女孩) 13478戴尔芬Delphine(女房东) 13479奥格那Ogrnar(厨师) 1347a路坎·瓦勒瑞斯Lucan Valerius(杂货店主) 1347b凯米拉·瓦勒瑞斯Camilla Valerius(路坎-女) 1347c歌尔朵Gerdur(女磨坊主) 1347d胡德Hod(歌尔朵-夫) 1347e佛洛德纳Frodnor(胡德-男孩) 1347f斯万Sven(歌手) 13480法恩达尔Faendal(木工兼猎人) 3550b安伯瑞Embry(酒鬼) 35533希尔德Hilde(斯万-母) 2bf9f哈达瓦Hadvar(路过的士兵?) ?: 135e5 Agni(女孩)ee 135e6阿尔瓦Alva(女)

工作设计说明书

工作分析课程设计说明书 一课程设计的目的及意义 1.1 目的 《工作分析》是人力资源管理的基础。本次工作分析课程设计目的通过学习再明确了工作分析的原则、内容、工作分析的流程、工作分析的方法、工作设计与评价、工作分析的结果以及在人力资源管理的地位和作用,同时为了培养学生独立分析问题和解决问题的能力,把所学知识与中小企业的实际情况结合起来安排了此次课程设计。通过此课程设计,使学生巩固所学工作分析的理论知识,检验工作分析学习的效果,锻炼和提高社会调研能力,提高分析和解决中小企业在工作分析过程中存在的现实问题的能力。 1.2意义 1、工作分析为人力资源开发与管理活动提供依据 1)工作分析为人力资源规划提供了必要的信息; 2)工作分析为人员的招聘录用提供了明确的标准; 3)工作分析为人员的培训开发提供了明确的依据; 4)工作分析为科学的绩效管理提供了帮助; 5)工作分析为制定公平合理的薪酬政策奠定了基础; 2、工作分析为组织职能的实现奠定基础 1)通过工作分析,有助于员工本人反省和审查自己的工作内容和工作行为,以帮助员工自觉主动地寻找工作中存在的问题,圆满实现职位对于组织的贡献; 2)在工作分析过程中,人力资源管理人员能够充分地了解组织经营的各个重要业务环节和业务流程,从而有助于人力资源管理职能真正上升到战略地位; 3)借助于工作分析,组织的最高经营管理层能够充分了解每一个工作岗位上的人目前所做的工作,可以发现职位之间的职责交叉和职责空缺现象,并通过职位及时调整,提高组织的协同效应。 二企业存在设计工作分析中存在的问题 工作分析是企业人力资源管理规范化的一个重要起点,也是现代企业开展人力资源管理活动的基石,几乎所有的人力资源管理职能模块都要以工作分析作为为基础和前提。只有做好了职位分析,才能为职位设计、人力资源规划、人员招募甄选、培训开发、绩效管理、薪酬管理乃至组织结构诊断等提供有力的依据。但是,我们却不得不承认,在中小企业中实施工作分析往往不像在大企业中那样顺理成章,而是会遇到在相对成熟的大企业中不存在或者是表现不那么明显的很多问题,这就使得在中小企业中实施工作分析工作,可能要比在大企业中遭遇更多的难题, 2.1工作分析在招聘与录用中的问题 2.1.1.人力资源管理机构和人员的设置不到位 我国目前大部分中小企业在部门设置的时候并没有单独设置人力资源部,而是由办公室或行政部等部门兼任。企业对人力资源管理与开发工作的重视性不够,忽略了人力资源部是现代企业架构中不可或缺的重要组成部分,为企业正常、有序的发展提供了必要的支持。 没有配备专门的人力资源管理人员,即使有,其日常工作也仅仅局限于管管档案、工资和劳保等,按照“静态”的、以“事”为中心的传统人事管理模式进行工作,没有行使到人力资源管理应尽的职责。 2.1.2 对招聘工作不够重视 相当多的中小企业对人员的招聘较为随意,更多时候是在人手紧缺或者员工大规模流失的情况下仓促进行招聘,缺乏人力资源计划做指导,在一定程度上对招聘结果产生了不良影响。对他们而言,

上古卷轴控制台代码

000000f 99999 (增加金币99999) 常用命令 TGM - 无敌 Tcl- 穿墙 tcai - 开关NPC攻击反应 tfc - 拍照用!自由视角! resurrect - 复活你鼠标所选择的人或怪 lock * - 再控制台下将鼠标所选择的门或者箱子用等级为*的锁锁住。#必须介于1到100之间, unlock - 再控制台下用鼠标选择门或箱子,输入指令即开。 kill –再控制台下用鼠标选择人或其它生物,输入指令秒杀。 set timescale to # - 时间流失速度!数字越大!时间流失越快!默认是7 caqs - 完成所有任务(不要轻易尝试!一旦使用!恭喜你通关了~) ShowSubtitle - 开关NPC对话字幕 SexChange - 改变性别 advlevel - 立刻升级 psb - 获得所有魔法!包括一些没有测试完成的BUG魔法! 其它命令 TM - 开关所有菜单~包括控制台 TDETECT -开关人工智能探测 TLL - 开关远景 TS - 开关天空

TLV - 开关树叶 TWF -开关框架模式 TAI - 开关人工智能(所有npc无法正常对话!) TG - 开关草丛 TT - 开关树木 tws - 开关水(有问题) FormID # - 得到代号FormID的物品#个000000f为金币 FormID - 得到代号FormID的法术 PlaceAtMe formid, FormID, x, y - 在地图上生成代号为formid的物品或者生物#个 FormID # - 从你身上移除代号为FormID的物品#个 FormID - 移除代号为FormID的法术 modpcs 技能名称# - 技能名称对应的技能,比如sneak,增加#个技能点 modpca 属性名称# - 属性名称对应的属性,比如luck,增加#点 # - 改变角色的等级到#你想要的等级 - 技能或属性名称# - 将名称为技能或属性名称的技能或者属性的值设为# advskill 技能名称# - 技能名称对应的技能上升#个级别,比如advskill blade 5 ShowRaceMenu - 调出改变种族窗口 TFOW - 开关战争迷雾 FOV # - 改变视野为#度,缺省设定为75度 setcamerafov # - 设置相机视野为#度。缺省设定为75度 setscale # - 先用鼠标选择对应的物体,然后输入指令改变物体大小为原来的#倍。#必须介于到之间。走路速度,跳跃高度,攻击距离,等等,都会按比例变化。 stopcombat - 先用鼠标选择对象,然后输入指令就能立刻停止战斗,不管对手是朋友还是敌

上古卷轴 控制台代码大全

一.控制台常用代码 health # 生命 stamina # 耐力 magicka # 魔法 healrate # 生命恢复速度默认(打个10战斗中基本血马上就恢复满) magickarate # 魔法恢复速度默认 staminarate # 耐力恢复速度默认 恢复速率的每次进游戏都要打 healrate # 改成这种之后每次进游戏就不用再输入了 行走速度: speedmult # 默认100 添加开锁器: a 999 添加金钱:0000000f 99999 负重:carryweight 99999 调出改变种族窗口:showracemenu 身高调整:setscale (先点选角色!标准身高) 复活:resurrect 开锁:unlock 地图全开:tmm 1(0为全关闭) 无敌:tgm 穿墙:tcl 拍照视角:tfc TM开关所有菜单(建议截图时使用) SexChange变性 set timescale to # 将游戏时间设为真实时间的#倍。建议设为1,游戏世界时间流 逝的速度和真实世界一样,更有代入感 dragonsouls # 龙魂数量 shoutrecoverymult 0 龙吼无cd 00000000 #得到代号00000000的物品#个 00000000 得到代号00000000的魔法 FormID # 从你身上移除代号为FormID的物品#个 FormID 移除代号为FormID的魔法 resurrect 复活你鼠标所选择的人或怪 0 清掉自己头上的赏金。要注意的是如果正被守卫追赶,则必须离开城市再回 来指令才会生效。 守卫停止攻击,你头上的赏金清除。 coc qasmoke 会把你传去一个拥有所有游戏物品所有制造器具的房间 挑完后再用coc传送命令传出来 比如coc dawnstar coc winterhlem coc riverwood 快速输入多条控制台命令方法(点击进入) 更多相关内容请关注:上古卷轴5专区 二.特技 FormID 添加特技 FormID 移除特技 onehanded 100 : 单手武器(One-Handed)

设计师工作思路

设计师工作思路 奋斗目标: 1、加强平面设计专业的学习与研究,了解本行业市场信息,从而慢慢创新新的设计理念。 2、业余学习绘画、多看相关书籍,努力以不断更新的知识理论武装自己,以期能不断以新的方式和理念适应工作中遇到的每一个问题,能够真正做到与时俱进。 一、引言 转眼间20xx年已经成为过去,加入“昆山方舟广告传媒有限公司”也快1个月了吧;在此,感谢管经理给予的这个工作机会,感谢家人,感谢他们在这些日子里工作上的帮助以及生活上的关怀。总体来说,这一年是我自身成长和发展比较快的一年,收获良多。昨天已经成为过去,未来还要靠自己创造和掌握,要时时崩紧前进的弦。因此在今后的工作中,除了一如既往地发挥自己的长处和努力工作外,更要进一步严格要求自己,提高自己,克服困难,改正在工作中发现和存在的不足,尽努力贡献自己的能量,在工作中创造和实现自己的价值,为我们“昆山方舟广告传媒有限公司”更加美好的明天做出自己应有的贡献。本人就近期的工作计划向公司经理汇报如下: 二、自我期许

1、拥有持之以恒的毅力。 2、对自己有足够的自信,善待他人。 3、能够学以致用。 4、每天自我反省。 5、更加勤奋,勤能补拙,勤奋出真知。 6、坚持,一定要坚持,坚持往往就是机遇,坚持就是胜利。 5、了解熟悉各类产品的材料。 三、主要学习内容 1、清楚本厂的设计风格及现有产品的风格。 2、参考市场信息,掌握行业现有的设计风格。 3、在工作中多于与领导沟通与交流。 4、加强自我专业技能,多去熟悉印刷后期制作及印刷工艺。 四、常态性学习 1、上网:每天花30分钟上网了解行业信息及收集新的设计元素。 2、阅读:每月读两本有利于个人提高与工作发展的书籍。 3、其他爱好:用业余时间练习绘画。 4﹑学习法律,要学广告法,还要学会去用法律保护自己

上古卷轴4控制台代码

《上古卷轴4:湮没》控制台指令集 如何使用控制台指令 在游戏中任何时候只要按下“~”键盘符就能打开控制台,再按一下"~"关闭控制台。有些指令需要指定目标,做法是先打开控制台然后用鼠标选择对应的目标然后再输入指令。 附加说明: 以下所提到的物品代号,任务代号,场所代号等等都可以用CS (Construction Set)查到。 kill 用鼠标选择人或其它生物,输入指令秒杀。 unlock 用鼠标选择门或箱子,输入指令即开。 lock # 将鼠标所选择的门或者箱子用等级为#的锁锁住。#必须介于1到100之间set timescale to # 将游戏时间设为真实时间的#倍。建议设为1,游戏世界时间流逝的速度和真实世界一样,更有代入感,呵呵。。 tgm 无敌模式 tfh 打开详细帮助

控制台指令列表 qqq 直接退出游戏 tcai 开关战斗人工智能 tfc 开关自由视角。试下变成幽灵的感觉。。 caqs 完成所有任务 ShowSubtitle 开关NPC对话字幕 psb 得到所有法术 SexChange 变性。。:P tcl 开关穿墙模式 TDT 开关Debug模式(FPS等等) TM 开关所有菜单(建议截图时使用,没了那个碍眼的指南针就是爽啊:))

产生一个Oblivion World Scene Graph窗口,效果如图: 莫要轻易尝试,因为会让游戏停顿很久,试之前最好Save一把 TDETECT 开关人工智能探测 TLL 开关远景 TS 开关天空 TLV 开关树叶 TWF 开关框架模式。就是让你看到无数个多面体,了解一下那些3维物体是怎么构成的。 TAI 开关人工智能 TG 开关草丛 TT 开关树木 tws 开关水

公司设计部岗位设置、职务说明

设计部岗位设置及职务说明书 总体职责: 1、熟悉各种材料的规格、性能、颜色和机理效果,并熟悉装饰材料。 2、熟悉各种工艺,并对工艺和材料之间的关系具有充分的理解力和创新能力。把握工艺和材料之间的尺度和表现方式。 3、深刻的理解所设计的空间的功能,在为功能服务的基础上,灵活的运用材料、颜色、材料机理、自然光线、风向的各种手段为设计服务。 4、准确的标出图纸尺寸、标高、界面、材料、颜色、工艺和大样图,为现场人员按图施工提供方便。 5、施工前清楚的交底、施工期间监督施工,并对不完善的图纸进行变动,并监督现场人员在甲方完清变动手续。工程完工后,验收签字并就质量提供书面报告。 6、深刻的认识所设计的工程和其它工程的关系,所设计的内容与工程功能是否相符,对可能出现的问题应及时汇报有关部门,对工程进度和工艺制作方法有建议权。

7、维护电脑设备和软件,了解各种最新的材质软件。下班前必须关闭电脑及打印设备,合理使用耗材,保持设计室的清洁卫生。 8、负责向客户解释方案并就设计和客户保持密切的联系,了解客户的意图及时准确的通过图纸传达给现场人员。组织本公司的工艺方面的业务学习。 9、为公司的家居业务提供一个有效、快速素材库,为家装业务报价提供依据。 10、对本公司的业务范围和设计内容保密,负责对图纸的分类和归档。 11、"设计委托制"。每笔设计都必须向客户提供"设计委托书"。"设计委托书"既为合同作用,一式三份(公司、设计人员、客户各持一份)必由公司签字盖章方可生效,无此手续者本公司和设计室一律不承担相关责任。 12、公司的正式设计人员不得隐瞒其产值,不得利用上班时间或公司设计备、材料做私人工作,不得冒用公司名誉对外承担工作而不上报设计室负责人和公司领导,违反上述两条都警告一次,再次违反退交公司另行工作职务安排。 13、如遇到与公司正在争取的项目相同的设计委托时,设计部人员有权拒收此单,以得体理由推辞。 14、不可随意向第二客户透露设计项目及某单位采取某项目的情况。设计室负责人有权了解所有设计人员的所有设计内容,以便掌握相关业务情况。 职位说明书

设计师关于设计理念的演讲稿

设计师关于设计理念的演讲稿 设计师是文艺的,设计师是有创造力的,设计师其实也是辛苦 并快乐着的。关于设计师演讲稿的有哪些呢?下面是为你的内容,希 望对你有帮助。 各位领导、各位同事大家好: 我首先感谢各位领导给我这次竞聘的机会。 有位名人曾说过:“不想当将军的士兵,绝对不是好士兵!”所以,我今天站在了这里。我竞聘的岗位是主管设计师,下面介绍一下我的工作经历、感受和竞聘优势。 我于20xx年毕业于xx大学,本科学历,并获得学士学位,毕 业后应 聘到xx工作,曾参与混凝土搅拌运输车的试制,散装水泥运输单车、挂车的图纸设计等工作。20xx年民品研发中心与建萨和通用 合并为建成专用车有限公司,开始做常压车的产品设计,包括奶车、电脑加油车的产品设计和结构改进,各种轻质燃油运输车的产品设计,图纸等,都是独立完成。20xx年,公司与雀巢公司签订的一批奶车 的订单,此批奶车在结构上与我公司生产的奶车结构完全不同,我按照客户的要求和本公司的工艺水平重新设计出图,在生产过程中全程跟踪做技术指导。从20xx年开始做压力容器的产品设计:与同事合 作共同压力容器标准图册和标准件的结构改进,新增标准件等工作; 共同完成各种液化气体运输车、液化气体半挂运输车的产品设计等。

6年来,在单位的培养下,在领导和同事们的支持和帮助下, 一步步的成长,积累经验,每天积极快乐的工作,努力学习,注重理论知识与实践相结合,不断提高自身素质。在工作中,与领导同事和-谐相处,遇到问题虚心向老同志请教,爱岗敬业,认真履行工作职责。我的一位老领导曾经说过:做设计不要因为害怕做错就不敢去做,要放开手脚去做,这样才会有创新,才会有进步。这句话给我的印象最深,也一直影响着我,在产品的结构改进上,大胆尝试,勇于创新! 我竞聘此岗位的优势是:6年多的产品设计工作经验,可以独 立完成产品的设计工作,已经取得助理工程师的资格证书,如果没有意外,今年年底我将拿到工程师的资格证书。对工作积极的态度和高度的责任心,如果我竞聘成功,将更加努力的工作,认真对待每一项工作,严格要求自己,扬长避短,发挥自己的优势,完成本职工作,为xx的发展做一分贡献! 最后,我衷心祝愿参加竞聘的各位同事都能有自己理想的工作 位置。同时我真诚希望大家鼓励我、支持我、帮助我、监督我,谢谢大家! 大家好,我是香港著名設計師何家杰,我今天要和大家介紹最 新的設計——一個專門為青少年而設的度假營。我設計它的目的是要令青年們在玩耍之餘能學習到各種技能,發揮所長。 我先從位置方面說起。它位於元朗,我選擇元朗是因為那裏遠 離市區繁囂,務求令營客有置身於世外桃源的感覺。它更建設在山上,這樣便能飽覽整個元朗的面貌,相當壯麗。

工作室设计说明

设计说明: 客户为一群一直秉承着善良、勇敢与坚持。有着对设计的新颖、现代、时尚、追逐着设计的梦想的90后刚毕业的孩子们。空间运用了夸大的设计理念和色感大胆的搭配,推翻了一切世俗的工作室,展示出了一个不平凡的带着梦想的设计工作室,线条简单明快,此工作室有两个门大门进去就是圆形的接待处,接待处与展示区是开放流通性的,接待处C面有一扇门是通会客厅的,会客厅地面材质采用了青灰砖,与展区也是相通的。进入工作区(设计部)分三个区域,两面靠近窗户,采光比较强显得更亮堂,地面运用了500*500的黑色玻化砖,总经理室,财务室,资料室和会议室在平面的构造上形成了四分之一的圆,加大了利用空间,学生工作室 与办公室相连通,学生能够随时与老师讨论,学生工作区与展区在一起,利用了窗户的采光,解决了采光问题,白色的工作桌与彩色的座椅,这样的搭配更显活力与青春。资料室右边的木质储物柜为同学与老师提供物品储藏空间,同时玻璃书架尤为大家阅读资料,展示区则运用了木材与大理石作为展台玻璃作为展架,展示学生的作品,为了满足人们在室内进行交流、工作、学习、休息等活动要求,在会议室后面腾出了一个长有13米左右宽2。5米左右的休息室,可以在那看看书,吃吃午餐等,铺砖运用了人造草坪的材质,贴切了大自然,使人感到舒适,心情平静下来,工作效率也得以提高。 本设计做到了一简洁明快为主要特色,重视室内使用功能,强调

室内布置应按功能区分的原则进行,家具布置与空间密切配合,这样不仅节约空间和材质,而且使室内布置清爽有序,富有现代感和整体美,体现了现代派所追求的“少就是多”的简约化设计,但本设计中也存在许多不足,光源的设置还不到位,考虑的不够完善,有些空间没有充分利用,存在死角,在以后的学习中努力的充实自己,完善自己的设计意图。

工作设计概念与内容

工 业 设 计 的 概 念 与 内 容 一、工业设计的概念(industrial design) 设计是人类为了实现某种特定的目的而进行的创造性活动,它包含于一切人造物品的形成过程当中。工业设计概念:目前被广泛采用的定义是国际工业设计协会联合会(ICSID)在1980年的巴黎年会上为工业设计下的修正定义:"就批量生产的工业产品而言,凭借训练、技术知识、经验及视觉感受而赋予材料、结构、形态、色彩、表面加工及装饰以新的品质和资格,叫做工业设计。" 1.传统工业设计 工业设计真正为人们所认识和发挥作用是在工业革命爆发之后,以工业化大批量生产为条件发展起来的。当时大量工业产品粗制滥造,已严重影响了人们的日常生活,工业设计作为改变当时状况的必然手段登上了历史的舞台。传统的工业设计是指对以工业手段生产的产品所进行的规划与设计,使之与使用的人之间取得最佳匹配的创造性活动。从这个概念分析工业设计的性质:第一,工业设计的目的是取得产品与人之间的最佳匹配。这种匹配,不仅要满足人的使用需求,还要与人的生理、心理等各方面需求取得恰到好处的匹配,这恰恰体现了以人为本的设计思想。第二,工业设计必须是一?quot;创造性活动"。工业设计的性质决定了它是一门覆盖面很广的交叉融汇的科学,涉足了众多学科的研究领域,有如工业社会的粘合剂,使原本孤立的学科诸如:物理、化学、生物学、市场学、美学、人体工程学、社会学、心理学、哲学等等,彼此联系、相互交融,结成有机的统一体。实现了客观地揭示自然规律的科学与主观、能动地进行创造活动的艺术的再度联手。 2.现代工业设计 传统工业设计的核心是产品设计。伴随着历史的发展,设计内涵的发展也趋于更加广泛和深入。现在,人类社会的发展已进入了现代工业社会,设计所带来的物质成就及其对人类生存状态和生活方式的影响是过去任何时代所无法比拟的,现代工业设计的概念也由此应运而生。现代工业设计可分为两个层次:广义的工业设计和狭义的工业设计。 广义工业设计(Generalized Industrial Design) 是指为了达到某一特定目的,从构思到建立一个切实可行的实施方案,并且用明确的手段表示出来的系列行为。它包含了一切使用现代化手段进行生产和服务的设计过程。 狭义工业设计(Narrow lndustrial Design) 单指产品设计,即针对人与自然的关联中产生的工具装备的需求所作的响应。包括为了使生存与生活得以维持与发展所需的诸如工具、器械与产品等物质性装备所进行的设计。产品设计的核心是产品对使用者的身、心具有良好的亲和性与匹配。 狭义工业设计的定义与传统工业设计的定义是一致的。由于工业设计自产生以来始终是以产品设计为主的,因此产品设计常常被称为工业设计。 二、工业设计的分类

办公室设计说明

办公室设计说明 设计目的:本人的设计主题是设计公司办公室设计,现如今,随着社会的发展,工作节奏越来越快,人们在办公室里的时间甚至比在家的都多。所以要求设计师营造一种舒适的工作环境。有利于减轻奔波在城市人们的压力。有利于他们更好地工作。办公室空间更需要人性化的设计、在简单中丰富起来。丰富的集中一体化,做到更好的统一。 设计说明:在这个办公室设计中,甲方要求,有功能区设置,有董事长一间,董事长是本公司中最高的职务,所以在我的设计中给他选择了一个比较好的朝向,采光比较好、地面采用仿古显纹复合强化浅色木地板。防滑耐磨。几何式的办公桌庄严不失人性化。自然的美巧妙的运用到设计之中,突显对美好生活的向往。放松工作时的状态,经理两间,装修风格跟董事长相符,比较统一。会议室一间,在平面功能上。考虑了合理的行动路线,东面墙对应窗的位置设计了落地的玉砂玻璃隔墙,以满足展示区的采光要求。

加以灰、黑、红几种色彩的组合,虚实相应,使整个空间显得简练而具有动感。 会议室是个比较严肃的地方。所以色调比较偏冷,地面是花纹地砖,比较耐磨。提高工作效率,地面采用地砖、石材质感的极力表现,突显自然美。茶水间是人们休息的地方,所以选择了靠窗户的位置,可以让人在休息中看看窗外的风景,放松下心情。 设计风格:属于混搭的风格,简单而有品位,色调冷暖结合。办公环境的风格取向、舒适与否对于提升员工的工作效率和体现企业文化起到至关重要的作用。办公室整体色调采用蓝灰调,使员工办公的心情能够沉静下来,工作效率自然可以得到提高。有一位建筑大师曾说过:“当绿化、光和风根据人的意念从原先自然中抽象出来,它们就趋向天堂”。我们在室内引入天光设置了自然植物,将室外的感觉引入室内空间,使办公环境更具活力。

设计师工作思路范文

( 工作计划 ) 单位:_________________________姓名:_________________________日期:_________________________ 精品文档 / Word文档 / 文字可改 设计师工作思路范文 Design ideas

设计师工作思路范文 奋斗目标: 1、加强平面设计专业的学习与研究,了解本行业市场信息,从而慢慢创新新的设计理念。 2、业余学习绘画、多看相关书籍,努力以不断更新的知识理论武装自己,以期能不断以新的方式和理念适应工作中遇到的每一个问题,能够真正做到与时俱进。 一、引言 转眼间20xx年已经成为过去,加入“昆山方舟广告传媒有限公司”也快1个月了吧;在此,感谢管经理给予的这个工作机会,感谢家人,感谢他们在这些日子里工作上的帮助以及生活上的关怀。总体来说,这一年是我自身成长和发展比较快的一年,收获良多。昨天已经成为过去,未来还要靠自己创造和掌握,要时时崩紧前进的

弦。因此在今后的工作中,除了一如既往地发挥自己的长处和努力工作外,更要进一步严格要求自己,提高自己,克服困难,改正在工作中发现和存在的不足,尽努力贡献自己的能量,在工作中创造和实现自己的价值,为我们“昆山方舟广告传媒有限公司”更加美好的明天做出自己应有的贡献。本人就近期的工作计划向公司经理汇报如下: 二、自我期许 1、拥有持之以恒的毅力。 2、对自己有足够的自信,善待他人。 3、能够学以致用。 4、每天自我反省。 5、更加勤奋,勤能补拙,勤奋出真知。 6、坚持,一定要坚持,坚持往往就是机遇,坚持就是胜利。 5、了解熟悉各类产品的材料。 三、主要学习内容 1、清楚本厂的设计风格及现有产品的风格。

华为工作分析与工作设计说明

华为工作分析与工作设计 一、工作分析 (一)操作指南 1、职位分析 职位分析就是收集、分析、整理与职位相关的信息,对职位进行准确描述的过程。 (1)职位分析的原则 -分析而非罗列 职位分析将职位分解成若干组成要素,检验这些要素,再将这些要素按照容易理解的方式重新组合起来。没有分析,职位描述就成了一堆毫无关联的、琐碎的工作的罗列。 -分析的是职位而不是任职者 职位分析不在意任职者的绩效、风格、个性、职业经历或其他有关人的因素,关注的是职位本身。涉及到职位的现有任职者,只是因为他/她最了解该职位。 -基于事实而不是判断 职位分析的目的不在于评判职位,而是尽可能清晰地了解事实。职位分析者只提供事实证据,职位分析的结果——职位说明书可以为他人提供评判的依据。职位分析者的观点,如关于职位需要的经验和技能,可能是比较深刻而有意义的,但这已经超出了职位分析的围。 -描述的是职位现状而非假设 职位分析者的责任是了解职位在某一特定时间的状况。职位描述不应成为对以往职位职责或未来设想的描述。 (2)职位分析流程 职位分析是一个了解职位,并将其信息以便于他人理解的方式描述出来的过程。职位分析一般包括以下步骤:收集有关职位容以及职位间关系的信息;分析、整理这些信息;将这些信息以简明、系统的方式表示出来。主要采用职位说明书的格式。 (3)职位分析的容 职位分析的容包括:基础信息、职位目的、工作汇报关系、职位围、应负责任与衡量指标、任职要求、工作依据。 2、职位类别

为便于各项人力资源工作的开展,根据职位的工作性质进行归类。华为公司职位类别分为三个层次,第一层次称为族,第二层次称为类,第三层次称为子类。职类划分会根据业务开展的需要,定期进行修订。 管理族:对团队目标的达成负直接责任。掌握一定的管理知识,管理一定围的预算和资源,运用计划、组织、协调、监控等手段,带领团队达到组织目的的职位。 营销族:直接面对客户承担销售目标,或负责市场发展战略及策划、市场开拓等工作的职位。 技术族:直接面对产品(含服务),要求具备较多的专业技术知识,从事解决产品(含服务)在研究、开发、设计、测试及生产过程中具体问题的职位。 专业族:要求具备较多专业知识,从事解决相关业务领域具体问题,为直接创造价值岗位提供支持的职位。 操作族:依据明确的工作指南或操作规程,从事任务明确、结果确定且工作容重复性高的职位。 3、工作分析方法 (1)定性分析 ○1观察法 ○2面谈法 ○3问卷调查法 ○4员工记录法 ○5工作实践法 (2)定量分析 ○1工作分析计划表分析法 ○2职能工作分析法 ○3职位分析问卷法 ○4职业测定制度 4、职位评估 职位评估是通过对各职位进行比较或按预定的尺度加以衡量,以确定职位对组织的相对价值的过程。 HAYGROUP多年的实践经验表明,有三种基本的职位容要素(知识技能、解决问题、应负责任)是所有职位共有的,可以通过它们进行可接受的职位大小的

工作设计的种时间设计

工作设计的种时间设计 Document number:BGCG-0857-BTDO-0089-2022

工作设计的4种时间设计 一。弹性工作制 企业规定一个核心工作时间,这个核心工作时间是固定且必须遵守的。员工可以自由选择上班或下班时间,但所有的时间加起来必须达到8小时。比如,某公司核心工作时间是10:00-16:00,中间休息一小时。员工可以8:00上班,17:00下班。也可以9:00上班,18:00下班。这种方法充分考虑到了员工的具体情况。比如员工住的远就可以来迟一点。员工在感到公司为其着想而心存感激的时候,也降低了他们因为路远或交通堵塞迟到在考勤上的不公平感。 二。远程办公 信息技术的发展,可以实现在线沟通。员工可以选择不来公司上班,而是在家里办公。有事的时候通过电话或网络沟通,比如电子邮件,ICQ。有利之处在于公司可以减少办公空间,降低公司成本。不利之处在于管理上会有麻烦。如果公司要开会,员工还要花时间赶到现场。当然有条件的可以采用视频会议系统。 三。工作分担 这是一种很新的时间设计方案。把一个全职工作分开由两个兼职来做,这样每个兼职就有更多的时间来处理个人事情。这种方案适合于双就业夫妇,特别是适合于有小孩要照顾,或家务繁多的夫妇。这种方法一般适用于一般的岗位,不太适用于管理岗位。 四。紧缩工作周

减少每周的工作天数,增加每天的工作时间。比如员工一周五天,每天工作8小时,则共要工作40个小时。按照紧缩工作周的方法可以设计为每周工作4天,每天工作10小时。当然,由于每天的工作时间增加,会因为疲劳的原因使员工的工作效率下降。 或许也有人考虑过增加每周工作天数,减少每天工作时间。不过这种方法倒没有正式提出来,毕竟,在生活压力不到极端的时候,工作狂也是不多的。

设计部岗位描述

设计部岗位描述 【部门职责】 1、接待装修客户来访,并做好详细记录; 2、与客户良好沟通,准确理解客户意图,促成装修交易; 3、建立健全部门管理制度并自觉维护执行; 4、合理分工、密切配合、与市场部、工程部协调互动完成工作; 5、保证内部工作秩序,环境卫生; 6、认真解答客户疑问,按规定格式签下定单; 7、对接收的任务单仔细审核,准确设计,按公司统一报价单报价; 8、每个工程设计资料备份存档,同类风格汇总,不断分析总结; 9、认真听取其它部门意见,深入社会和施工现场,增强设计和服务水平; 10、完成公司规定的其它工作; 【岗位设置】 设计部总监岗位职责: 1、在总经理领导下,全面负责设计部的各项工作。 2、负责制定修改内部管理制度和工作秩序,并监督执行。 3、带领部门人员实现公司的各项任务指标。 4、多方收集设计资料和信息,了解设计发展趋势,为企划提供相关信息。 5、负责审核派单工作,准确理解客户意图。 6、经常检查、督促、协调设计师的工作,对其设计图纸、预算结果负领导 责任。 7、就本部门人员的薪酬分配、培训、晋升等提出建议方案;对设计师进行 专业培训;对展会和宣传工作进行技术指导和支持;对大单的图纸审核把关; 对公司重大工程或样板间的组织实施工作;对公司的设计竞赛进行内部标准 建立、评估等工作;分析部门人员需求情况,制定评估办法、方案,参与招 聘和考评工作。 8、按时召开部门例会,指导员工工作,进行工作总结。 9、每月25日向总经理提供工作总结、下月工作计划,并口头汇报思想。 10、完成公司规定的其它工作。 设计主管岗位职责: 1、全面组织本组工作(分工合作)。 2、在部门范围内贯彻公司有关规定。 3、落实工作任务到本组员工。

如何设计岗位说明书

学习导航 通过学习本课程,你将能够: ● 了解岗位说明书的构成; ● 学会撰写岗位说明书; ● 分析岗位的变化轨迹。 如何设计岗位说明书 一份完整的岗位说明书应该包括:基本资料、工作内容、任职资格、工作场所、考核标准以及备注六大部分。 【案例】 某公司销售工程师职务说明书 一、基本资料 1.职务名称:销售工程师 2.直接上级:客户总监 3.所属部门:客户中心 4.工资等级:B职系四等 5.工资水平: 6.分析日期:2004.4 7.辖员人数:8.定员人数:1人9.工作性质:业务人员 10.分析人员:11.批准人: 二、工作内容 1.工作概要 负责本公司产品的销售。 2.职务说明(逐项说明工作任务、职责、权限、时间消耗) 编号工作内容及职责权限耗时(%) 1与市场部共同组织本公司产品市场策划协助 2开发有本公司产品需求的用户:电话联系、演示、安装试 用软件 负责 3对有本公司产品需求的用户进行跟踪负责4做好工作日记和客户档案执行5为普通用户制作方案说明书和价格负责 6协同技术中心工程师为有特殊需求的用户制作方案说明 书及报价 协助 7处理顾客的售后服务、技术支持事宜。对不能解决的问题, 提交技术中心,并协助其工作 协助 8完成岗位目标和上级下达的其他任务执行 3.工作关系 实施监督在规定权限内,自行处理有关工作,遇特殊情况向部门主管请示 所受监督客户总监 职位关系可直接升迁的职位部门经理可相互转换的职位销售代表

可升迁至此的职位 三、任职资格 所需学历及专业 最低学历 专业 其他说明 大专以上学历 计算机 其他专业同等学历也可 所需技能培训 (方可上岗) 培训时间 培训科目 三个月 企业文化、计算机 所需经验 一年以上相关工作经验 一 般 能 力 项 目 激 励能 力 计划能 力 人际关 系 协调能 力 实施能 力 信 息能 力 公共关 系 冲突管 理 组织人 事 指导能 力 领导能 力 沟通能 力 需求程度(满分 为5分) 3 3 3 3 3 3 3 3 基本素质 1.大学本科以上学历 2.计算机及相关专业 3.认同公司的企业文化和经营理念 4.有敬业精神,团队合作精神强 5.遵守公司的各项规章制度 个 个性特征 1.性格开朗、自信、热情 2.有较强的沟通能力、口才好 3.心理承受力强,敢于接受挑战和压力,勇于开拓创新 4.有合作精神 5.心胸开阔 体能要求:身体健康,能承受快节奏、满负荷的工作,保证经常加班。 四、工作场所 工作时间 工作环境和条件 工作均衡性 早9:00-晚6:00 经常加班 室内、室外各一半 比较忙碌 五、考核标准 1.工作绩效 2.工作态度 3.工作能力 4.专业知识 5.责任感 6.企业文化 7.发展潜力 8.协调合作 9.品德言行 10.成本意识 从以上10个方面进行考核 六.备注 直接上级: 该职务执行人: 年 月 日 以下是对上述岗位说明书模板分析得出的结果。 一、基本资料 1.工资

课程设计理念及思路培训资料

课程设计理念及思路

本课程的设计基本理念是:以就业为导向、应用为目标、实践为主线、能力为中心、企业指导、参与课程的开发。在进行本课程教学设计时,充分考虑了如下教学理念: ①学生在校学习与实际工作的一致性; ②工学交替的实施; ③任务驱动、项目导向的教学; ④教、学、做一体化的场地; ⑤以学生为中心的理念; ⑥把现代教育技术手段的应用融入到课堂等教学理念,进行了本课程的教学设计。 1、以就业为导向 本课程在设计时就充分考虑了学生就业的需求,因此在课程设计中突出了在能力培养上,注重环境的建设。根据本专业特点的要求,利用校内外实习基地,坚持边学边做,反复训练,理论与实际相结合,突出能力的培养,提高学生“通”与“专”两方面的能力,让学生广泛参与社会实践活动,培养学生动手能力。 2、以应用为目标 围绕应用性人才培养目标,深入企业进行调研,广泛征求意见,对课程内容进行模块化重组。与传统学科型课程不同,基于职业岗位能力的课程设计采用的是倒推法,即从企业上岗标准出发,来构建课程模块,设计教学活动。 3、以实践为主线 简化不必要的理论,坚持实践为重、理论够用的原则进行课程建设。课程教学中首先遵循理论来自于实践的原则,采用先进的现代教育技术,制作高水平的教学课件,插入大量的案例教学,把真实的情境搬进课堂,教学举例选用外贸单位的实例,以增强知识点的实践性,激发学生的学习兴趣。 4、以能力为中心 坚持以能力为中心、以学生为主体的原则来设计课堂教学,在学生就业岗位需求分析的基础上来确立能力目标,将能力培养贯穿于课程教学之中,实现由传统的以教师为主体的知识传授型教学模式向以学生为主体的能力培养型教学模式的转变。突破原课程以教为主的传统教学模式,重点是以工作过程导向的教学活动设计,融教、学、做于一体,边干边学,工学交替,在干中学,学中干。 5、以任务驱动、项目驱动、角色扮演、案例教学法引导学生在教学过程中进行“手—脑—心”全方位的学习。 6、注重现代教学资源建设和使用,提高教学质量 注重教学内容先进与实用。教学技术上将“平面教学”与“立体化教学”技术有效应用,即教师课堂上“平面”讲授基础理论的同时,多采用多媒体技术、教学短片、图片和难点演示等“立体化”教学手段将生产现场逼真地播放给学生观看。 一、课程设计的理念

设计师工作思路范文(2021版)

设计师工作思路范文(2021版) Model article of designer's working ideas ( 工作计划 ) 汇报人:_________________________ 职务:_________________________ 日期:_________________________ 适用于工作计划/工作汇报/新年计划/全文可改

设计师工作思路范文(2021版) 奋斗目标: 1、加强平面设计专业的学习与研究,了解本行业市场信息,从而慢慢创新新的设计理念。 2、业余学习绘画、多看相关书籍,努力以不断更新的知识理论武装自己,以期能不断以新的方式和理念适应工作中遇到的每一个问题,能够真正做到与时俱进。 一、引言 转眼间20xx年已经成为过去,加入“昆山方舟广告传媒有限公司”也快1个月了吧;在此,感谢管经理给予的这个工作机会,感谢家人,感谢他们在这些日子里工作上的帮助以及生活上的关怀。总体来说,这一年是我自身成长和发展比较快的一年,收获良多。昨天已经成为过去,未来还要靠自己创造和掌握,要时时崩紧前进的

弦。因此在今后的工作中,除了一如既往地发挥自己的长处和努力工作外,更要进一步严格要求自己,提高自己,克服困难,改正在工作中发现和存在的不足,尽努力贡献自己的能量,在工作中创造和实现自己的价值,为我们“昆山方舟广告传媒有限公司”更加美好的明天做出自己应有的贡献。本人就近期的工作计划向公司经理汇报如下: 二、自我期许 1、拥有持之以恒的毅力。 2、对自己有足够的自信,善待他人。 3、能够学以致用。 4、每天自我反省。 5、更加勤奋,勤能补拙,勤奋出真知。 6、坚持,一定要坚持,坚持往往就是机遇,坚持就是胜利。 5、了解熟悉各类产品的材料。 三、主要学习内容 1、清楚本厂的设计风格及现有产品的风格。

相关文档
最新文档