代码之家  ›  专栏  ›  技术社区  ›  Brian Stewart

未调用Windows窗体用户控件重写

  •  0
  • Brian Stewart  · 技术社区  · 16 年前

    我正在创建一个从UserControl派生的Windows窗体控件,以嵌入到WPF应用程序中。我大体上遵循了中给出的程序 this link

    public ref class CTiledImgViewControl : public UserControl
    {
    ...
    
    virtual void OnPaint( PaintEventArgs^ e ) override;
    
    ...
    };
    

    在我的CPP文件中:

    void CTiledImgViewControl::OnPaint( PaintEventArgs^ e )
    {
        UserControl::OnPaint(e);
        // do something interesting...
    }
    

    一切都会编译和运行,但是OnPaint方法永远不会被调用。

    有什么想法可以找吗?我用C++做了很多,但是对于WiFrm和WPF来说是很新的,所以它很明显…

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jeff Yates    16 年前

    这个 OnPaint UserControl 除非在使用 SetStyle 方法你需要设置 UserPaint 风格为真实的 窗体重画 接到电话。

    SetStyle(ControlStyles::UserPaint, true);
    


    最近,我自己也遇到了这个问题,并开始寻找答案。我想在绘制过程中执行一些计算(以利用绘制消息的独特处理),但我并不总是接到调用 窗体重画 .

    在用反射器四处搜索之后,我发现 仅当相应的 WM_PAINT 用户控制 窗体重画 呼叫

    我通过重写 WndProc 以及为 直接因为我找不到另一种方法来实现我想要的。

        2
  •  1
  •   Brian Stewart    16 年前

    我解决了这个问题,以防有人感兴趣。这是因为我的WinForms控件嵌入在一个ViewBox中。我将其更改为网格,并立即开始绘制事件。我想当问关于WPF的问题时,你应该总是在问题中包含XAML!