WINDOWS API 整理

来源:互联网 发布:java枚举类 编辑:程序博客网 时间:2024/06/05 11:22

WM_CREATE

WM_CREATE是windows中一个窗口消息。  
   当一个应用程序创建窗口时,会通过消息处理函数。但是这个消息在 CreateWindow 函数返回之前被送到消息处理函数。
   
例如,当要获取系统的字体时,我们可以先向这个窗口发送 WM_CREATE消息,以后字体不会改变了,程序会保存这个系统字体的消息!以后就可以用这个字体了!


Polygon

  函数功能:该函数画一个由直线相连的两个以上顶点组成的多边形,用当前画笔画多边形轮廓,用当前画刷和多边形填充模式填充多边形。
  
函数原型:BOOL Polygon(HDC hdc, CONST POINT *lpPoints, int nCount);   
参数:    
  hdc:设备环境句柄。lpPoints:指向用于指定多边形顶点的POINT结构数组的指针。                     lpPoints中坐标以当前位置为原点。   
  nCount:指定数组中顶点个数,此值必须大于等于2。  
 
返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值是0。   
Windows NT:若想获得更多的错误信息,请调用GetLastError函数。  
 备注:此多边形通过画一条从最后一个顶点到第一个顶点的线段而自动闭合起来。函数Polygon不使用和改变当前位置。   
Windows CE:1.0版本只支持凸多边形。在Windows CE 2.0版本中,此函数等同于在Windows桌面平台上的函数。 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。

OffsetWindowOrgEx

  函数功能:该函数用指定的水平位移和垂直位移改变设备环境的窗口原点。   
函数原型:BOOL OffsetWindowOrgEx(HDC hdc, int nXOffset, int nYOffset, LPPOINT lpPoint);
  
参数:   
           hdc:指向设备环境的句柄。   
    nXOffset:指定以逻辑单位为单位的水平位移。移动方向取决于当前设置的窗口坐标方向,如果为正表示向窗口水平轴坐标的正方向移动,如果为负表示向窗口水平轴坐标的负方向移动。   
    nYOffset:指定以逻辑单位为单位的垂直位移。 移动方向取决于当前设置的窗口坐标方向,如果为正表示向窗口垂直轴坐标的正方向移动,如果为负表示向窗口垂直轴坐标的负方向移动。   
    lpPoint:指向POINT结构的指针,先前原点的逻辑坐标存放在此结构中,如果lpPoint是NULL,那么先前原点没有被返回。
        返回值:如果函数调用成功,返回值为非零值,否则为零。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。


SetMapMode

函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。
 函数原型:int SetMapMode(HDC hdc, int fnMapMode);

参数:
   hdc:指向设备环境的句柄。   
     fnMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。
  
 MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位,用SetWindowExtEx和SetViewportExtEx函数可指定单位、方向和比例。   
 MM_HIENGLISH:每个逻辑单位转换为0.001英寸,X的正方面向右,Y的正方向向上。   
 MM_HIMETRIC:每个逻辑单位转换为0.01毫米,X正方向向右,Y的正方向向上。   
 MM_ISOTROPIC:逻辑单位转换成具有均等比例轴的任意单位,即沿X轴的一个单位等于沿Y轴的一个单位,用和函数可以指定该轴的单位和方向。图形设备界面(GDI)需要进行调整,以保证X和Y的单位保持相同大小(当设置窗口范围时,视口将被调整以达到单位大小相同)。

    MM_LOENGLISH:每个逻辑单位转换为0.1英寸,X正方向向右,Y正方向向上。   
 MM_LOMETRIC:每个逻辑单位转换为0.1毫米,X正方向向右,Y正方向向上。   
 MM_TEXT:每个逻辑单位转换为一个图素,X正方向向右,Y正方向向下。   
 MM_TWIPS;每个逻辑单位转换为打印点的1/20(即1/1400英寸),X正方向向右,Y方向向上。   
 返回值:如果函数调用成功,返回值指定先前的映射方式,否则,返回值为零,若想获得更多错误信息,请调用GetLastError函数。

备注:
   MM_TEXT方式允许应用程序以设备像素为单位来工作,像素的大小根据设备不同而不同。MM_HIENLISH, MM_HIMETRIC, MM_LOENGLISH,   MM_LOMETRIC和MM_TWIPS方式对必须用物理意义单位(如英寸或毫米)制图的应用程序是非常有用的。MM_ISOTROPIC方式保证了1:1的纵横比。
 MM_HIENLISH方式允许对X和Y坐标分别进行调整。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。
例子:
   etMapMode (hdc, MM_ISOTROPIC);//设定映像模式   
 SetWindowExtEx (hdc, 1000, 1000, NULL);   
 SetViewportExtEx (hdc, cxClient / 2, -cyClient / 2, NULL);   
 SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL);//设定视口原点坐标

wparam与lparam

1. WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高
2. 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。
3. 击键消息,有WM_SYSKEYDOWN、WM_SYSKEYUP、WM_KEYUP、WM_KEYDOWN,其中wParam是虚拟键代码,lParam是包含属于击键的其他信息。lParam消息参数分为6个域,有重复计数、环境代码、键的先前状态等。
4. 字符消息WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR,lParam消息参数跟击键消息的lParam 消息参数内容相同,wParam参数是ANSI或Unicode字符代码
5. 客户区鼠标消息WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、 WM_MBUTTONDOWN、WM_MBUTTONUP,lParam参数的低位是鼠标的客户区x坐标,高位是客户区y坐标。wParam参数是指示鼠标键及Shift和Ctrl键的状态。wParam&MK_SHIFT或MK_CTRL,如果返回TRUE就意味着有按下Shift或Ctrl 键。
6. 非客户区消息,wParam参数指明移动或者单击鼠标键的非客户区位置,以HT开头,lParam参数低位指出了鼠标所在屏幕坐标的x坐标,高位指出了鼠标所在屏幕坐标的y坐标。
7. 鼠标轮滚动消息,WM_MOUSEWHEEL消息,lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键和Shift与Ctrl 键的状态。wParam高位有一个“delta”值,该值可正可负,指出了滚轮导致屏幕滚动几行,120表示向上3行。
8. 计时器消息WM_TIMER,wParam参数等于计时器的ID值,lParam为0
9. 按钮子窗口的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是接收消息的父窗口代号。[这里和原文有点出入,原文是子窗口的ID,我这里修改了一下,以《windows程序设计教程》为准]
10. 焦点消息,对于正在失去焦点的窗口,会收到WM_KILLFOCUS消息,其wParam参数是即将接收输入焦点的窗口的句柄。对于即将获取焦点的窗口,会收到WM_SETFOCUS消息,其wParam参数是正在失去焦点的窗口的句柄。
11. 编辑控制的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。
12. 列表框的WM_COMMAND消息,wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。
13. 菜单消息1,WM_INITMENU,wParam是主菜单句柄,lParam是0.
14. 菜单消息2,WM_MENUSELECT,菜单跟踪消息,指针移到菜单的某一些,就会发送这个消息给窗口过程,其wParam参数的低位是选中项菜单的 ID或者弹出式菜单的句柄,高位是选择标识,lParam参数是包含选中项的菜单句柄。
15. 菜单消息3,WM_INITMENUPOPUP,准备显示一个弹出式菜单时产生的消息,wParam参数是弹出式菜单的句柄,lParam的低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0.
16. 菜单消息4,WM_COMMAND,选中菜单后产生,wParam低位是击中菜单的ID,高位是0,lParam参数也是0
17. 菜单消息5,WM_SYSCOMMAND,表示用户从系统菜单中选择一个启用的菜单项,其wParam参数是菜单的ID, lParam为0.如果该消息是由按鼠标产生的,那么lParam参数是鼠标的屏幕坐标。
18. 加速键消息,WM_COMMAND消息,wParam低位是加速键ID,高位是1, lParam是0.

GetLocaleInfo

声明   
Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long   
说明
   取得与指定“地方”有关的信息  
参数表   Locale --------- Long,欲为其获得信息的地方ID   
 LCType --------- Long,要取回的信息类型。参考api32.txt文件中带 LOCALE_   
 前缀的常数。用OR运算符合并LOCALE_NOUSEROVERRIDE,从而强制使用系统默认信息——即使当前用户已修改了相关设置    lpLCData ------- String,指定一个缓冲区,用于装载要求的信息。注意预先将字串格式化成合适的长度   
 cchData -------- Long,lpLCData缓冲区的长度;如设为零,表示获取必要的缓冲区长度   
返回值   Long,装载到缓冲区的字符数,或者cchData要求的缓冲区长度。零表示出错。会将GetLastError设为下述值之一:ERROR_INSUFFICIENT_BUFFER,ERROR_INVALID_FLAGS,ERROR_INVALID_PARAMETER

SelectObject

函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。   
函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);   
参数:   
 hdc:设备上下文环境的句柄。  
 hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。   
 位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。   
 画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。   
 字体:CreateFont, CreateFontIndirect。   
 笔:CreatePen, CreatePenIndirect。   
 区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。   
 返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;   
 SIMPLEREGION:区域由单个矩形组成;
 COMPLEXREGION:区域由多个矩形组成。
 NULLREGION:区域为空。   
如果发生错误并且选择对象不是一个区域,那么返回值为NULL,否则返回GDI_ERROR。   
注释:该函数返回先前指定类型的选择对象,一个应用程序在它使用新对象进行绘制完成之后,应该用新对象替换原始的缺省的对象。   应用程序不能同时选择一个位图到多个设备上下文环境中。   ICM:如果被选择的对象是画笔或笔,那么就执行颜色管理。  
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。

WM_SIZE

当主窗口的客户区部分大小改变时,我们的应用程序将接收到 WM_SIZE 消息。当然该窗口第一次显示时,我们也将接收到该消息。要接收到该消息,主窗口必须有 CS_VREDRAW 和 CS_HREDRAW 风格。我们应该把缩放编辑控件的动作放到此处。我们要把编辑控件变成和我们的窗口客户区一样大,所以先得要得到父窗口客户区的大小。这些值包含在参数 lParam 中, lParam 的高字部分是客户区的高,底字部分是客户区的宽。然后我们调用 MoveWindow 函数来重新调整编辑控件的大小,该函数不仅能够移动窗口的位置,而且能够改变窗口的大小。   
参数说明:   
 wParam:   Specifies the type of resizing requested.   通常用来向别的窗口发送消息时,需要指定的附加信息    Value            Meaning
SIZE_MAXHIDE  Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXSHOW  Message is sent to all pop-up windows when some other window has been restored to its former size.
SIZE_MINIMIZED  The window has been minimized.
Value    Meaning
SIZE_RESTORED     The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies.
   lParam:   The low-order word of lParamspecifies the new width of the client area.   The high-order word of lParam specifies the new height of the client area.   
