大家好!
我在看到TCustomComboBox控件的时候,发现一个控件有三个窗口句柄.有些地方不理解.
高手能指点一下吗.(比如 网站,书籍).谢谢procedure TCustomComboBox.CreateWnd;
var
  ChildHandle: THandle;
begin
  inherited CreateWnd;
  FDropHandle := Handle; 
  if FSaveItems <> nil then
  begin
    FItems.Assign(FSaveItems);
    FSaveItems.Free;
    FSaveItems := nil;
    if FSaveIndex <> -1 then
    begin
      if FItems.Count < FSaveIndex then FSaveIndex := Items.Count;
      SendMessage(Handle, CB_SETCURSEL, FSaveIndex, 0);
    end;
  end;
  if FStyle in [csDropDown, csSimple] then
  begin
    ChildHandle := GetWindow(Handle, GW_CHILD);
    if ChildHandle <> 0 then
    begin
      if FStyle = csSimple then
      begin
        FListHandle := ChildHandle;
        FDefListProc := Pointer(GetWindowLong(FListHandle, GWL_WNDPROC));
        SetWindowLong(FListHandle, GWL_WNDPROC, Longint(FListInstance));
        ChildHandle := GetWindow(ChildHandle, GW_HWNDNEXT);
      end;
      FEditHandle := ChildHandle;
      FDefEditProc := Pointer(GetWindowLong(FEditHandle, GWL_WNDPROC));
      SetWindowLong(FEditHandle, GWL_WNDPROC, Longint(FEditInstance));
    end;
  end;
  if NewStyleControls and (FEditHandle <> 0) then
    SendMessage(FEditHandle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, 0);
end;

解决方案 »

  1.   

    Handle是combox自身的句柄ChildHandle   :=   GetWindow(Handle,   GW_CHILD); 
    获得Combox的子窗口句柄,这个是下拉列表框的窗口句柄ChildHandle   :=   GetWindow(ChildHandle,   GW_HWNDNEXT);
    FEditHandle   :=   ChildHandle;  
    与下拉列表框平行的编辑框句柄
      

  2.   

    谢谢king_xing,有没有书籍和网站要介绍一下.
    能授之以渔,那小弟十分感谢.
      

  3.   

    好像没有这样的书,这个估计要个人看了。很多控件都是窗口叠加的效果,像:TPageControl