Thanks for the insightful analysis, honki-bobo. Your first method is one I considered, then rejected, because it would really make a mess of the interface pretty quickly. The second doesn't do quite what I intended (I had to try it out to be sure I wasn't speaking through my hat), in that it changes the value of the non-moving control, and not the moving one. Furthermore, the one that got moved can still be moved itself to invalidate the invariant. I think providing the converse case might stop the latter from happening, but haven't yet tried it.
In other words, this method changes the invariant, rather than enforcing it. The actual situation I'm working with is a bit messier yet, because there are
three knobs, one of which must stay between the other two, and, of course, the outside ones can't be allowed to move past the middle one. I think, though, that you've given me enough of a hint that I can sort things out. The solution to the problem appears to be that you can't expect a graphics update from the knob that was just mouse-moved; I think delaying the change to a timer-based test might solve it, but I haven't tested that, either. Ah, well, something to do in the wee hours.
Thanks, again, honki-bobo. I appreciate it.