note:   
lParam和GetClientRect的功能一样,有时候WM_SIZE的效率要比使用GetClientRect高. 可以在程序中使用WM_SIZE来保存Client area的大小方便以后使用.

WM_SIZE后于WM_CREATE消息!!在窗口被创建时的顺序!  
 
WM_SIZE附带的信息:   WM_SIZE   fwSizeType = wParam; // resizing flag   
        nWidth = LOWORD(lParam); // width of client area   
        nHeight = HIWORD(lParam); // height of client area   

告诉我们Windows处理窗口大小变化后新窗口客户区的大小.   
Message Cracker   
void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy)   
...{   
      //do ...   
   }   参数cx,cy是新窗口客户区的大小!宽度和高度   
注意cx,cy最好定义为全局或是静态的,
例子如下   static UINT cx,cy;   
  switch (message)  
              {   
                    case WM_SIZE:   
                       cx=LOWORD(lParam);   
                       cy=HIWORD(lParam);   
                     break;
               }


GetStockObject

函数功能:该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。   
函数原型:HGDIOBJ GetStockObject(int fnObject);   

参数:   fnObject:指定对象的类型,该参数可取如下值之一;   
 BLACK_BRUSH:黑色画笔;
 DKGRAY_BRUSH:暗灰色画笔;
 DC_BRUSH:在Windows98,Windows NT 5.0和以后版本中为纯颜色画笔,缺省色为白色,可以用SetDCBrushColor函数改变颜色,更多的信息参见以下的注释部分。
 GRAY_BRUSH:灰色画笔;
 HOLLOW_BRUSH:空画笔(相当于HOLLOW_BRUSH);   
 LTGRAY_BRUSH:亮灰色画笔;
 NULL_BRUSH:空画笔(相当于HOLLOW_BRUSH);   
 WHITE_BRUSH:白色画笔;BLACK_PEN:黑色钢笔;   
 DC_PEN:在Windows98、Windows NT 5.0和以后版本中为纯色钢笔,缺省色为白色,使用SetDCPenColor函数可以改变色彩,更多的信息,参见下面的注释部分。   
 WHITE_PEN:白色钢笔;
 ANSI_FIXED_FONT:在Windows中为固定间距(等宽)系统字体;   
 ANSI_VAR_FONT:在Windows中为变间距(比例间距)系统字体;   
 DEVICE_DEFAUCT_FONT:在WindowsNT中为设备相关字体;   
 DEFAULT_GUI_FONT:用户界面对象缺省字体,如菜单和对话框;   
 OEM_FIXED_FONT:原始设备制造商(OEM)相关固定间距(等宽)字体;   
 SYSTEM_FONT:系统字体,在缺省情况下,系统使用系统字体绘制菜单,对话框控制和文本;   
 SYSTEM_FIXED_FONT:固定间距(等宽)系统字体,该对象仅提供给兼容16位Windows版本;   
 DEFAULT_PALETTE:缺省调色板,该调色板由系统调色板中的静态色彩组成。   
返回值:如果成功,返回值标识申请的逻辑对象,如果失败,返回值为NULL。   
WindowsNT:若想获得更多错误信息,请调用GetLastError函数。   
注释:仅在CS_HREDRAW和CS_UREDRAW风格的窗口中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH对象。   
如果在其他风格的窗口中使灰色画笔,可能导致在窗口移动或改变大小之后出现画笔模式错位现象,原始储存画笔不能被调整。   HOLLOW_BRUSH和NULL_BRUSH储存对象相等。   
由DEFAULT_GUI_FONT储存对象使用的字体将改变。当想使用菜单、对话框和其他用户界面对象使用的字体时请使用此储存对象.不必要通过调用DeleteObject函数来删除储存对象。   
Windows 98、Windows NT 5.0和以后版本:DC_BRUSH和DC_PEN都能与其他储存对象如BLACK_BRUSH和BLACK_PEN相互交换关于检索当前钢笔和画笔颜色的信息,请参见GetDCBrushColor和GetDCPencolor,带DC BRUSH或DC PEN参数的Getstockobject函数可以与SetDCPenColor和SetDCBrushColor函数相互交换使用。   
Windows CE:Windows CE不支持fnObject参数的如下值:ANSI_FIXED_FONT、ANSI_VAR_FONT、OEM_FIXED_FONT、SYSTEM_FIXED_FONT   
Windows CE1.0版本不支持fnObject的DEFAULT_PALETTE值。
  
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;头文件:gdi32.lib。

CS_HREDRAW
 当窗口水平方向的宽度变化时重绘整个窗口.
CS_VREDRAW
 当窗口垂直方向的宽度变化时重绘整个窗口.


CreateWindow
该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。

函数原型
参数 lpClassName
 LPWindowName
 dwStyle
 nWidth
 hMenu
 hlnstance
备注
其它参数BUTTON按钮
查看dwStyle参数
MDICLIENT MDI客户设计出MDI客户窗口
STATIC一个简单的静态文本域
Windows CE
下列dwStyle标志在窗口中不支持不支持的按钮风格和静态控制风格
不支持的对话框风格
不支持MDICLIENT窗口类
函数原型
参数 lpClassName
LPWindowName
dwStyle
nWidth
hMenu
hlnstance
备注
其它参数 BUTTON按钮
查看dwStyle参数
MDICLIENT MDI客户设计出MDI客户窗口
STATIC一个简单的静态文本域
Windows CE
下列dwStyle标志在窗口中不支持 不支持的按钮风格和静态控制风格
不支持的对话框风格
不支持MDICLIENT窗口类
 


函数原型
  HWND CreateWindow( LPCTSTR lpClassName,   LPCTSTR lpWindowName,   DWORD dwStyle,   int x,   int y,   int nWidth,   int nHeight,   HWND hWndParent,   HMENU hMenu,   HANDLE hlnstance,   LPVOID lpParam);
参数
lpClassName
  指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。   如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。

LPWindowName
  指向一个指定窗口名的空结束的字符串指针。   如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。

dwStyle
  指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。
风格意义:   
 WS_BORDER:创建一个单边框的窗口。   
 WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。   
 WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。   
 WS_CHLDWINDOW:与WS_CHILD相同。   
 WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。   
 WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。   
 WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输入信息。   
 WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。   
 WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。   
 WS_HSCROLL:创建一个有水平滚动条的窗口。   
 WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。   
 WS_MAXIMIZE:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。   
 WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。    WS_OVERLAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。  
 WS_POPUP;创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。   
 WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。   WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。   
 WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。   
 WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。   
 WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。   
 WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。   WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。   
 WS_VISIBLE创建一个初始状态为可见的窗口。   
 WS_VSCROLL:创建一个有垂直滚动条的窗口。   
X   指定窗口的初始水平位置。对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子窗口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_USEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为零。   
Y   指定窗口的初始垂直位置。对一个层叠或弹出式窗日,y参数是屏幕坐标系的窗口的左上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参数。
nWidth 以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始X坐标开始到目标区域的顶部。CW_USEDEFAULT只参层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。      
nHelght   以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。   
hWndParent   指向被创建窗口的父窗口或所有者窗口的旬柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗口是可选的。Windows NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
hMenu
  菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
hlnstance
  与窗口相关联的模块事例的句柄。   
 lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。  
 
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
备注
  在返回前,CreateWindow给窗口过程发送一个WM_CREATE消息。对于层叠,弹出式和子窗口,CreateWindow给窗口发送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的IParam参数包含一个指向CREATESTRUCT结构的指针。如果指定了WS_VISIBLE风格,CreateWindow向窗口发送所有需要激活和显示窗口的消息。
[编辑本段]其它参数
  获取有关任务条是否为创建的窗口显示一个按钮的控制信息,参看Taskbar按钮的Visbility。   以下预定义的控制类可以在lpClassName参数中指定。注意在dwStyle参数中可以使用的相应的控制风格。
BUTTON按钮
  按钮是一个小矩形子窗口,用户可以点击来打开或关闭。按钮控制可以单独使用或包含在组中使用,可以为控制写标签或不写标签。当用户点击按钮控制时按钮的外观有明显的改变。请参看Button。查看dwStyle参数中指定的按钮风格表请参考Button Style。   COMBOBOX组合框由一个列表框和一个类似于编辑控制的选择域组成。在使用这个风格控制时,应用程序或者使列表框一直显示或者是作成一个下拉列表。如果列表框可见,则在编辑域中输入字符将使列表框中与字符一致的第一个域高亮。反之,在列表框中选择的项将显示在编辑域中。请参看Combo Boxes。
查看dwStyle参数
  中指定的组合框风格表请参考Combo Boxes Style。   EDIT编辑框一个小的矩形子窗口用户可以使用键盘向其中输入文本。用户可以通过点击或按Tab键来选中编辑框控制并且使控制获得焦点。当编辑框中显示一个闪烁的插入记号时,用户可以输入文本。使用鼠标移动光标,选择被替换的字符或设置插入字符的位置或使用回退键删除字符。请参看Edit。controls。   查看dwStyle参数中指定的编辑框风格的表格请参考Edit Control Style。   LISTBOX列表框字符串的列表。当应用程序必须显示名称的列表,例如文件名列表等,使用户可以从中选择时就可指定列表框。用户可以通过单击来选择名称。选择时,被选择名高亮,同时传递给父窗口一个通知消息。请参看LiSt Box Style。查看dwStyle参数中指定的列表风格表请参考List BOX Control Style。
MDICLIENT MDI客户设计出MDI客户窗口
  窗口接收控制MDI应用程序子窗口的消息。建议使用两种控制风格位:WS_CLIPCHILDREN和WS_CHILD。指定了WS_HSCROLL和WS_VSCROLL风格的MDI客户窗口允许用户将MDI子窗口滑动进入视窗。请参看MDI。   RiChEdit设计一个Rich Editl.0版的控制。该控制使用户可以以字符和段落格式测览和编辑文本,并且可以包含嵌入的COM对象。请参看Rich Edit Controls。查看dwStyle参数中指定的RichEdit风格表请参考LiSt Box Control Style。   RICHEDIT CLASS设计一个Rich Edik2.0版的控制。该控制使用户可以以字符和段落格式测览和编辑文本,并且可以包含嵌入的COM对象。请参看RichEditControls。查看dwStyle参数中指定的RichEdit风格表请参考RichEditControIStyle。   SCROLLBAR 滚动条设计的一个包含着一个滚动盒和两端有方向箭头的矩形。只要用户点击了控制,滚动条就给父窗口发送一个通知消息。如有必要,父窗口负责更新滚动条的位置。请参看ScrollBars。查看dwStyle参数中指定的滚动条风格表请参考Scroll Bars Style。
STATIC一个简单的静态文本域
  文本盒或矩形用于给控制加标签,组合控制或将控制与其他控制分开。   静态控制不提供输入和也不提供输出。请参看Static Control Styles。查看dwStyle参数中指定的静态文本风格表请参考Scroll Bars Style。   Windows95:系统可以支持最大16,364个窗口句柄。   备注:如果在链接应用程序时指明是Windows 4.x版本,除非应用程序的窗口有窗口某单,否则窗口控制没有标题控制。对Windows3.x版本没有这种要求。
