Tree的CheckBox

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章