1>DrawText函数简单介绍

这个函数的作用很简单,就是在指定的区域内输出格式化的文本。

函数原型:

int DrawText(

HDC hDC,

LPCTSTR lpString,

int nCount,

LPRECT lpRect,

UNIT uFormat

);

hDC是设备上下文句柄。lpString指向将要绘制的UNICODE文本。nCount是要输出的字符数,如果nCount = -1,则Windows自动计算字符数,不过此时lpString所指向的必须是以NULL结尾的字符串。lpRect指向rect结构体,指定了文本格式化的矩形区域。uFormat是格式化标记,也是这里面稍显复杂的一个参数。

下面是几个常用的格式化标记:

DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。

DT_CENTER:指定文本水平居中显示。

DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。

DT_SINGLELINE:单行显示文本,回车和换行符都不断行。

2>TextOut函数简单介绍

该函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置。

BOOL TextOut(

HDC hdc, // 设备描述表句柄
int nXStart, // 字符串的开始位置 x坐标
int nYStart, // 字符串的开始位置 y坐标
LPCTSTR lpString, // 字符串
int cbString // 字符串中字符的个数
);
参数
hdc
[输入] 设备环境的句柄
nXStart
[输入] 指定用于字符串对齐的基准点的逻辑X坐标。
nYStart
[输入] 指定用于字符串对齐的基准点的逻辑Y坐标。
lpString
[输入] 指向将被绘制字符串的指针。此字符串不必为以\0结束的,因为cbString中指定了字符串的长度。
cbString
[输入] 指定了字符串的长度。

返回值

如果函数调用成功,返回值为非零值。
如果函数调用失败,返回值为0。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
对基准点的解释依赖于当前字符对齐模式,一个应用程序可以调用GetTextAlign来获得该模式,调用SetTextAlign来更改该模式。
缺省地,此函数不能使用和修改当前位置,但一个应用程序可以在每次在指定设备环境中调用TextOut之前,通过将参数fMode设为TA_UPDATECP值来调用SetTextAlign,以允许系统在调用TextOut时修改当前位置,当上述标志设置时,系统会忽略随后调用TextOut中的nXStart和nYStart值。
当把函数TextOut放入一个路径括号内时,系统为包含每一个字符并加上字符值的TrueType正文产生一个路径,产生的区域是字符框加上正文,而不是正文本身,可以在把TextOut放入路径括号之前设置背景模式为透明的,这样就能得到由TrueType正文的轮廓封闭而成的区域。下面是说明这个过程的例程代码:
GetClientRect(hwnd, &r);
BeginPath(hdc);
TextOut(hdc, r.left, r.top, "Defenestration can be hazardous", 4);
EndPath(hdc);
SelectClipPath(hdc, RGN_AND);
FillRect(hdc, &r, GetStockObject(GRAY_BRUSH))。
另:wsprintf();
作用
函数wsprintf()将一系列的字符和数值输入到缓冲区。
输出缓冲区里的的值取决于格式说明符(即"%")。
如果写入的是文字,此函数给写入的文字的末尾追加一个'\0'。
函数的返回值是写入的长度,但不包括最后的'\0'。
语法:
int wsprintf(
LPTSTRlpOut, // 输出缓冲区,最大为1024字节
LPCTSTRlpFmt, // 格式字符串
...) // 需输出的参数;
;多少个参数都可以的
不过如果缓冲区和写进缓冲区的数据类型一样,可以不使用格式字符串。例: char* a=new char;
char* b="abcd";
wsprintf(a,b);
cout<<a<<endl;
输出结果为: abcd
我们在接触C语言的时候还接触过一个sprintf()的函数,
用法和wsprintf()基本一样,区别在于:
wsprintf()包含在头文件windows.h中
sprintf()包含在头文件stdio.h中。
wsprintf其实分为 wsprintfA 和 wsprintfW,前者对应 sprintf,后者对应 wsprintf。
wsprintf 有 1024 字符限制,而且不支持浮点数。
所以注意了,该函数不支持浮点数的输入输出
用法
nt wsprintf( LPTSTR lpOut, // 输出缓冲区,最大为1024字节
LPCTSTR lpFmt, // 格式字符串 ,
... // 需输出的参数);
使用此函数可将数字转为字符串;
例:int x=6;
LPTSTR szBuffer=new TCHAR[1024];);//定义并申请输入缓冲区空间
wsprintf(szBuffer,“%d“,x);//应用