Windows CE
  CreateWindow是以“宏”方式完成的。它被定义为CreateWindowEX,并且dwExStyle参数被置为长整数0。不支持菜单条控制,除非被声明为子窗口标志否则hMenu参数必须为NULL。不支持MDICLIENT窗口类。dwStyle参数可以是对话框(Dialogue Box),窗口(Windows),控制(Controls)文件中的窗口风格和控制风格的组合。
[编辑本段]下列dwStyle标志在窗口中不支持
  WS_CHILDWINDOW WS_ICONC;WS_MAXMIZE WS_MAXIMIZEBOX;WS_MINIMIZE WS_MINIMIZEBOX;   WS_OVERLAPPEDWINDOW WS_POPUPWINDOW;WS_SIZEBOXWS_THICKFRAME WS_TILED WS_TILEDWINDOW   下列dwStyle标志在控制和对话框中不支持:
不支持的按钮风格和静态控制风格
  BS_LEFTTEXT SS_BLACKFRAME;BS_MULTILINE SS_GRAYFRAME BS_TEXT SS_METAPICT;BS_USERBUTTON SS_SIMPLE   不支持组合框SS_WHITERECT风格。   CBS_OWNERDRAWFIXED SS_BLACKRECT;CBS_OWNWEDRAWVARIABLE SS_GRAYRECT; CBS_SIMPLE8R旧HTrIMAGE   不支持列表框控制SS_WHITEFRAME风格。   LBS_NODATA
不支持的对话框风格
  LBS_OWNERDRAWFIXED DS_ABSALIGN; LBS_OWNERDRAWVARIABLE DS_CENTERMOUSE; LBS_STANDARD DS_CONTEXTHELP   不支持滚动条的 DS_FIXEDSYS风格   SBS_BOTTOMALIGN DS_NOFAILCREATE;SBS_RIGHTALIGN DS_NOIDLEMSG;   SBS_SlZEBOXBOTT0MRIHTALIGN DS_SYSMODAL;SBS_SIZEGRIP   可使用BS_OWNERDRAW风格来代替BS_USERBUTTON风格。   可使用SS_LEFT或SS_LEFTNOWORDWRAP风格来代替静态控制的SS_SIMPLE风格。
不支持MDICLIENT窗口类
  所有窗口都隐含WS_CLIPSIBLINGS和 WS_CLIPCHILDREN风格。   Windows CE1.0版除对话框外不支持被属窗口。如果hwndParent参数不为NULL,则窗口隐含给出WS_CHILD风格。Windows CE1.0不支持菜单条。   (推荐)速查: Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib; Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

ShowWindow

概述
  函数功能:该函数设置指定窗口的显示状态。   函数原型:BOOL ShowWindow(HWND hWnd, int nCmdShow);
参数
  nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:   
 SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。   
 SW_HIDE:隐藏窗口并激活其他窗口。   
 SW_MAXIMIZE:最大化指定的窗口。   
 SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。   
 SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。   
 SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。   
 SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。   
 SW_SHOWMAXIMIZED:激活窗口并将其最大化。   
 SW_SHOWMINIMIZED:激活窗口并将其最小化。   
 SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。   
 SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。   
 SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。   
 SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
返回值
  如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。
备注
  应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。   
正如在nCmdShow参数中声明的,如果调用应用程序的程序使用了在STARTUPINFO结构中指定的信息来显示窗口,则在第一次调用ShowWindow函数时nCmdShow参数就被忽略。在这种情况下,ShowWindow函数使用STARTUPINFO结构中的信息来显示窗口。在随后的调用中,应用程序必须调用ShowWindow 函数(将其中nCmdShow参数设为SW_SHOWDEFAULT)来使用由程序调用该应用程序时提供的启动信息。
这个处理在下列情况下发生:   
应用程序通过调用带WS_VISIBLE标志的函数来创建它们的主窗口函数;   
应用程序通过调用清除了WS_VISIBLE标志的CreateWindow函数来创建主窗口函数,并且随后调用带SW_SHOW标志的ShowWindow函数来显示窗口;   
Windows CE:nCmdShow参数不支持下列值:   
SW_MAXIMINZE;SW_MINIMIZE;SW_RESTORE;SW_SHOWDEFAULT   SW_SHOWMAXIMIZED;SW_SHOWMINIMIZED;SW_SHOWMININOACTIVATE   
查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;头文件:winuw库文件:user32.lib。
实例
  ShowWindow Me.lblHwnd, SW_Minimize

point

POINT(点)是一个结构,它定义了一个点的坐标(x,y)   
结构的定义如下:   
typedef struct tagPOINT{   
 LONG x;   
 LONG y;   
}POINT;   
参数:   x: 指出一个点的x坐标.   y: 指出一个点的y坐标.   
使用例子:   POINT paA;paA.x = 370;ptA.y = 550;   POINT ptB = {370,550};

InvalidateRect

