您的位置:首页 > 编程语言 > C语言/C++

Windows API函数SetWindowLong简析

2016-07-26 10:20 441 查看
函数原型1:

LONG SetWindowLong(

    HWND hWnd,               //handle to window

    int nlndex,              //offset of value to set

    LONG dwNewLong           // new value

);

hWnd:

  
窗口句柄及间接给出的窗口所属的类。

nindex:

   指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数减4:例如若指定了12或多于12个字节的额外窗口存储空间,则应设索引位8来访问第三个4字节,同样设置0访问第一个4字节,4访问第二个4字节。要设置其他任何值,可以指定下面值之一:

 

 


当hWnd参数标识了一个对话框时,也可使用下列值:

 

 


dwNewLong:

指定的替换值。

dwNewLong中可以使用以下一些列表控件的专用风格:

LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT

这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:

大图标显示,小图标显示,列表显示,详细报表显示

LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。

LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点

LVS_SINGLESEL 同时只能选中列表中一项。

函数原型2:

 SetWindowLong(Handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE) or

                                                                  WS_EX_TRANSPARENT or

                                                                   WS_EX_LAYERED );

WS_EX_ACCEPTFILES = 0x00000010

指明了一个已创建视窗具有拖拽文件功能

WS_EX_APPWINDOW = 0x00040000

强制一个可见的顶级视窗到工具栏上

WS_EX_CLIENTEDGE = 0x00000200

使一个视窗具有凹陷边框

WS_EX_COMPOSITED = 0x02000000

Windows XP:将一个窗体的所有子窗口使用双缓冲按照从低到高方式绘制出来,参阅remark项.如果这个视窗已经使用经典样式中的下列值CS_OWNDC , CS_CLASSDC,WS_EX_CONTEXTHELP.此参数将不能使用.

这个样式的视窗在标题栏上有一个问号,当拥护点击着个问号,鼠标变成一个问号,如果用户然后点击一个子窗口,子窗就会收到一条WM_HELP消息.子窗口将把这个消息传递给他的父进程,这个父进程将用HELP_WM_HELP命令调用WinHelp函数.这个帮助程序常常弹出一个典型的包含其子窗口的帮助的窗口

本参数不能和WS_MAXIMIZEBOX ,WS_MINIMIZEBOX一起使用

WS_EX_CONTROLPARENT = 0x00010000

这个窗体本身包含了参与对话框导航的子窗口.如果使用了这个参数,对话框管理器?入这个窗体的子窗口,当执行导航操作时,比如按住TAB键,方向键.

WS_EX_DLGMODALFRAME = 0x00000001

创建一个具有双边框的窗口,这个窗口可以通过使用WS_CAPTION样式被创建成具有一个标题栏的窗口.

WS_EX_LAYERED = 0x00080000

Windows 2000/XP:创建一个分层的窗口.注意,这不能用在子窗口上.同样,如果窗口具有CS_OWNDC ,CS_CLASSDC样式,这也不用使用.

WS_EX_LAYOUTRTL = 0x00400000

阿拉伯以及西伯来版本的98/ME,2000/XP创建一个水平起点在右边的窗口.越往左边水平坐标值变大.

WS_EX_LEFT = 0x00000000

创建一个窗口具有一般的左对齐属性.此为默认

WS_EX_LEFTSCROLLBAR = 0x00004000

如果外壳语言是西伯来,阿拉伯,或者其他阅读顺序的语言,竖滚动条将会在客户区的左边.对其他语言,此参数忽略.

WS_EX_LTRREADING = 0x00000000

窗体的文字按照从左到右排列.此为默认.

WS_EX_MDICHILD = 0x00000040

创建一个多文档界面的子窗口.

WS_EX_NOACTIVATE = 0x08000000

Windows 2000/XP:一个使用此参数创建的顶级窗口不会变成前台窗口,当用户点击他时.系统不会将此窗口放到前台,当用户最小化或者关闭这个前台窗口.

要激活这样的窗口,使用SetActiveWindow或者SetForegroundWindow函数

此类型的窗口默认不会显示在任务栏上.要强行将这样的窗口显示到任务栏上,使用WS_EX_APPWINDOW参数.

WS_EX_NOINHERITLAYOUT = 0x00100000

Windows 2000/XP:用此参数创建的窗体不会传递他的窗口布局给他的子窗口

WS_EX_NOPARENTNOTIFY = 0x00000004

指明一个使用此参数创建的窗口不发送WM_PARENTNOTIFY消息给他的父窗口当这个窗口被创建或者销毁的时候.

WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE| WS_EX_CLIENTEDGE)

联合了WS_EX_CLIENTEDGE and WS_EX_WINDOWEDGE styles

WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE |WS_EX_TOOLWINDOW | WS_EX_TOPMOST)

联合了WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW, and WS_EX_TOPMOST styles.

WS_EX_RIGHT = 0x00001000

窗口具有一般的右对齐属性.这要依靠这个窗口的类.这个样式只有外壳语言是西伯来语,阿拉伯语等其他阅读顺序的语言才有影响,否则此样式别忽略 

对文字标签或者编辑框使用WS_EX_RIGHT样式跟使用SS_RIGHT 或者 ES_RIGHT影响是一样的.对按钮使用这个样式跟使用BS_RIGHT 和BS_RIGHTBUTTON的影响是一样的

WS_EX_RIGHTSCROLLBAR = 0x00000000

竖直滚动条显示在客户区的右边.默认.

WS_EX_RTLREADING = 0x00002000

如果外壳语言是西伯来语,阿拉伯语等支持排列方式阅读的语言,窗体文字将按照从右到左的阅读顺序.对其他语言,此样式忽略.

WS_EX_STATICEDGE = 0x00020000

创建一个窗口具有三维边框用来表示一个项目不接受用户输入.

WS_EX_TOOLWINDOW = 0x00000080

创建一个工具窗口:也就是说,这个窗口被用来做浮动工具条.一个工具窗口具有一个比一般的标题栏短的标题栏,并且系统在标题栏使用小字体.作为工具窗口, 它不显示在工具栏上.当用户用ALT+TAB切换时也不出现在对话框中.如果一个工具窗有系统菜单,那么他的图标不会被显示在标题栏上.但是,你可以通过键入ALT+TAB或者右键点击标题栏来显示系统菜单.

WS_EX_TOPMOST = 0x00000008

指明用此参数创建的窗口将会放在所有顶级视窗上并且停在最上面.即使这个窗口不是活动的.要添加或者移除他,使用SetWindowPos函数.

WS_EX_TRANSPARENT = 0x00000020

用此参数创建的的窗口在他同一线程的窗口被绘制前将不会被绘制.这个窗口透明的显示,因为同一线程的窗口已经绘制出来

要脱离这个限制激活透明,使用SetWindowRgn函数.

WS_EX_WINDOWEDGE = 0x00000100

使一个窗口具有凸起的边框.

返回值:

如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。

如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用SetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++