我正在创建一个从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 ++做了很多,但对WinForms和WPF来说还是新手,所以它很可能是显而易见的......
答案 0 :(得分:2)
除非您使用OnPaint
方法构建适当的样式,否则UserControl
通常不会在SetStyle
中调用UserPaint
。您需要将OnPaint
样式设置为true才能调用SetStyle(ControlStyles::UserPaint, true);
。
OnPaint
我最近自己遇到过这个问题并且开始寻找答案。我想在绘画期间执行一些计算(以利用绘画消息的独特处理)但我并不总是接到OnPaint
的调用。
在使用Reflector挖掘之后,我发现只有在相应的WM_PAINT
消息的剪切矩形不为空时才会调用UserControl
。我的OnPaint
实例有一个子控件,它填满了整个客户区域,因此将其全部剪切掉了。这意味着剪切矩形为空,因此没有WndProc
调用。
我通过覆盖WM_PAINT
并直接为{{1}}添加处理程序来解决这个问题,因为我找不到另一种方法来实现我想要的目标。
答案 1 :(得分:1)
我解决了这个问题,万一有人感兴趣。这是因为我的WinForms控件嵌入在ViewBox中。我把它改成了网格并立即开始获取绘画事件。我想在询问有关WPF的问题时,您应该始终在问题中包含XAML!