该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。  
 BOOL InvalidateRect(   HWND hWnd, // handle of window with changed update region   CONST RECT *lpRect, // address of rectangle coordinates   BOOL bErase // erase-background flag   );   
参数:   hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_NCPAINT 给窗口过程处理函数。   
 lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。   
 bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。   
 返回值:   函数成功则返回非零值,否则返回零值。   
说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。   
需要:   Windows NT/2000/XP/Vista: 包含Windows NT 3.1以及之后版本。   Windows 95/98/Me: 包含Windows 95 以及之后版本。   Header: 声名在 Winuser.h中; 包含在Windows.h中。   Library: Use User32.lib.

RECT
  rect结构定义了一个矩形框左上角以及右下角的坐标   
typedef struct _RECT {   
 LONG left;   
 LONG top;   
 LONG right;   
 LONG bottom;   
} RECT, *PRECT;
成员
  left : 指定矩形框左上角的x坐标   top: 指定矩形框左上角的y坐标   right: 指定矩形框右下角的x坐标   bottom:指定矩形框右下角的y坐标   备注:   当rect传递给fillrect函数时,该矩形框将被填充满,但不包括右栏和底行的像素。   该结构与rectl结构是同一结构。


ValidateRect

函数功能
  该函数更新指定窗口的无效矩形区域,使之有效。
函数原型
  BOOL ValidateRect(   HWND hWnd,          // 窗口的句柄   CONST RECT *lpRect  // 指向RECT结构的指针   );
参数
   hWnd:   [输入]标识一个想要修改状态的窗口。若该参数为NULL, 系统将更新所有的窗口,然后在函数返回前发送 WM_ERASEBKGND 和 WM_NCPAINT 消息给窗口过程处理函数。   
 lpRect:   [输入]指向一个包含需要生效的矩形的更新区域坐标的RECT 结构体. 如果该参数为NULL,所有的客户区域将会生效。
返回值
  成功执行返回非零值,否则返回零值。   想得到更多错误信息,请调用GetLastError函数。
说明
  BeginPaint函数会自动使全部客户区生效。如果在下一个WM_PAINT消息产生之前,一个区域的的更新区域必须有效,那么不要调用ValidateRect或ValidateRgn函数。   系统继续产生WM_PAINT 消息直到当前的更新区域生效。
[编辑本段]要求
  Windows NT/2000/XP/Vista: Included in Windows NT 3.1 以及之后版本。    Windows 95/98/Me: Included in Windows 95 以及之后版本。    Header: Declared in Winuser.h; include Windows.h.    Library: User32.lib

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字段设定为显示区域的宽度和高度(像素点数)。 也可以是一个CRrect对象指针。CRect对象有多个参数,与RECT用法相同。
[编辑本段]返回值
  如果函数成功,返回一个非零值。   如果函数失败,返回零。要得到更多的错误信息,请使用GetLastError函数。
要求
  Windows NT/2000: Windows NT 3.1 或更高的版本.   Windows 95/98: Windows 95 或更高的版本.   Header: Declared in Winuser.h; include Windows.h.   Library: Use User32.lib.

GetDC

函数功能:该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。   GetDCEx函数是GetDC的一个扩展,它能使应用程序更多地控制在客户区域内如何或是否发生剪切。   
函数原型:HDC GetDC(HWND hWnd);  
参数:   
 hWnd:设备上下文环境被检索的窗口的句柄,如果该值为NULL,GetDC则检索整个屏幕的设备上下文环境。   
Windows 98,WindowsNT 5.0或以后版本:如果该参数为Null,GetDC检索首要显示器的设备上下文环境,要得到其他显示器的设备上下文环境,可使用EnumDisplayMonitors和CreateDc函数。   
返回值:如果成功,返回指定窗口客户区的设备上下文环境;如果失败,返回值为Null。   Windows NT:若想获得更多错误信息,可调用GetLastError函数。   注释:GetDC函数根据指定的等级类型检索指定窗口普通的、典型的或特有的设备上下文环境。   对于普通设备上下文环境,GetDC在每次检索的时候部分分配给它缺省特性,对于典型和特有的设备上下文环境,GetDC不改变先前设置的特性。   在使用普通设备上下文环境绘图之后,必须调用ReleaseDc函数释放该设备上下文环境,典型和特有设备上下文环境不需要释放,设备上下文环境的个数仅受有效内存的限制。  
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。


ReleaseDC

函数功能:函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类型有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。   
函数原型:int ReleaseDC(HWND hWnd, HDC hdc);   
参数:   
 hWnd:指向要释放的设备上下文环境所在的窗口的句柄。   
 hDC:指向要释放的设备上下文环境的句柄。   
返回值:返回值说明了设备上下文环境是否释放;如果释放成功,则返回值为1;如果没有释放成功,则返回值为0。   
注释:每次调用GetWindowDC和GetDC函数检索公用设备上下文环境之后,应用程序必须调用ReleaseDC函数来释放设备上下文环境。   应用程序不能调用ReleaseDC函数来释放由CreateDC函数创建的设备上下文环境,只能使用DeleteDC函数。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。


CreateDC

  函数功能:该函数通过使用指定的名字为一个设备创建设备上下文环境。   
函数原型:HDC CreateDC(LPCTSTR lpszDrive, LPCTSTR lpszDevice, LPCTSTR lpszOutput, CONST DEVMODE *lplnitData);   
参数:   
 lpszDriver:   Windows NT:指向一个以Null结尾的字符串的指针,该字符串为显示驱动指定DISPLAY或者指定一个打印驱动程序名,通常为WINSPOOL。   Windows 95和Windows 98:在基于32位的应用程序中,该参数被忽略或者为Null。但有一个例外,可以通过指定以null结尾的DISPLAY来得到一个显示设备上下文环境,如果该参数为DISPLAY。其他所有的参数必须为Null。   
 lpszDevice:指向一个以null结尾的字符串的指针,该字符串指定了正在使用的特定输出设备的名字,它不是打印机模式名。LpszDevice参数必须被使用。   
 lpszOutput:该参数在32位应用中被忽略;并置为Null,它主要是为了提供与16位应用程序兼容,更多的信息参见下面的注释部分。    LplnitData:指向包含设备驱动程序的设备指定初始化数据的DEVMODE结构的指针,DocumentProperties函数检索指定设备获取已填充的结构,如果设备驱动程序使用用户指定的缺省初始化值。则lplnitData参数必须为Null。  
返回值:成功,返回值是特定设备的设备上下文环境的句柄;失败,返回值为Null。   Windows NT:若想获得更多错误信息,可调用GetLastError函数。 注释:16位的Windows应用程序使用lpszOutput参数指定一通讯口的名字或者指定打印到文件,基于32位的Windows应用程序不需要指定通讯口的名字,32位应用程序使可以通过调用StartDoc函数来完成打印到文件的功能,在调用StartDoc函数时,使用DOCINFO结构。该结构的lpszOutput成员指定了输出文件名的路径。当不再需要该设备上下文环境时可调用DeleteDc函数删除它。   ICM:通过设置DEVMODE结构(由plnitDufa参数指定)的dmlCMMethod元素为合适值,可使ICM激活。   Windows CE:如果没有给lpszDriver参数驱动程序名,则Windows返回一个显示设备上下文环境,Windows CE忽略lpszDevice参数,Windows CE把lplnitData和lpszOutput参数传送给驱动程序而不做任何修改。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib,Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

DeleteDC

函数功能:该函数删除指定的设备上下文环境(Dc)。   
函数原型:BOOL DeleteDC(HDC hdc);   
参数:   
 hdc:设备上下文环境的句柄。   
返回值:成功,返回非零值;失败,返回零。   Windows NT:若想获得更多错误信息,请调用GetLastError函数。   
注释:如果一个设备上下文环境的句柄是通过调用GetDC函数得到的,那么应用程序不能删除该设备上下文环境,它应该调用ReleaseDC函数来释放该设备上下文环境。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。


RegisterClass

函数功能:该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。  
 
函数原型:ATOM RegisterClass(CONST WNDCLASS *lpWndClass);  
 
参数:   lpWndClass:指向一个WNDCLASS结构的指针。在将它传递给函数之前,必须在该结构中填充适当的类属性。  
 
返回值:如果函数成功,返回值是唯一标识已注册的类的一个原子;如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。   
备注:如果使用RegisterClassA来注册窗口,应用程序通知系统被注册类的窗口的消息使用ANSI字符集的文本和字符参数;如果使用RegisterClassW来注册窗口,应用程序需要系统以Unicode来传递消息的文本参数。lsWindowUnicode函数使应用程序可以查询每一个窗口的字符特征。参看Win32API中的ANSI和Unicode   函数,请查阅Functiont prototype。   应用程序注册的所有的窗口类在应用程序中止后都为未注册的类。   
Windows 95:所有由DLL注册的类在DLL卸载后均未注册的类。   Windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。   Windows 95:如果WNDCLASSEX结构中的cbWndExtra或cbClsExtra单元包含字节数超过40个字节,则RegisterClassEx将失败。   Windows CE:由lpWndClass参数指向的WNDCLAS结构不支持lpszMenuName域,因为WindowsCE不支持缺省菜单。   除非使用了WindowsCE的lconcurs组件(这个组件提供了在适当目标平台上的鼠标支持),否则不能使用由lpWndClass指向的WNDCLASS结构中的hCursor域。   速
查:Windows NT:3.1以上版本;Windows:95以上版本:WindowsCE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicodee和ANSI两种版本。

case WM_KILLFOCUS: 
     MessageBox(.....); 
     break; 
则在窗口输入输入焦点后,程序回立刻作出响应,弹出提示对话框. 
如果想要响应这个(WM_KILLFOCUS) 把属性 Notify设为true就可以了.

WM_KILLFOCUS和WM_SETFOCUS消息是系统直接发送到你的窗口程序的,
采用的是SendMessage而不是PostMessage,不会经过消息队列,所以你在PreTranslateMessage是截获不到这两个消息的

BOOL和bool的区别:

1、类型不同
BOOL为int型
bool为布尔型

2、长度不同
bool只有一个字节
BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同
bool取值false和true,是0和1的区别
BOOL取值FALSE和TRUE,是0和非0的区别 二:bool是标准C++数据类型,可取值true和false。单独占一个字节,
如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。

BOOL是微软定义的typedef int BOOL。与bool不同,它是一个三值逻辑,
TRUE/FALSE/ERROR,返回值为>0的整数为TRUE,0为FALSE,-1为ERROR。
Win32 API中很多返回值为BOOL的函数都是三值逻辑。比如GetMessage().三:大BOOL和小bool之间的区别:

BOOL为int型
bool为布尔型
2、长度不同
bool只有一个字节
BOOL长度视实际环境来定,一般可认为是4个字节
3、取值不同
bool取值false和true,是0和1的区别
BOOL取值FALSE和TRUE,是0和非0的区别
4、例子
bool x=3;   //告警
bool x=1;   //正确
BOOL x=3;   //正确
BOOL x=3.3;   //告警注:windows为了兼容问题定义的基础变量。typedef unsigned long        DWORD;
typedef int                  BOOL;
typedef unsigned char        BYTE;
typedef unsigned short       WORD;
typedef float                FLOAT;
typedef FLOAT                *PFLOAT;
typedef BOOL near            *PBOOL;
typedef BOOL far             *LPBOOL;
typedef BYTE near            *PBYTE;
typedef BYTE far             *LPBYTE;
typedef int near             *PINT;
typedef int far              *LPINT;

GetMessage

函数GetMessage 是 从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。获取消息成功后,线程将从消息队列中删除该消息。函数会一直等待直到有消息到来才有返回值。

函数声明:
  BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax   
参数:   lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。   
 hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。   
 wMsgFilterMin:指定被检索的最小消息值的整数。   
 wMsgFilterMax:指定被检索的最大消息值的整数。   
 返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是-1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。
备注:
  应用程序通常用返回值来确定是否终止主消息循环并退出程序。   
       GetMesssge只接收与参数hWnd标识的窗口或子窗口相联系的消息,子窗口由函数IsChild决定,消息值的范围由参数wMsgFilterMin和wMsgFilterMax给出。如果hWnd为NULL,则GetMessage接收属于调用线程的窗口的消息,线程消息由函数PostThreadMessage寄送给调用线程。GetMessage不接收属于其他线程或其他线程的窗口的消息,即使hWnd为NULL。由PostThreadMessage寄送的线程消息,其消息hWnd值为NULL。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。  
   常数 WM_KEYFIRST和WM_KEYAST可作为过滤值取得与键盘输入相关的所有消息:常数WM_MOUSEFIRST和WM_MOUSELST可用来接收所有的鼠标消息。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。   
     GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。   注意,此函数的返回值可非零、零或-1,应避免如下代码出现:while(GetMessage(IpMsg,hwnd,0,0))…   -1返回值的可能性表示这样的代码会导致致命的应用程序错误。   
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:winuser.h;输入库:user32.Iib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。


KillTimer

KillTimer:移除定时器函数的声明:移除先前用SetTimer设置的定时器。在定时器使用完毕后移除定时器时使用。   
函数原型:   BOOL KillTimer(   HWND hwnd; //与定时器相关联的窗口句柄   UINT uIDEvent //定时器标识符   ):   
参数:   hwnd:与定时器相关联的窗口句柄   
 nIDEvent: 传递给SetTimer的定时器ID值。   
说明:   销毁以前调用SetTimer创建的用nIDEvent标识的定时器事件。不能将此定时器有关的未处理的WM_TIMER消息都从消息队列中清除。   
返回值:    BOOL 如果函数成功,返回一个非0值,   如果失败,返回值为0   注意: 该函数并不移除WM_TIMER 先前发送到消息列队中的消息


ScrollWindow

函数功能
  该函数滚动所指定的窗口客户区域内容。函数提供了向后兼容性,新的应用程序应使用ScrollWindowEX。
函数原型
  BOOL ScrollWindow(HWND hWnd, int XAmount, int YAmount, CONST RECT *IpRect, CONST RECT *lpClipRect);
参数:
   hWnd      [in]客户区域将被滚动的窗口的句柄。   X
 Amount   [in]指定水平滚动的距离,以设备单位计。如果窗口类风格为CS_OWNDC或CS_CLASSDC,则此参数则使用逻辑单位而非设备单位。当向左滚动窗体内容时,参数值必须为负。   
 YAmount   [in]指定垂直滚动的距离,以设备单位计。如果窗口类风格为CS_OWNDC或CS_CLASSDC,则此参数则使用逻辑单位而非设备单位。当向上滚动窗体内容时,参数值必须为负。   
 lpRect   [in]指向RECT结构的指针,该结构指定了将要滚动的客户区范围。若此参数为NULL,则整个客户区域将被滚动。   
 lpClipRect   [in]指向RECT结构的指针,该结构指定了要滚动的裁剪区域。只有这个矩形中的位才会被滚动。在矩形之外的位不会被影响,即使它们是在lpRect矩形之内。(见代码"测试一")假如lpClipRect为NULL,则不会在滚动矩形上进行裁剪。
[编辑本段]返回值
  如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更多的错误信息,请调用GetLastError函数。
注意
  如果在被滚动的窗口中含有^符,ScrollWindow将自动隐藏起^符,以防它被擦掉;当滚动结束后再恢复^符。^符的位置相应的被调整过来。   未被ScrollWindow覆盖的区域不再重画,但该区域会与窗口更新区域组合。应用程序最终收到WM_PAINT的消息,通知它结合区域必须被重画。为了在滚动操作的同时重画未覆盖区域,则应在调用ScrollWindow函数后马上调用UpdateWindow函数。   
如果参数lpRect为NULL,则窗口中的任何子窗口的位置由参数XAmount和Yamount的数值决定偏移;窗体无效(未着色)的区域也偏移。IpRect为NULL时ScrollWindow执行地更快。   
如果参数lpRect不为NULL,则窗口中的子窗口的位置不改变,窗口中无效(未着色)的区域也不偏移。为了防止lpRect不为NULL时更新的问题,需要在调用ScrollWindow前调用UpdateWindow函数重绘窗口。
函数信息
  最低DLL版本:comctl32.dll   头文件:在Winuser.h中声明,调用时需包含Windows.h   导入库:user32.lib   最低系统版本:Windows 95, Windows NT 3.1及以上版本


SetScrollInfo

函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。如被请求,函数也可以重画滚动条。

函数原型:int SetScrollInfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);   
参数:   hWnd:滚动条控制或带标准滚动条的窗体句柄,由fnBar参数决定。   
 fnBar:指定被设定参数的滚动条的类型。这个参数可以是下面值,含义如下:   SB_CTL:设置滚动条控制。而参数hwnd必须是滚动条控制的句柄。   SB_HORZ:设置所给定的窗体上标准水平滚动条参数。   SB_VERT:设置所给定的窗体上标准垂直滚动条参数。   
 lpsi:指向SCROLLINFO结构。在调用SetScrollInfo之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待设置的滚动条参数,并且在适当的成员中制定新的参数值。成员fMask可以为下面所列复合值,含义如下:   SIF_DfSABLENOSCROLL:如果滚动条的新参数使其为没必要,则使滚动条无效而不再移动它。   SIF_PAGE:设置滚动页码值到由Ipsi指向的SCROLLINFO结构的nPage成员中。   SIF_POS:设置滚动位置值到由lpsi指向的SCROLLINFO结构的nPos成员中。   SIF_RANGE:设置滚动范围值到由lpsl指向的SCROLLINFO结构的nMin和nMax成员中。    fRedraw:指定滚动条是否重画以反映滚动条的变化。如果这个参数为TRUE,滚动条将被重画,否则不被重画。   
返回值:返回值是滚动盒的当前位置。
[编辑本段]注意
  注意:SetScrolllnfo函数执行任务是检查SCROLLINFO结构中由成员nPage和nPos值的范围。成员uPage值必须从0到nMax- nMin+1,成员nPos必须是在nMin和nMax-nMax-max(nPage C1,0)之间的指定值。如果任何一个值超过了这个范围,函数将在指定范围内为它设置一个值。   在Windows CE 2.0中,如果在参数lpsi中指定一个NULL指针,Setscrohnfo则返回0,而不返回滚动盒的当前位置。   速查:Windows NT 3.51、Windows 95、Windows CE 1.0以上,头文件:wnuser.h;库文件:user32.lib。


MoveToEx

本函数将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标   
WINGDIAPI BOOL WINAPI MoveToEx(   HDC hdc,   int X,   int Y,   LPPOINT lpPoint   );   
参数:   
 HDC hdc:传入参数,设备上下文句柄。   
 int X:传入参数:新位置的X坐标。   
 int Y:传入参数:新位置的Y坐标。   
 LPPOINT lpPoint:传出参数:一个指向POINT结构的指针,用来存放上一个点的位置,若此参数为NULL,则不保存上一个点的位置   
返回值:返回TRUE代表移动成功,FALSE代表失败,用GetLastError获得更具体的错误信息   
头文件:windows.h

GetDialogBaseUnits

  函数功能:该函数返回系统的对话基本单位,该基本单位为系统字体字符的平均宽度和高度。对于使用系统字体的对话框,可以用这些值在对话框模板之间转换,比如在对话框模板和像素之间。对于不使用系统字体的对话框,从对话框模板单位到像素的转换要根据对话框使用的字体而定。对于对话框的其中一种类型用MaPDialogRect函数很容易地来执行转换,MaPDialogRect考虑字体且正确的把一个长方形模板单位转换为此像素。   

函数原型:LONG GetDialogBaseUnits(VOID);   
参数:无。   
返回值: 返回值为一个32位的含有对话基本单位的值。返回值的低位字含有水平对话框基本单位,且高低位字含有垂直对话框基本单位。   获取字体的横/纵坐标: 返回值是一个8位16进制数,高4位存放字体的高度,低4位存放字体的宽度,可以通过以下语句了获取字体的高和宽   
int charH = HIWORD(GetDialogBaseUnits());   
int charW = LOWORD(GetDialogBaseUnits());   

备注:GetDialogBaseUnits函数返回的水平基本单位同系统字体中字符以像素为单位的平均宽度相等;垂直基本单位同系统字体中字符的以像素为单位的平均高度相等; 对于一个没有使用系统字体的对话框基本单位相等于对话框字体字符以像素为单位的平均宽度和平均高度。可以用GetTextMetrics和GetTextExtentPoint32函数为一个选择的字体来计算这些值。但是,如果计算结果与那些通过系统执行的值不同,那么可以用MapDialogRect函数避免可能发生的错误。每一个水平基本单位同四个水平对话框模板单位相等;每一个垂直基本单位同八个垂直对话框模板单位相等。所以用下列公式来把对话框模板单位转换为像素:   PiselX=(temptateunitX★baseunitX)/4;PiseIY=(templateunitY★baseunitY)/8   同样地.用下列公式来把像素转换为对话框模板单位:templateunitX=(pixelX★4)/baseunitX;templateunitY=(plxelY★8)/baseunitY   Windows CE:Windows CE不支持此函数的任何一个扩展的错误值。   
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:user32.lib


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))。
速查
  Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib;Unicode:在Windows NT环境下实现为Unicode和ANSI两种版本。