3>SetTextAlign
功能:
该函数为指定设备环境设置文字对齐标志。
原形:
UINT SetTextAlign(
HDC hdc,     // 设备环境句柄
UINT fMode   // 文本对齐选项
);
参数:
hdc
[输入] 设备环境句柄.
fMode
[输入] 使用下面的列表中的掩码指定文本对齐方式。在横向对齐和纵向对齐标志中只能选择一个。另外,两个标志只能选择一个来改变当前的位置。
TA_BASELINE
基准点在正文的基线上。
TA_BOTTOM
基准点在限定矩形的下边界上。
TA_TOP
基准点在限定矩形的上边界上。
TA_CENTER
基准点与限定矩形的中心水平对齐。
TA_LEFT
基准点在限定矩形的左边界上。
TA_RIGHT
基准点在限定矩形的右边界上。
TA_RTLREADING
对于中东Windows版,正文从右到左的阅读顺序排列,与缺省的从左到右正好相反。
只有当被选择的字体是Hebrew或Arabic时,此值才有用。
TA_NOUPDATECP
每次文字输出调用后当前基准点不改变。基准点是传输给正文输出函数的位置。
TA_UPDATECP
每次文字输出调用后当前基准点改变。当前位置作为基准点。
若当前字体有一条缺省的垂直基线(如Kanji),下列值用于取代TA_BASELINE和TA_CENTER,各值含义为:
VTA_BASELINE
基准点在正文的基线上。
VTA_CENTER
基准点与限定矩形的中心垂直对齐。
缺省值是TA_LEFT, TA_TOP和TA_NOUPDATECP。
如果函数调用成功,返回值是文字对齐方式的前一个设置;
如果函数调用失败,返回值是GDI_ERROR。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
4>GetSystemMetrics ()

