A custom-draw control is a good choice as long as we don't try to change too much its behavior and appearance.
Otherwise, making a custom or ActiveX control from scratch may be a better option.