Okay, that makes more sense. I hadn't realized until now that you
were using the imaq library to draw to your canvas. I had assumed that
you were using the native CVI canvas functions from the UI library
(CanvasDrawBitmap, etc...). The other functions you've mentioned, like CanvasUpdate,
ProcessDrawEvents, and even the ATTR_DRAW_POLICY attribute only impact
the native canvas controls functions from the UI library. The imaq functions are from a completely different library (which unfortunately I'm not really familiar with).
Since the imaq library
doesn't have access to the internals of the CVI canvas control, it's
not too surprising that it can't draw something into the canvas that
would persist in the control. Looking at the imgPlot function, it looks as if it just
treats the canvas as a region of the window, to which it renders a frame
buffer once.
If I were you, I would assume that I would have to redraw the contents
of the buffer every time the CVI window needs to redraw itself. To
accomplish this, it should be sufficient to trap the low-level windows message WM_PAINT (you can do this with the InstallWinMsgCallback function from the
Programmer's Toolbox). When you receive that message, you can post an internal event (using PostDeferredCall) to redraw the canvas. The reason you need to post an event is because you have to draw
after CVI draws the blank canvas control first.
For more, and probably better recommendations, I also recommend that you re-post this question in the Machine Vision forum, since you're more likely to run into expert users of this library in that forum.
Luis