功能:用于得到被定义的系统数据或者系统配置信息.
语法:
int WINAPI GetSystemMetrics( __in intnIndex);
下面是GetSystemMetrics函数参数nIndex的定义:
SM_ARRANGE 标志用于说明系统如何安排最小化窗口..详细请参看下方备注.:
根据显示器显示的不同,系统数据可能有所不同.
该SM_ARRANGE设置指定系统如何安排最小化窗口,并包含一个起始位置和方向。起始位置可为下列值之一。
Value
Meaning
ARW_BOTTOMLEFT
开始在左下角的屏幕(默认位置) 。
ARW_BOTTOMRIGHT
开始在右下角的屏幕上。相当于ARW_STARTRIGHT.
ARW_HIDE
在屏幕可见区域,隐藏并最小化窗口。.
ARW_TOPLEFT
从左上角的屏幕上。相当于ARV_STARTTOP.
ARW_TOPRIGHT
相当于ARW_STARTTOP | SRW_STARTRIGHT 。
方向的安排可以为下列值之一。
Value
Meaning
ARW_DOWN
纵向排列,从上到下。
ARW_LEFT
水平排列,从左到右。
ARW_RIGHT
水平排列,从右到左。
ARW_UP
纵向排列,从下到上。
SM_CLEANBOOT 返回系统启动方式
0 正常启动
1 安全模式启动
2 网络安全模式启动
SM_CMOUSEBUTTONS 返回值为系统支持的鼠标键数,返回0,则系统中没有安装鼠标。
SM_CXBORDER,
SM_CYBORDER 返回以像素值为单位的Windows窗口边框的宽度和高度,如果Windows的为3D形态,则等同于SM_CXEDGE参数
SM_CXCURSOR,
SM_CYCURSOR 返回以像素值为单位的标准光标的宽度和高度
SM_CXDLGFRAME,
SM_CYDLGFRAME 等同与SM_CXFIXEDFRAME and SM_CYFIXEDFRAME
SM_CXDOUBLECLK,
SM_CYDOUBLECLK 以像素值为单位的双击有效的矩形区域
SM_CXEDGE,SM_CYEDGE 以像素值为单位的3D边框的宽度和高度
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME 围绕具有标题但无法改变尺寸的窗口(通常是一些对话框)的边框的厚度
SM_CXFRAME,SM_CYFRAME 等同于SM_CXSIZEFRAME and SM_CYSIZEFRAME
SM_CXFULLSCREEN,
SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度
SM_CXHSCROLL,
SM_CYHSCROLL 水平滚动条的高度和水平滚动条上箭头的宽度
SM_CXHTHUMB 以像素为单位的水平滚动条上的滑动块宽度
SM_CXICON,SM_CYICON 系统缺省的图标的高度和宽度(一般为32*32)
SM_CXICONSPACING,
SM_CYICONSPACING 以大图标方式查看Item时图标之间的间距,这个距离总是大于等于
SM_CXICON and SM_CYICON.
SM_CXMAXIMIZED,
SM_CYMAXIMIZED 处于顶层的最大化窗口的缺省尺寸
SM_CXMAXTRACK,
SM_CYMAXTRACK 具有可改变尺寸边框和标题栏的窗口的缺省最大尺寸,如果窗口大于这个
尺寸,窗口是不可移动的。
SM_CXMENUCHECK,
SM_CYMENUCHECK 以像素为单位计算的菜单选中标记位图的尺寸
SM_CXMENUSIZE,
SM_CYMENUSIZE 以像素计算的菜单栏按钮的尺寸
SM_CXMIN,SM_CYMIN 窗口所能达到的最小尺寸
SM_CXMINIMIZED,
SM_CYMINIMIZED 正常的最小化窗口的尺寸
SM_CXMINTRACK,
SM_CYMINTRACK 最小跟踪距离,当使用者拖动窗口移动距离小于这个值,窗口不会移动。
SM_CXSCREEN,
SM_CYSCREEN 以像素为单位计算的屏幕尺寸。
SM_CXSIZE,SM_CYSIZE 以像素计算的标题栏按钮的尺寸
SM_CXSIZEFRAME,
SM_CYSIZEFRAME 围绕可改变大小的窗口的边框的厚度
SM_CXSMICON,
SM_CYSMICON 以像素计算的小图标的尺寸,小图标一般出现在窗口标题栏上。
SM_CXVSCROLL,
SM_CYVSCROLL 以像素计算的垂直滚动条的宽度和垂直滚动条上箭头的高度
SM_CYCAPTION 以像素计算的普通窗口标题的高度
SM_CYMENU 以像素计算的单个菜单条的高度
SM_CYSMCAPTION 以像素计算的窗口小标题栏的高度
SM_CYVTHUMB 以像素计算的垂直滚动条中滚动块的高度
SM_DBCSENABLED 如果为TRUE或不为0的值表明系统安装了双字节版本的USER.EXE,为FALSE或0则不是。
SM_DEBUG 如果为TRUE或不为0的值表明系统安装了debug版本的USER.EXE,为FALSE或0则不是。
SM_MENUDROPALIGNMENT 如果为TRUE或不为0的值下拉菜单是右对齐的否则是左对齐的。
SM_MOUSEPRESENT 如果为TRUE或不为0的值则安装了鼠标,否则没有安装。
SM_MOUSEWHEELPRESENT 如果为TRUE或不为0的值则安装了滚轮鼠标,否则没有安装。(Windows NT only)
SM_SWAPBUTTON 如果为TRUE或不为0的值则鼠标左右键交换,否则没有。
index值:
SM_CXSCREEN = 0 'X Size of screen
SM_CYSCREEN = 1 'Y Size of Screen
SM_CXVSCROLL = 2 'X Size of arrow in vertical scroll bar.
SM_CYHSCROLL = 3 'Y Size of arrow in horizontal scroll bar
SM_CYCAPTION = 4 'Height of windows caption
SM_CXBORDER = 5 'Width of no-sizable borders
SM_CYBORDER = 6 'Height of non-sizable borders
SM_CXDLGFRAME = 7 'Width of dialog box borders
SM_CYDLGFRAME = 8 'Height of dialog box borders
SM_CYHTHUMB = 9 'Height of scroll box on horizontal scroll bar
SM_CXHTHUMB = 10 ' Width of scroll box on horizontal scroll bar
SM_CXICON = 11 'Width of standard icon
SM_CYICON = 12 'Height of standard icon
SM_CXCURSOR = 13 'Width of standard cursor
SM_CYCURSOR = 14 'Height of standard cursor
SM_CYMENU = 15 'Height of menu
SM_CXFULLSCREEN = 16 'Width of client area of maximized window
SM_CYFULLSCREEN = 17 'Height of client area of maximized window
SM_CYKANJIWINDOW = 18 'Height of Kanji window
SM_MOUSEPRESENT = 19 'True is a mouse is present
SM_CYVSCROLL = 20 'Height of arrow in vertical scroll bar
SM_CXHSCROLL = 21 'Width of arrow in vertical scroll bar
SM_DEBUG = 22 'True if deugging version of windows is running
SM_SWAPBUTTON = 23 'True if left and right buttons are swapped.
SM_CXMIN = 28 'Minimum width of window
SM_CYMIN = 29 'Minimum height of window
SM_CXSIZE = 30 'Width of title bar bitmaps
SM_CYSIZE = 31 'height of title bar bitmaps
SM_CXMINTRACK = 34 'Minimum tracking width of window
SM_CYMINTRACK = 35 'Minimum tracking height of window
SM_CXDOUBLECLK = 36 'double click width
SM_CYDOUBLECLK = 37 'double click height
SM_CXICONSPACING = 38 'width between desktop icons
SM_CYICONSPACING = 39 'height between desktop icons
SM_MENUDROPALIGNMENT = 40 'Zero if popup menus are aligned to the left of the memu bar item. True if it is aligned to the right.
SM_PENWINDOWS = 41 'The handle of the pen windows DLL if loaded.
SM_DBCSENABLED = 42 'True if double byte characteds are enabled
SM_CMOUSEBUTTONS = 43 'Number of mouse buttons.
SM_CMETRICS = 44 'Number of system metrics
SM_CLEANBOOT = 67 'Windows 95 boot mode. 0 = normal, 1 = safe, 2 = safe with network
SM_CXMAXIMIZED = 61 'default width of win95 maximised window
SM_CXMAXTRACK = 59 'maximum width when resizing win95 windows
SM_CXMENUCHECK = 71 'width of menu checkmark bitmap
SM_CXMENUSIZE = 54 'width of button on menu bar
SM_CXMINIMIZED = 57 'width of rectangle into which minimised windows must fit.
SM_CYMAXIMIZED = 62 'default height of win95 maximised window
SM_CYMAXTRACK = 60 'maximum width when resizing win95 windows
SM_CYMENUCHECK = 72 'height of menu checkmark bitmap
SM_CYMENUSIZE = 55 'height of button on menu bar
SM_CYMINIMIZED = 58 'height of rectangle into which minimised windows must fit.
SM_CYSMCAPTION = 51 'height of windows 95 small caption
SM_MIDEASTENABLED = 74 'Hebrw and Arabic enabled for windows 95
SM_NETWORK = 63 'bit o is set if a network is present.
SM_SECURE = 44 'True if security is present on windows 95 system
SM_SLOWMACHINE = 73 'true if machine is too slow to run win95.
用法:
GetSystemMetrics函数可以获取系统分辨率,但这只是其功能之一,GetSystemMetrics函数只有一个参数,称之为「索引」,这个索引有75个标识符,通过设置不同的标识符就可以获取系统分辨率、窗体显示区域的宽度和高度、滚动条的宽度和高度。
为了使GetSystemMetrics的功能,我们以获取系统分辨率为例,并将其中的两个值用TextOut输出到窗体中。
第一步:用GetSystemMetrics获取屏幕的宽度和高度
1. int x, y;
2. x = GetSystemMetrics(SM_CXSCREEN);//屏幕宽度
3. y = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
第二步:用TextOut输出分辨率
因为x和y的值是int类型,所以无法用TextOut直接输出,需要借助wsprintf函数,在C中,可以用printf函数直接将字符串输出到屏幕上,但wsprintf是将字符串输出到一个char字符数组中,而且wsprintf会返回输出字符串的长度。
1.TCHARszBuffer[10];
2.intx =1024;
3.inty =768;
4.intiLength;
5.iLength = wsprintf(szBuffer, TEXT("%5d"),x);
小提示:szBuffer数组的长度一定要大于x的长度,否则不能输出。
以上这段代码,是用wsprintf将x的值存入szBuffer中,然后在iLength中存放x的长度。这一步实际上解决了两个问题,将int类型的屏幕宽度转为了TCHAR类型,TextOut函数可以直接输出TCHAR类型字符串,而且获取了字符串的长度,那么我们就可以用TextOut函数在窗体中输出屏幕的宽度:
TextOut(hdc, 0, 0, szBuffer, iLength);