WM_LBUTTONDOWN,这个就是当被鼠标左键点击时引发的消息;
BM_CLICK是其他窗口发送给按钮控件的消息,让按钮执行点击操作,可以模拟按钮点击;
BN_CLICK是当按钮被点击时,按钮控件发送给按钮控件的父窗口的,告诉父窗口我被点击了。


GetWindowLong取得执行实体句柄

函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。   
函数原型:
 LONG GetWindowLong(HWND hWnd,int nlndex);   
参数:   
 hWnd:窗口句柄及间接给出的窗口所属的窗口类。   
 nlndex:指定要检索的基于0的偏移量。有效值的范围从0到窗口额外内存空间的字节数,减去4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第三个32位整数的索引位8(12- 4=8)。要获得任意其他值,指定下列值之一:   
 GWL_EXSTYLE= (-20) 扩展窗口样式   
 GWL_STYLE=(-16) 窗口样式   
 GWL_WNDPROC= (-4) 该窗口的窗口函数的地址   
 GWL_HINSTANCE= (-6) 拥有窗口的实例的句柄   
 GWL_HWNDPARENT= (-8) 该窗口之父的句柄。不要用SetWindowWord来改变这个值   
 GWL_ID= (-12) 对话框中一个子窗口的标识符   
 GWL_USERDATA = (-21) 含义由应用程序规定   
 DWL_DLGPROC = 4 这个窗口的对话框函数地址   
 DWL_MSGRESULT = 0 在对话框函数中处理的一条消息返回的值   
 DWL_USER = 8 含义由应用程序规定   
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用 GetLastError函数。   
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非0值来保留额外类的存储空间。   Windows CE:nlndex参数指定的字节偏移量必须为 4的倍数。不支持 unaligmned access。   Windows CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。   
Windows CE1.0也不支持在 nlndex参数中的 DWL_DLGPROC和 GWL_USERDATA。   速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0对以上版本;头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI两种版本。

SendMessage

函数功能:
  该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
函数原型:
  LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);   
参数:   
 hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。   
 Msg:指定被发送的消息。   
 wParam:指定附加的消息指定信息。   
 IParam:指定附加的消息指定信息。   
返回值:返回值指定消息处理的结果,依赖于所发送的消息。   
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。   如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。   Windows CE:Windows CE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。   
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。   SendMessage函数使用实例   程序控制拉下或收起组合框的下拉列来   一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。   在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。


DrawFocusRect

函数功能: 画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形
  函数原型:BOOL DrawFocusRect(HDC hDC, CONST RECT* lprc);  
参数:   
 hdc:设备环境句柄。   
 lprc:指向含有将填充矩形的逻辑坐标的RECT结构的指针。   
 返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值是0。   Windows NT:若想获得更多错误信息,请调用GetLastError函数。   
备注:DrawFocusRect只工作在MM_TEXT映像模式下,因为DrawFocusRect是一个异合函数


GetSystemMetrics

函数功能:GetSystemMetrics () 用于得到被定义的系统数据或者系统配置信息.
      函数原型:int WINAPI GetSystemMetrics( __in int 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的值则鼠标左右键交换,否则没有。


卷动列类别

简介:
  SYSMETS程式使用视窗卷动列,它出现在视窗的右边和底部。您可以在建立视窗时通过将识别字WS_VSCROLL、WS_HSCROLL或者两者都包含在视窗样式中,让视窗加上卷动列。现在我们准备建立一些卷动列控制项,它们是能在父视窗的显示区域的任何地方出现的子视窗。您可以使用预先定义的视窗类别「scrollbar」以及两个卷动列样式SBS_VERT和SBS_HORZ中的一个来建立子视窗卷动列控制项。
含义:
  与按钮控制项(以及将在后面讨论的编辑和清单方块控制项)不同,卷动列控制项不向父视窗发送WM_COMMAND讯息,而是像视窗卷动列那样发送WM_VSCROLL和WM_HSCROLL讯息。在处理卷动讯息时,您可以通过lParam参数来区分视窗卷动列与卷动列控制项。对子视窗卷动列其值为0,对于卷动列控制项其值为卷动列视窗代号。对视窗卷动列和卷动列控制项来说,wParam参数的高字组和低字组的含义相同。
宽度:
  虽然视窗卷动列有固定的宽度,Windows使用CreateWindow呼叫中(或者在後面的MoveWindow呼叫中)给定的矩形尺寸来确定卷动列控制项的尺寸。您可以建立细而长的卷动列控制项,也可以建立短而粗的卷动列控制项。   如果您想建立与视窗卷动列尺寸相同的卷动列控制项,那么可以使用GetSystemMetrics取得水平卷动列的高度: GetSystemMetrics (SM_CYHSCROLL) ;   
或者垂直卷动列的宽度:GetSystemMetrics (SM_CXVSCROLL) ;   
根据Windows文件,卷动列窗样式识别字SBS_LEFTALIGN、SBS_RIGHTALIGN、SBS_TOP ALIGN和SBS_BOTTOMALIGN给出卷动列的标准尺寸,但是这些样式只在对话方块中对卷动列有效。   
对视窗卷动列,您可以使用同样的呼叫来建立卷动列控制项的范围和位置:   
 SetScrollRange (hwndScroll, SB_CTL, iMin, iMax, bRedraw) ;   
 SetScrollPos (hwndScroll, SB_CTL, iPos, bRedraw) ;   
 SetScrollInfo (hwndScroll, SB_CTL, &si, bRedraw) ;   
其区别在于:视窗卷动列将父视窗的代号作为第一个参数,并且以SB_VERT或者SB_HORZ作为第二个参数。   
令人吃惊的是,名为COLOR_SCROLLBAR的系统颜色不再用於卷动列。两端的按钮和小方块的颜色由COLOR_BTNFACE、COLOR_BTNHILIGHT、COLOR_BTNSHADOW、COLOR_BTNTEXT (用於小箭头)、COLOR_DKSHADOW和COLOR_BTNLIGHT决定。两端按钮之间区域的颜色由COLOR_BTNFACE和COLOR_BTNHIGHLIGHT决定。   
如果您拦截了WM_CTLCOLORSCROLLBAR讯息,那么可以在讯息处理中传回画刷以取代该颜色


DRAWITEMSTRUCT

来由:DRAWITEMSTRUCT 为需要自绘的控件或者菜单项提供了必要的信息。在需要绘制的控件或者菜单项对应的WM_DRAWITEM消息函数中得到一个指向该结构的指针。   
例子:   virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); (.h中声明)   
 void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) (.cpp中定义)   
