zoukankan      html  css  js  c++  java
  • 有趣的TWinControl.RecreateWnd,并分析在哪些场合使用

    CM_RECREATEWND = CM_BASE + 51; // TWinControl里有对应函数
    procedure CMRecreateWnd(var Message: TMessage); message CM_RECREATEWND; // important 毁掉后,重新创建,并加上焦点
    procedure RecreateWnd; // 非虚函数,发消息CM_RECREATEWND 重新创建组件 fixme 为什么不把销毁工作写在这里,非要另外另起一个消息响应函数呢。原因一方面是可以附加参数,另一方面发消息调用更灵活,VMT表更小


    procedure TWinControl.RecreateWnd;
    begin
    if FHandle <> 0 then Perform(CM_RECREATEWND, 0, 0);
    end;

    procedure TWinControl.CMRecreateWnd(var Message: TMessage);
    var
    WasFocused: Boolean;
    begin
    WasFocused := Focused; // 类函数,调用API检测
    DestroyHandle; // 调用入口函数 fixme 句柄值被变掉了怎么办
    UpdateControlState; // 检查一下,然后在显示的过程中再次创建
    if WasFocused and (FHandle <> 0) then Windows.SetFocus(FHandle); // API
    end;

    procedure TWinControl.CMBiDiModeChanged(var Message: TMessage);
    begin
    inherited;
    if (SysLocale.MiddleEast) and (Message.wParam = 0) then
    RecreateWnd;
    NotifyControls(CM_PARENTBIDIMODECHANGED);
    end;

  • 相关阅读:
    5555
    3333
    4444
    试验2
    Android之TextView灵活使用(转载)
    Android之使用Android-query框架进行开发(一)(转载)
    Android 之Html的解析(使用jsoup)
    Android之动画的学习(转载)
    Android之官方下拉刷新控件SwipeRefreshLayout
    Android之sqlite的使用 (转载)
  • 原文地址:https://www.cnblogs.com/findumars/p/4767127.html
Copyright © 2011-2022 走看看