5>GetClientRect
功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对窗口客户区的左上角而言的,因此左上角坐标为(0,0)
原形:

在Win32 SDK, 该API函数原型为
BOOL GetClientRect(
HWND hWnd, // 窗口句柄
LPRECT lpRect // 客户区坐标
);
在MFC中,该函数的原型为void GetClientRect(LPRECT lpRect) const;
参数:
hWnd:是程序窗口的句柄。
lpRect:是一个指针,指向一个RECT类型的rectangle结构。该结构有四个LONG字段,分别为left、top、right和bottom。GetClientRect将这四个字段设定为窗口显示区域的尺寸。left和top字段通常设定为0。right和bottom字段设定为显示区域的宽度和高度(像素点数)。 也可以是一个CRect对象指针。CRect对象有多个参数,与RECT用法相同。
函数的作用总的来说就是把客户区的大小写进第二个参数所指的Rect结构当中。
返回值:
如果函数成功,返回一个非零值。
如果函数失败,返回零。要得到更多的错误信息,请使用GetLastError函数。

6> GetTextMetrics

函数功能:
该函数把程序当前的字体信息,存放到TEXTMETRIC(即MSDN原文中的specified buffer)中。
函数原型:
BOOL GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm);
参数:
hdc:设备环境句柄。
lptm:指向结构TEXTMETRIC的指针,该结构用于获得字体信息。
返回值:
如果函数调用成功,返回值非零,如果函数调用失败,返回值是0。
Windows NT\2000\XP:若想获得更多错误信息,请调用GetLastError函数。
Windows 95/98/Me:对于这样的版本,需要去下载Microsoft layer提供的MSLU(详见:2008年12月的MSDN).
需要:
Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:wingdi.h;
库文件:gdi32.lib;
Unicode:在Windows NT环境下实现为Unicode和ANSI两种版本。
包含的头文件:afxwin.h
示例:
BOOL GetTextMetrics(
LPTEXTMETRIC lpMetrics
) const; 
参数结构为
TEXTMETRIC Structure
The TEXTMETRIC structure has the following form:
typedef struct tagTEXTMETRIC { /* tm */
int tmHeight; int tmAscent;
int tmDescent;
int tmInternalLeading;
int tmExternalLeading;
int tmAveCharWidth;
int tmMaxCharWidth;
int tmWeight;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmFirstChar;
BYTE tmLastChar;
BYTE tmDefaultChar;
BYTE tmBreakChar;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
int tmOverhang;
int tmDigitizedAspectX;
int tmDigitizedAspectY;
} TEXTMETRIC;
The TEXTMETRIC structure contains basic information about a physical font. All sizes are given in logical units; that is, they depend on the current mapping mode of the display context.
For more complete information about this structure, see TEXTMETRIC in the Win32 SDK documentation.