这里LPDRAWITEMSTRUCT即指向DRAWITEMSTRUCT结构体的指针。   
    DRAWITEMSTRUCT结构的定义如下:   
           typedef struct tagDRAWITEMSTRUCT
  {   
       UINT CtlType;
       UINT CtlID;   
       UINT itemID;   
       UINT itemAction;   
       UINT itemState;   
       HWND hwndItem;   
       HDC hDC;   
       RECT rcItem;   
          ULONG_PTR itemData;   
 } DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT;
    结构成员:   
 成员:   
 CtlType   指定了控件的类型,其取值如下表所示。   
  ODT_BUTTON:按钮控件   ODT_COMBOBOX:组合框控件   
  ODT_LISTBOX:列表框控件   ODT_LISTVIEW:列表视图控件   
  ODT_MENU:菜单项   ODT_STATIC:静态文本控件   
  ODT_TAB:Tab控件   CtlID   指定了自绘控件的ID值,而对于菜单项则不需要使用该成员   
 itemID   表示菜单项ID,也可以表示列表框或者组合框中某项的索引值。对于一个空的列表框或组合框,该成员的值为–1。这时应用程序只绘制焦点矩形(该矩形的坐标由rcItem 成员给出)虽然此时控件中没有需要显示的项,但是绘制焦点矩形还是很有必要的,因为这样做能够提示用户该控件是否具有输入焦点。当然也可以设置itemAction 成员为合适值,使得无需绘制焦点。   
 itemAction   指定绘制行为,其取值可以为下表中所示值的一个或者多个的联合。   
  ODA_DRAWENTIRE:当整个控件都需要被绘制时,设置该值   
  ODA_FOCUS:如果控件需要在获得或失去焦点时被绘制,则设置该值。此时应该检查itemState成员,以确定控件是否具有输入焦点。     ODA_SELECT   如果控件需要在选中状态改变时被绘制,则设置该值。此时应该检查itemState 成员,以确定控件是否处于选中状态。    itemState   指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值可以为下表中所示值的一个或者多个的联合。   
  ODS_CHECKED:如果菜单项将被选中,则可设置该值。该值只对菜单项有用。   
  ODS_COMBOBOXEDIT:在自绘组合框控件中只绘制选择区域。   
  ODS_DEFAULT:默认值。   
  ODS_DISABLED:如果控件将被禁止,则设置该值。   
  ODS_FOCUS:如果控件需要输入焦点,则设置该值。   
  ODS_GRAYED:如果控件需要被灰色显示,则设置该值。该值只在绘制菜单时使用。   
  ODS_HOTLIGHT:Windows 98/Me, Windows 2000/XP: 如果鼠标指针位于控件之上,则设置该值,这时控件会显示高亮颜色。     ODS_INACTIVE:Windows 98/Me, Windows 2000/XP: 表示没有激活的菜单项。   
  ODS_NOACCEL:Windows 2000/XP: 控件是否有快速键盘。   
  ODS_NOFOCUSRECT:Windows 2000/XP: 不绘制捕获焦点的效果。   
  ODS_SELECTED:选中的菜单项。   
 hwndItem   指定了组合框、列表框和按钮等自绘控件的窗口句柄;如果自绘的对象时菜单项,则表示包含该菜单项的菜单句柄。   
 hDC   指定了绘制操作所使用的设备环境。   
 rcItem   指定了将被绘制的矩形区域。这个矩形区域就是上面hDC的作用范围。系统会自动裁剪组合框、列表框或按钮等控件的自绘制区域以外的部分。也就是说rcItem中的坐标点(0,0)指的就是控件的左上角。但是系统不裁剪菜单项,所以在绘制菜单项的时候,必须先通过一定的换算得到该菜单项的位置,以保证绘制操作在我们希望的区域中进行。   
 itemData   对于菜单项,该成员的取值可以是由   
CMenu::AppendMenu、   CMenu::InsertMenu或者   CMenu::ModifyMenu   等函数传递给菜单的值。   
对于列表框或这组合框,该成员的值可以为由   ComboBox::AddString、   CComboBox::InsertString、   CListBox::AddString或者   CListBox::InsertString   等传递给控件的值。   如果ctlType 的取值是ODT_BUTTON或者ODT_STATIC, itemData的取值为0。。让我们来试一下。

SetScrollRange

函数功能:
  SetScrollRange函数设置所指定滚动条范围的最小值和最大值。注意 SetScrollRange函数提供向后的兼容性。新的应用程序应该使用SetScrollInfo函数

