大家好!
我在看到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;
我在看到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;
获得Combox的子窗口句柄,这个是下拉列表框的窗口句柄ChildHandle := GetWindow(ChildHandle, GW_HWNDNEXT);
FEditHandle := ChildHandle;
与下拉列表框平行的编辑框句柄
能授之以渔,那小弟十分感谢.