转载于:https://www.cnblogs.com/liweizhong/p/3377645.html

windows编程函数(一)相关推荐

  1. 浅谈windows 编程中SendMessage函数的妙用!!!

    windows编程中SendMessage函数是非常重要的,而且这个对于理解windows的消息机制也很重要.本文用代码的方式实现了一些功能,借以说明此函数之妙用.说明不当之处,希望批评指正,谢谢! ...

  2. windows编程常用系统API函数

    windows编程常用API的函数 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 6. API之菜单函数 7. AP ...

  3. Windows编程之使用GetAsyncKeyState()函数为什么要( 0x8000)?

    Windows编程之使用GetAsyncKeyState()函数为什么要(& 0x8000)? 先来看看GetAsyncKeyState()函数的原型:  SHORT GetAsyncKeyS ...

  4. 使用c++进行Windows编程中各种操作文件的方法 【转】

    https://www.zhaokeli.com/article/8232.html 使用c++进行Windows编程中各种操作文件的方法 [转] 来源:赵克立博客 分类: C/C++ 标签:--发布 ...

  5. 在C#中调用windows API函数

    Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...

  6. 【Windows编程】系列第三篇:文本字符输出

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输 ...

  7. Windows编程一日一练(1)

    首先,编程和旅游是我个人人生两大爱好,所以,每天空闲的时候我喜欢敲敲代码,或者看看别人写的程序,实在是很惬意.今天想看看window编程,争取坚持每日一练.        windows程序主要是由微 ...

  8. Windows 编程

    Delphi 利用Object Pascal 和可视控件库(VCL)对底层的Windows API 进行了完美的封装,所以很少需要使用基础Pascal 语言来建立Windows应用程序,也无需直接调用 ...

  9. Windows编程初步(一)

    第一节:安装帮助文档 使用C语言进行Windows开发,必然使用到WindowsSDK.Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集.里面提 ...

