LONG GetWindowLong(HWND hWnd,int nlndex);
該函數獲得有關指定窗口的信息,函數也獲得在額外窗口內存中指定偏移位地址的32位度整型值。
參數:
hWnd:窗口句柄及間接給出的窗口所屬的窗口類。
nlndex:指定要獲得值的大於等於0的值的偏移量。有效值的範圍從0到額外窗口內存空間的字節數一4例如,若指定了12位或多於12位的額外類存儲空間,則應設爲第三個32位整數的索引位8。要獲得任意其他值,指定下列值之一:
GWL_EXSTYLE;獲得擴展窗日風格。
GWL_STYLE:獲得窗口風格。
GWL_WNDPROC:獲得窗口過程的地址,或代表窗口過程的地址的句柄。必須使用GWL_WNDPROC函數調用窗口過程。
GWL_HINSTANCE:獲得應用事例的句柄。
GWL_HWNDPAAENT:如果父窗口存在,獲得父窗口句柄。
GWL_ID:獲得窗口標識。
GWL_USERDATA:獲得與窗口有關的32位值。每一個窗口均有一個由創建該窗口的應用程序使用的32位值。
在hWnd參數標識了一個對話框時也可用下列值:
DWL_DLGPROC:獲得對話框過程的地址,或一個代表對話框過程的地址的句柄。必須使用函數CallWindowProc來調用對話框過程。
DWL_MSGRESULT:獲得在對話框過程中一個消息處理的返回值。
DWL_USER:獲得應用程序私有的額外信息,例如一個句柄或指針。
返回值:如果函數成功,返回值是所需的32位值;如果函數失敗,返回值是0。若想獲得更多錯誤信息請調用 GetLastError函數。
來自: hotboys, 時間: 2005-03-18 8:44:44, ID: 3017606
LONG SetWindowLong(HWND hWnd,int nlndex,LONG dwNewLong);
該函數改變指定窗口的屬性.函數也將指定的一個32位值設置在窗口的額外存儲空間的指定偏移位置。
參數:
hWnd:窗口句柄及間接給出的窗口所屬的類。
nlndex:指定將設定的大於等於0的偏移值。有效值的範圍從0到額外類的存儲空間的字節數-4:例如若指定了12位或多於12位的額外類存儲空間,則應設爲第三個32位整數的索引位8。要設置其他任何值,可以指定下面值之一:
GWL_EXISTYLE:設定一個新的擴展風格。GWL_STYLE:設定一個新的窗口風格。
GWL_WNDPROC:爲窗口過程設定一個新的地址。GWL_ID:設置一個新的窗口標識符。
GWL_HINSTANCE:設置一個新的應用程序事例句柄。
GWL_USERDATA:設置與窗口有關的32位值。每一個窗口均有一個由創建該窗口的應用程序使用的32位值。
當hWnd參數標識了一個對話框時,也可使用下列值:
DWL_DLGPROC:設置對話框過程的新地址。
DWL_MSGRESULT:設置在對話框過程中處理的消息的返回值。
DWL_USER:設置的應用程序私有的新的額外信息,例如一個句柄或指針。
dwNewLong:指定的替換值。
返回值:如果函數成功,返回值是指定的32位整數的原來的值。如果函數失敗,返回值爲0。若想獲得更多錯誤信息,請調用GetLastError函數。
如果指定32位整數的原來的值爲0,並且函數成功,則返回值爲0,但是函數並不清除最後的錯誤信息,這就很難判斷函數是否成功。這時,就應在調用SetWindowLong之前調用callingSetLastError(0)函數來清除最後的錯誤信息。這樣,如果函數失敗就會返回0,並且GetLastError。也返回一個非零值。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, StdCtrls, ComCtrls,commctrl;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Memo1: TMemo;
Button1: TButton;
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const TVS_CHECKBOXES = $0100;
var
s: dword;
begin
s := GetWindowLong( treeview1.Handle, GWL_STYLE);
s := s or TVS_CHECKBOXES;
SetWindowLong(treeview1.Handle, GWL_STYLE , s);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
item:TTVItem;
s:string;
begin
{
item.state:= (item.state or $1000) and (not $2000); 未打勾
item.state:= (item.state or $2000) and (not $1000); 打勾
}
memo1.Text := '';
for i := 0 to treeview1.Items.Count - 1 do
begin
item.mask:=TVIF_HANDLE;
item.hItem:=treeview1.Items[i].ItemId;
TreeView_GetItem(treeview1.Handle,item);
if (item.state and $2000)=0 then
//未打勾
else
memo1.Lines.Add('父爲'+s+'-'+treeview1.Items.Item[i].Parent.Text+'-'+
inttostr(treeview1.Items.Item[i].Level)
+'層'+'-'+treeview1.Items[i].Text);
end;
end;
end.