SetWindowLong(TreeView1->Handle,GWL_STYLE, GetWindowLong(TreeView1->Handle,GWL_STYLE) | TVS_CHECKBOXES);
创建一个带有CheckBox的TreeView,但是如何获得OnCheck消息呢?
请朋友们帮帮忙?谢谢! 

解决方案 »

  1.   

    SendMessage(Handle, BM_SETCHECK, Integer(FState), 0); 
    截获BM_SETCHECK消息!
      

  2.   

    function TFLoginManage.TreeNodeGetChecked(mTreeNode: TTreeNode): Boolean;
    var
      vTVItem: TTVItem;
    begin
    //取得某个节点的checked的值。
      Result := False;
      if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
      vTVItem.mask := TVIF_STATE;
      vTVItem.hItem := mTreeNode.ItemId;
      if TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then
        Result := (vTVItem.State and IndexToStateImageMask(2)) > 0; //0: None 1: False 2: True
    end; { TreeNodeGetChecked }function TFLoginManage.TreeNodeSetChecked(mTreeNode: TTreeNode; mChecked: Boolean): Boolean;
    var
      vTVItem: TTVItem;
      Template:integer;
    begin
    //设置某个节点的checked的值为指定mchecked的值。
      Result := False;
      if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
      vTVItem.mask := TVIF_STATE;
      vTVItem.hItem := mTreeNode.ItemId;
      TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem);
      if not TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then Exit;
      vTVItem.stateMask := TVIS_STATEIMAGEMASK;
      vTVItem.state := IndexToStateImageMask(Succ(Ord(mChecked)));
      Result := TreeView_SetItem(mTreeNode.TreeView.Handle, vTVItem);
    end; { TreeNodeSetChecked }procedure TFLoginManage.TreeView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
       if htOnStateIcon in TreeView1.GetHitTestInfoAt(X, Y) then
          Begin
          SetTreeViewNodeCheck(TreeView1.GetNodeAt(X,Y),TreeNodeGetChecked(TreeView1.GetNodeAt(X,Y)));
          End
        else
           Begin
           Caption := '';
           End;
    end;
    在窗体的create事件中写下如下代码:
        SetWindowLong(TreeView1.Handle, GWL_STYLE,
        GetWindowLong(TreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES);
    不知道这样你能看懂么!?