函数原型:
  BOOL SetScrollRange(HWND hWnd, // 窗口句柄  int nBar, // 滚动条类型  int nMinPos, // 滚动条的最小位置  int nMaxPos, // 滚动条的最大位置  BOOL bRedraw // 重绘标志);
参数:
   hWnd   [输入] 滚动条控件或带有标准滚动条窗体的句柄,由nBar参数值确定。   
 nBar   [输入] 指定滚动条将被设置。这个参数可以是下表值中的一个,含义如下:   
           值                    说明
  SB_CTL   设置滚动条控件的范围。而参数hwnd必须是滚动条控件的句柄。
  SB_HORZ   设置窗体的标准水平滚动条的范围。 
  SB_VERT   设置窗体的标准垂直滚动条的范围
  nMinPos   [输入] 指定滚动位置的最小值。   
 nMaxPos   [输入] 指定滚动位置的最大值.。   
 bRedraw   [输入] 指定滚动条是否被重画以反映变化。如果这个参数为TRUE,滚动条将被重画;如果为FALSE则不被重画。
返回值
  如果函数运行成功,返回值为非零;   如果函数运行失败,返回值为零。   若想获得更多的错误信息,请调用GetLastError函数。
备注
  可以将SetScrollRange中的nMinPos和nMaxPos参数设置为一样的值来使用,达到隐藏滚动条的目的。但在处理滚动条消息时,应用程序不应该调用函数SetScrollRange来隐藏滚动条。新的应用程序使用函数ShowScrollBar来隐藏滚动条。   
       如果调用函数SetScrollPos之后马上调用函数SetScrollRange,则SetScrollPos中的bRedraw参数一定要设置为零值(FALSE),以防止滚动条被画两次。   标准滚动条的缺省范围是0到100。滚动条控件的缺省值为NULL(参数nMinPos和nMaxPos的值均为零)。两个范围值之间的不同之处在于由参数nMinPos和nMaxPos指定的值不能超过MAXLONG的值。   
       因为说明滚动条位置的消息WM_HSCROLL和 WM_VSCROLL只能为16位数据,那些只依赖于说明位置数据消息的应用程序在函数SetScrollRange的参数nMaxPos中有一个实际最大值65,535 。但是,因为函数SetScrolllnfo,SetScrollPos, SetScrollRange,GetScrolllnfo,GetScrollPos,和GetScrollRange都支持32位的滚动条位置数据,所以有一个解决16位WM_HSCROLL和WM_VSCROLL消息阻碍的途径,请参见函数GetScrolllnfo的有关技术说明。   
       如果参数 nBar 设置为 SB_CTL 并且参数hWnd 所标识的不是一个标准的滚动条控件。系统将发送一个SBM_SETRANGE 消息到窗体用以设置滚动条消息。 这将允许函数SetScrollRange 操作一个定制的伪滚动条控件。如果窗体没有处理 SBM_SETRANGE消息,函数SetScrollRange将失败.
[编辑本段]速查
  Windows NT 3.1、Windows CE 2.0以上,头文件:winuser.h;库文件:user32.lib。

SetScrollPos

函数功能:
  该函数设置所指定滚动条中的滚动按钮的位置,如果需要,可重绘滚动条以反映出滚动按钮的新位置。该函数提供了向后兼容性,新的应用程序应使用SetScrolllnfo函数。
函数原型:
  int SetScrollPos( HWND hWnd,// 窗体句柄  int nBar, // 滚动条  int nPos,// 滚动条的新位置  BOOL bRedraw// 重绘标志 );
参数:
   hWnd   [输入] 滚动条控件或带有标准滚动条窗体的句柄,由nBar参数值确定   
 nBar   [输入] 指定滚动条将被设置。这个参数可以是下表值中的一个,含义如下:   
            值    说明
            SB_CTL  设置滚动条控件的范围。而参数hwnd必须是滚动条控件的句柄。
            SB_HORZ  设置窗体的标准水平滚动条的范围。 
                            SB_VERT  设置窗体的标准垂直滚动条的范围
 nPos   [输入] 指定滚动按钮的新位置。这个位置必须在滚动范围之内。若要了解更多有关滚动范围的信息,请参见SetScrollRange函数。    bRedraw   [输入] 指定滚动条是否被重画以反映变化。如果这个参数为TRUE,滚动条将被重画;如果为FALSE则不被重画。
返回值
  如果函数运行成功,其返回值是滚动按钮的前一个位置。   如果函数运行失败,其返回值是0。   若想获得更多的错误信息,请调用GetLastError函数。   Windows XP: 如果the desktop is themed 并且父窗口是一个 message-only window ,则函数返回一个不真实的值。
[编辑本段]备注
  如果后续又调用了会重绘滚动条的函数,那么设置参数bRedraw为FALSE是非常有必要的。   因为说明滚动条位置的消息WM_HSCROLL和 WM_VSCROLL只能为16位数据,那些只依赖于说明位置数据消息的应用程序在函数SetScrollPos的参数nMaxPos中有一个实际最大值65,535 。   但是,因为函数SetScrolllnfo,SetScrollPos, SetScrollRange,GetScrolllnfo,GetScrollPos,和GetScrollRange都支持32位的滚动条位置数据,所以有一个解决16位WM_HSCROLL和WM_VSCROLL消息阻碍的途径,请参见函数GetScrolllnfo的有关技术说明。
[编辑本段]速查
  Windows NT 3.1、Windows 95、Windows CE 2.0以上,头文件:winuser.h;库文件:user32.lib。

SetClassLong

函数功能:
      该函数替换在额外类存储空间的指定偏移地址的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构。   

函数原型:
      DWORD SetClassLong(HWND hWnd,int nlndex,LONG dwNewLong);   
参数:   
 hWnd:窗口句柄及间接给出的窗口所属的类。   
 nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等于0的偏移量。   有效值的范围从0到额外类的存储空间的字节数一4;例如,若指定了12个字节或多于12个字节的额外类存储空间,则索引值为8时,对应的是第三个32位整数值。要设置WNDCLASSEX结构中的任何值,指定下面索引之一:   
  GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。    
  GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配额外字节数。查看如何进入该内存,参看SetWindowLong。   
  GCL_HBRBACKGROUND:替换与类有关的背景刷子的句柄。   
  GCL_HCURSOR:替换与类有关的光标的句柄。
  GCL_HICON:替换与类有关的图标的句柄。   
  GCL_HMODULE:替换注册类的模块的句柄。
  GCL_STYLE:替换窗口类的风格位。   
  GCL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。   
  GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。   
 dwNewLong:指定的替换值。   
返回值:如果函数成功,返回值是原来类结构中32位整数;如果未事先设定,返回值为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。   
备注;如果使用SetClassLong函数和GCL_WNDPROC索引值来替换窗口过程,新的窗口过程必须与WindowProc回调函数中所规定的规则一致。   以带GCL_WNDPROC索引值的SetClassLong函数修改的一个窗口类的的子类将会影响所有随后以该类创建的窗口。应用程序可以创建一个系统类的子类,但是不能创建由其他进程创建的类的子类。   
     通过使用RegisterClassEx函数将WNDCLASSEX结构中的cbWndExtra单元指定为一个非零值来保留额外的的类存储空间。   
     使用SetClassLong函数要小心。例如,可以通过使用SetClassLong来改变类的背景颜色,但是这种改变不会马上生效,直到属于该类的窗体下次重绘,除非使用UpdateWindow()强迫窗体更新。   Windows CE:nlndex参数是一个字节偏移量但必须是4的倍数。Unaligned不支持。   
     不支持在nlndex参数中的标准的CGL_★值,只有一个例外,如果目标设各支持鼠标,则可以在nlndex参数中指定CGL_HCURSOR。   注意支持鼠标的WindowsCE版本包含Iconcurs和Mcursor组件而不是lcon和Cursor组件。   
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT 上实现为Unicode和ANSI两种版本。

OPENFILENAME
      OPENFILENAME结构包含了GetOpenFileName和GetSaveFileName函数用来初始化打开或另存为对话框的信息。在用户关闭对话框后,系统返回关于用户的选择信息到这个结构中。

结构体原型

     成员:
lStructSize
hwndOwner
hInstance
lpstrFilter
lpstrCustomFilter
nMaxCustFilter
nFilterIndex
lpstrFile
nMaxFile
lpstrFileTitle
nMaxFileTitle
lpstrInitialDir
lpstrTitle
Flags
nFileOffset
nFileExtension
lpstrDefExt
lCustData
lpfnHook
lpTemplateName
结构体原型
成员 lStructSize
hwndOwner
hInstance
lpstrFilter
lpstrCustomFilter
nMaxCustFilter
nFilterIndex
lpstrFile
nMaxFile
lpstrFileTitle
nMaxFileTitle
lpstrInitialDir
lpstrTitle
Flags
nFileOffset
nFileExtension
lpstrDefExt
lCustData
lpfnHook
lpTemplateName
 


  
结构体原型
  typedef struct tagOFN
 {   
          DWORD lStructSize;   
          HWND hwndOwner;   
          HINSTANCE hInstance;   
                          LPCTSTR lpstrFilter;   
                          LPTSTR lpstrCustomFilter;   
                          DWORD nMaxCustFilter;   
                          DWORD nFilterIndex;   
                          LPTSTR lpstrFile;   
                          DWORD nMaxFile;   
                          LPTSTR lpstrFileTitle;   
                          DWORD nMaxFileTitle;   
                          LPCTSTR lpstrInitialDir;   
                          LPCTSTR lpstrTitle;   
                          DWORD Flags;   
                          WORD nFileOffset;   
                          WORD nFileExtension;   
                          LPCTSTR lpstrDefExt;   
          LPARAM lCustData;   
          LPOFNHOOKPROC lpfnHook;   
          LPCTSTR lpTemplateName;   
 #if (_WIN32_WINNT >= 0x0500)   void * pvReserved;   
        DWORD dwReserved;   
                        DWORD FlagsEx;   
 #endif // (_WIN32_WINNT >= 0x0500)   
 } OPENFILENAME, *LPOPENFILENAME;
成员
lStructSize
  指定这个结构的大小,以字节为单位。   Windows 95/98和Windows NT 4.0:特意为Windows 95/98或Windows NT 4.0,及带有WINVER和_WIN32_WINNT >= 0x0500编译时,为这个成员使用OPENFILENAME_SIZE_VERSION_400。   Windows 2000及更高版本:这个参数使用sizeof (OPENFILENAME) 。
hwndOwner
  指向所有者对话框窗口的句柄。这个成员可以是任意有效窗口句柄,或如果对话框没有所有者它可以为NULL。
hInstance
  如果在Flags成员中设置了OFN_ENABLETEMPLATEHANDLE标记,hInstance成员指向包含一个对话框模板的内存对象。如果OFN_ENABLETEMPLATE标记被设置,hInstance是一个指向通过lpTemplateName成员命名的对话框模板的模块。如果两者都没有被设置,这个成员被忽略。   如果OFN_EXPLORER标记被设置,系统使用Explorer风格的默认对话框的子窗口作为指定模板来建立一个对话框。如果OFN_EXPLORER标记没有被设置,系统使用模板建立一个旧风格的对话框。
lpstrFilter
  指向一对以空字符结束的过滤字符串的一个缓冲。缓冲中的最后一个字符串必须以两个NULL字符结束。   第一个字符串是过滤器描述的显示字符串(例如,“文本文件”),第二个字符指定过滤样式(例如,“*.TXT”)。要为一个显示字符串指定多个过滤样式,使用分号(“;”)分隔样式(例如,“*.TXT;*.DOC;*.BAK”)。一个样式字符串中可以包含有效的文件名字字符及星号(*)通配符。不能在样式字符串中包含空格。   系统不能改变过滤器的次序。它按lpstrFilter指定的次序显示在文件类型组合框中。   如果lpstrFilter是NULL,对话框不能显示任何过滤器。
lpstrCustomFilter
  指向一个静态缓冲,它包含了一对以空字符结束的过滤器字符串,这个字符串是为了保留用户选择的过滤样式。第一个字符串是描述定制过滤器的显示字符串,第二个字符串是被用户选择的过滤器样式。第一次你的应用程序建立对话框,你指定的第一个字符串可以是任何非空的字符串。当用户选择了一个文件时,对话框复制当前过滤样式到第二个字符串。保留过滤样式可以是在lpstrFilter缓冲中指定的样式之一,或是用户输入的过滤器样式。在下一次对话框被建立时系统使用这个字符串去初始化用户自定义的文件过滤器。如果nFilterIndex成员是0,对话框使用定制过滤器。   如果这个成员是NULL,对话框不能保留用户自定义过滤器样式。   如果这个成员不是NULL,nMaxCustFilter成员的值必须指定以TCHARs为单位的lpstrCustomFilter缓冲的大小。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。
nMaxCustFilter
  指定特意为lpstrCustomFilter准备的以TCHARs为单位的缓冲大小。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。这缓冲应该最小在40个字符长。如果lpstrCustomFilter成员是NULL或是指向NULL的字符串,这个成员被忽略。
nFilterIndex
  指定在文件类型控件中当前选择的过滤器的索引。缓冲指向被lpstrFilter包含的一对定义了的过滤器的字符串。过滤器的第一对字符串的索引值为1,第二对为2,等等。0索引指出是通过lpstrCustomFilter指定的定制过滤器。你可以为对话框指定一个索引作为最初的过滤器描述及过滤器样式。当用户选择了一个文件时,nFilterIndex返回当前显示的过滤器的索引。   如果nFilterIndex是0及lpstrCustomFilter是NULL,系统使用在lpstrFilter缓冲中的第一个过滤器。如果所有的三个成员都是0或NULL,系统不使用任何过滤器,在对话框的列表文件中不显示任何文件。
lpstrFile
  指向包含初始化文件名编辑控件使用的文件名的缓冲。如果不需要初始值,这个缓冲的第一个字符必须是NULL。当GetOpenFileName或GetSaveFileName函数返回成功时,这个缓冲包含驱动器,路径,文件名,及所选择的文件的扩展名。   如果OFN_ALLOWMULTISELECT标记被设置并且用户选择了多个文件,缓冲包含了当前目录下被选择文件的文件名。对于Explorer风格对话框,目录和文件名字符串是被NULL分开的,在文件名之后有一个额外的NULL。对于旧风格对话框,字符串是被空格分开的并且函数为带有空格的文件名使用短文件名。你可以使用FindFirstFile函数在长短文件名之间转换。如果用户只选择了一个文件,lpstrFile字符串在路径和文件名之间没有分隔。   如果缓冲太小,函数返回FALSE并且CommDlgExtendedError函数返回FNERR_BUFFERTOOSMALL.。既然这样,lpstrFile缓冲的首先两个字节包含必需的大小(字节或字符)。
nMaxFile
  指定lpstrFile缓冲的大小,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。这个缓冲必须足够存储路径和文件名字符串,包含结尾的null字符。如果缓冲太小,GetOpenFileName和GetSaveFileName函数返回假(FALSE)缓冲最小应该在256个字符长。
lpstrFileTitle
  指向接收选择的文件的文件名和扩展名的缓冲(不带路径信息)。这个成员可以是NULL。
nMaxFileTitle
  指定lpstrFileTitle缓冲的大小,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字节的个数。如果lpstrFileTitle是NULL,这个成员被忽略。
lpstrInitialDir
  指向以空字符结束的字符串,可以在这个字符串中指定初始目录。Pointer to a null terminated string that can specify the initial directory. 在不同的平台上,为选择初始目录有不同的运算法则。   Windows 2000:   如果lpstrFile包含了一个路径,这个路径就是初始目录。   否则,lpstrInitialDir指定的为初始目录。   如果lpstrInitialDir为NULL,并且当前目录下包含有一些指定过滤器类型的文件,初始目录就是当前目录。   否则,如果应用程序在过去使用过打开哐另存为对话框,使用最近选择的路径作为初始目录。然而,如果一个应用程序长时间没有运行过,它保存的选择的路径将被丢弃。   否则,初始目录是当前用户的私人文件目录(即我的文档)。   否则,初始目录是桌面文件夹。   Windows 98:   lpstrInitialDir指定初始目录。   如果lpstrInitialDir是NULL并且lpstrFile包含了一个路径,那么这个路径就是初始目录。   否则,如果当前目录包含了一些指定的过滤类型的文件,那么初始化目录是当前目录。   否则,初始目录是当前用户的私人文件目录(即我的文档)。   Windows和Windows NT/ 2000的早期版本:   lpstrInitialDir指定初始目录。   如果lpstrInitialDir是NULL并且lpstrFile包含了一个路径,那么这个路径就是初始目录。   否则,初始目录是当前目录。
lpstrTitle
  指向在对话框的标题栏中放置的字符串。如果这个成员是NULL,系统使用默认标题(另存为或打开)
Flags
  位标记的设置,你可以使用来初始化对话框。当对话框返回时,它设置的这些标记指出用户的输入。这个成员可以是下列标记的组合。 标记 含意   OFN_ALLOWMULTISELECT 指定文件名列表框允许多选。如果同时你设置了OFN_EXPLORER标记,对话框使用Explorer风格用户界面;否则它使用旧风格用户界面。   
       如果用户选择了一个以上的文件,lpstrFile缓冲返回当前目录下所有被选择的文件的文件名。nFileOffset成员是到第一个文件名的偏移量(字节或字符),并且nFileExtension成员不被使用。对于Explorer风格对话框,目录和文件名是被NULL分隔的,在最后的文件名后带有额外的NULL。这个格式使Explorer风格的对话框能返回包含空格的长文件名。对于旧风格对话框,目录和文件字符串是被空格分隔的,函数为带有空格的文件名使用短文件名。你可以使用FindFirstFile函数在短文件名和长文件名之间转换。   
      如果你为一个旧风格对话框指定了一个定制的模板,文件名列表框的定义必须包含LBS_EXTENDEDSEL值。   OFN_CREATEPROMPT 如果用户指定了一个不存在的文件,这个标记使用对话框能提示用户是否新建这个文件。如果用户选择了新建这个文件,对话框关闭并且函数返回指定的名字;否则,对话框继续停留。如果你使用带有OFN_ALLOWMULTISELECT标记的这个标记,对话框允许用户去指定一个不存在的文件。   
     OFN_DONTADDTORECENT Windows 2000:防止系统为选择的文件增加快捷链接到最近使用文档中。要找回目录的位置,调用还有CSIDL_RECENT标记的SHGetSpecialFolderLocation函数。   
     OFN_ENABLEHOOK 激活在lpfnHook成员中指定的钩子函数。   OFN_ENABLEINCLUDENOTIFY Windows 2000:当用户打开一个文件夹时,引起对话框发送CDN_INCLUDEITEM通知消息到你的OFNHookProc程序。对话框为在最近打开的文件夹中的每一个项目发送一个通知。这些消息使你能够控制那些在对话框中显示的文件夹项目的列表。   OFN_ENABLESIZING Windows 2000,Windows 98:使Explorer风格的对话框可以使用鼠标或键盘调整大小。缺省时,Explorer风格的打开和另存为对话框允许被调整大小,不顾这个标记是否被设置。这标记仅在你提供了一个钩子程序或定制模板时是必需的。旧风格的对话框不允许调整大小。   OFN_ENABLETEMPLATE 指出lpTemplateName成员是指向对话框模板资源的名字,这个模板资源在能被hInstance成员识别的模块中。   如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用旧风格的对话框替代默认的对话框。   
      OFN_ENABLETEMPLATEHANDLE 指出hInstance成员能识别的包含预载对话框模板的数据块。如果这个标记被指定的,系统忽略lpTemplateName。   如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用模板去建立一个旧风格对话框替代默认对话框。   
     OFN_EXPLORER 指出任何打开或另存为对话框使用新的Explorer风格的用户化模块。关于更多的信息,参见Explorer-Style Hook Procedures和Explorer-Style Custom Templates。   
    缺省下,打开和另存为对话框使用Explorer风格用户界面,不顾这个标记是否设置。这个标记仅在你提供了一个钩子程序或定制模板或设置了OFN_ALLOWMULTISELECT标记时是必需的。   
     如果你想使用旧风格的界面,省略OFN_EXPLORER 标记,并且提供一个代替的旧风格模板或钩子程序。如果你想用旧风格但不需要一个定制模板或钩子程序,简单的提供一个钩子程序,让它返回FALSE。   
     OFN_EXTENSIONDIFFERENT 指定用户输入的一个文件的扩展名与lpstrDefExt指定的扩展名不同。如果lpstrDefExt是NULL,函数不使用这个标记。    OFN_FILEMUSTEXIST 指定用户仅可以在文件名登录字段中输入已存在的文件的名字。如果这个标记被指定的并且用户输入了一个无效的名字,对话框程序显示一个等待消息框。如果这个标记被指定,OFN_PATHMUSTEXIST标记也被使用。   
    OFN_FORCESHOWHIDDEN Windows 2000:强制显示系统和隐藏属性的文件,从而压倒用户设置的显示或不显示隐藏文件。否则,带有系统和隐藏标记的文件不被显示。   OFN_HIDEREADONLY 隐藏只读复选框。   
    OFN_LONGNAMES 对于旧风格对话框,这个标记引起对话框使用长文件名。如果这个标记没有被指定,或如果OFN_ALLOWMULTISELECT标记也被设置,旧风格对话框为带有空格的文件名使用短文件名(8.3格式)。   
   Explorer风格对话框忽略这个标记,通常显示长文件名。   OFN_NOCHANGEDIR 如果当搜索文件时用户改变了目录的时候,恢复当前目录到它的初始值。   
    OFN_NODEREFERENCELINKS 引导对话框为选择的快捷方式(.LNK)文件返回路径和文件名。如果这个值没有被指定,对话框返回这个快捷方式所引用文件的路径和文件名。   
    OFN_NOLONGNAMES 对于旧风格对话框,这个标识引起对话框去使用短文件名(8.3格式)。   
    Explorer风格对话框忽略这个标记,通常显示长文件名。   
    OFN_NONETWORKBUTTON 隐藏和显示风格按钮。   
    OFN_NOREADONLYRETURN 指定返回的文件不带有只读复选框,不是在写保护的目录中。   
    OFN_NOTESTFILECREATE 指定文件不是在对话框关闭前建立的。如果应用程序保存文件到一个建立的非映象风格共享上,这个标记应该被指定的。当一个应用程序指定了这标记,库不能检查写保护,磁盘满,打开驱动器门或网络保护。应用程序使用这个标记必须小心执行文件操作,因为一旦文件被关闭,它不能重新打开。   
   OFN_NOVALIDATE 指定公共对话框允许在返回的文件名中有无效的字符。典型的,正在调用的程序使用一个钩子程序通过FILEOKSTRING消息检查文件名。如果在编辑控件中的文本框是空的或只包含了空格,那么文件和目录列表框是被更新的。如果编辑控件中的文本框包含了别的东西,那么nFileOffset和nFileExtension的设置值是通过分析文本产生的。没有默认的扩展名被添加到文本,也没有文本被复制到lpstrFileTitle指定的缓冲。   如果通过nFileOffset指定的值比0小,文件是无效的。否则,文件名是有效的。如果OFN_NOVALIDATE没有被指定,nFileExtension和nFileOffset可以被使用。   OFN_OVERWRITEPROMPT 如果选择的文件已经存在,使用另存为对话框产生一个消息框。用户必须确认是否复盖这个文件。   OFN_PATHMUSTEXIST 指定用户仅能输入的路径和文件名。如果这个标记被使用并且用户在文件名输入字段中键入了一个用效的路径和文件名,对话框函数显示一个等待消息。   OFN_READONLY 当对话框建立时,显示被选择的只读复选框。这个标记指出当对话框被关闭时只读复选框的状态。   OFN_SHAREAWARE 指出如果调用OpenFile函数因为网络共享冲突而失败,这个错误被忽略并且对话框返回选择的文件名。   如果这个标记没有被设置,当用户选择的文件名发生网络共享冲突时,对话框发送通知到你的钩子程序。如果你设置了OFN_EXPLORER标记,对话框发送CDN_SHAREVIOLATION消息到钩子程序。如果你没有设置OFN_EXPLORER,对话框发送SHAREVISTRING注册的消息到钩子程序。   OFN_SHOWHELP 使对话框显示帮助按钮。hwndOwner成员必须指定一个窗口,这个窗口作为接收对话框发送的HELPMSGSTRING注册的消息,当用户单击帮助按钮时对话框发送这个消息。   当用户单击帮助按钮时,一个Explorer风格的对话框发送CDN_HELP通知消息到你的钩子程序。
nFileOffset
  指定从路径开始到通过lpstrFile指定的文件名字符串基于0的偏移,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字符的个数。例如,如果lpstrFile指向下列的字符串,“c:/dir1/dir2/file.ext”,这个成员包含指出“file.ext”字符串偏移的位置值13。   如果用户选择了多于一个的文件,nFileOffset是到第一个文件名的偏移。
nFileExtension
  指定从路径开始到通过lpstrFile指定的文件名字符串中扩展名基于0的偏移,以TCHARs为单位。对于ANSI版本,是字节的个数;对于Unicode版本,是字节的个数。例如,如果lpstrFile指向下列的字符串,“c:/dir1/dir2/file.ext”,这个成员包含的值是18。如果用户没有输入一个扩展名并且lpstrDefExt是NULL,这个成员指定的偏移是结束字符NULL。如果用户在文件名中输入一个“.”作为最后的字符,这个成员是0。
lpstrDefExt
  指向包含默认扩展名的缓冲。如果用户忘记输入扩展名,GetOpenFileName和GetSaveFileName附加这个扩展名到文件名中。这个字符串可以是任一长度,但但只有头三个字符被附加。字符串不应该包含一个句点(.)。如果这个成员是NULL并且用户忘记了输入一个扩展名,那么将没有扩展名被附加。
lCustData
  指定应用程序定义的数据,这数据是能被lpfnHook成员识别的系统传到的钩子程序。当系统发送WM_INITDIALOG消息到程序,消息的lParam参数指向当对话框建立时指定的OPENFILENAME结构。钩子程序可以使用这个指针获得lCustData的值。
lpfnHook
  指向一个钩子程序。除非Flags成员中包含OFN_ENABLEHOOK标记,要么这个成员将被忽略。   如果在Flags成员中OFN_EXPLORER标记没有被设置,lpfnHook指向一个OFNHookProcOldStyle钩子程序,这个程序有意的从对话框接收消息。钩子程序返回FALSE传递一个消息到默认的对话框程序或返回TRUE丢弃消息。   如果OFN_EXPLORER被设置,lpfnHook指向一个OFNHookProc钩子程序。这个钩子程序接收从对话框发出的通知消息。这个钩子程序也接收你通过一个子对话框模板定义的附加控件的消息。钩子程序不有意接收默认对话框的标准控件的消息。
lpTemplateName
  指向一个以空字符结束的字符串,字符串是对话框模板资源的名字,资源保存在能被hInstance成员识别的模块中。对于有限的对话框资源,这可以是通过MAKEINTRESOURCE返回的值。除非在Flags成员中设置了OFN_ENABLETEMPLATE标记,要么这个成员被忽略。   
       如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用模板去建立一个旧风格的对话框来替代默认对话框。   
       pvReserved   保留。   
      dwReserved   保留。   
      FlagsEx   Windows 2000:设置位标记,你可以使用来初始化对话框。这个成员可以是下列标记的组合。 标记 含意   
      OFN_EX_NOPLACESBAR 如果这个标记被设置,则位置栏被不显示。如果这个标记没有设置,则Explorer风格的对话框包含一般使用文件图标的位置栏,例如像收藏夹和桌面。   
切记:#include <Commdlg.h>

原创粉丝点击