最新文章

  1. Java面试题详解三:比较器
  2. ubuntu16.04下更新UHD3.14+GNURadio3.7.13.5
  3. Java 8 Stream中间操作(方法)示例
  4. 【2016年第5期】面向图数据管理系统基准评测的知识图谱统计特征分析
  5. 对字符串进行 匹配,查找,替换,判断。
  6. 一些关于并行计算的科研思路
  7. 自动驾驶——Tracking的学习笔记
  8. C++11 Lambda表达式
  9. trend函数用oracle实现,excel线性回归拟合线Trend函数是这样来使用的
  10. 浏览器白屏原因思路分析
  11. 搭建无线监控云存储服务器,搭建无线监控云存储服务器
  12. PDF添加页码(itext)
  13. Android Camera基本架构介绍
  14. 清华刘知远:好的研究想法从哪里来?
  15. linux编译ipp多线程,Linux下Intel IPP编程环境的配置
  16. idea 撤销 前进 快捷键
  17. bim建筑绘图计算机要求,BIM软件对电脑硬件配置的要求
  18. 使用simulink搭建简单的安时积分计算电池的SOC
  19. 基于HTML5 Canvas的工控SCADA模拟飞机飞行
  20. 1997年出生的人,现在月薪多少了?

热门文章

  1. 设置Panel的布局管理器为BorderLayout,分别向其中的每个区域加入一个按钮
  2. 基于CNN实现对摄像头捕捉的人脸进行性别和年龄的预测
  3. tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)
  4. qt 在qtextedit显示数组_QtWidget: 设置QTextEdit的各种颜色
  5. 多级联动下拉java,下拉列表多级联动前端实现
  6. 联合索引会创建几个索引_【1033期】分别谈谈联合索引生效和失效的条件
  7. safari windows版本_iPhone 和 Windows 协作的五个技巧
  8. 分享Qt的面试题目(或许未来的我能用的上呢)
  9. navicat远程连接mysql,2003 can't connect to mysql server on 10038
  10. oracle 远程tns配置