この問題の回避策はまだ見つかっていませんが、WinDBG でいくつかの VB6 ランタイム コードをテストしてステップ実行した後、なぜこの問題が発生するのかがよくわかりました。
最初の興味深い点は、VB6 が Windows によって提供される標準のツールチップ表示メカニズムを使用しないことです。たとえば、WM_NOTIFYメッセージを使用してツールヒントを表示/非表示にしたり、Windows でツールヒントがどのように機能するかを説明するドキュメントに記載されているその他の "標準" ツールヒント サポートを使用しません。
代わりに、VB6 ランタイムには、ツールチップを管理および表示する独自の方法があります。原則として、ツールチップを処理する標準的な Windows の方法といくつかの点で似ていますが、かなりの部分で異なっています。
VB6 がツールチップを行う方法の内訳:
VB6 プログラムが起動すると、ランタイムはSetWindowsHookExを使用して、プログラムのメイン スレッドにマウス フックをインストールします。
マウス フックは、プログラムに送信されるすべてのマウス メッセージ、特にすべてのWM_MOUSEMOUSEメッセージをインターセプトします。
マウス フックが実行されるたびに、VB6 ランタイムの内部メソッドを呼び出して、現在マウスが置かれているコントロールのオブジェクト ポインター (HCTL) を取得します。これは、ウィンドウ ハンドルではなく、実際の COM インターフェイス ポインターであることに注意してください。
HCTL を対応するウィンドウ ハンドル (HWND) に変換します。
マウスの位置がそのウィンドウの四角形内にあるかどうかを確認します。
その場合、コントロールのToolTipTextプロパティを取得します。これが空でない場合、ツールチップ ウィンドウが作成され、700 ミリ秒の遅延後にツールチップが表示されます。
MSHFlexGrid (および、標準の VB6 コントロールではない他のコントロールもあると思います) の問題は、カスタム コンテナー内にあるコントロールの上にカーソルを置いたときに、このコードが正しい HCTL を取得しないことです。
その場合、コードは、MSHFlexGrid 自体の HCTL ではなく、カスタム コンテナーの HCTL を取得します。したがって、グリッドのToolTipTextではなく、コンテナーのToolTipTextプロパティ (空) を取得するため、ツールヒントは表示されません。
質問のコメントに記載されているように、コンテナとしてPictureBoxを使用すると、これらすべてが正しく機能するため、なぜこれが行われるのか正確にはわかりません。
PictureBoxには、独自のコンテナーを作成するときに含まれていない、これを正しく処理するためのコードがあると思われます。
実際の回避策が見つかった場合は、この回答を更新します。私が今考えることができる唯一のことは、コンテナのToolTipTextプロパティをグリッドのToolTipTextプロパティと何らかの形で「同期」して、VB6 がコンテナのToolTipTextを要求したときに、代わりにグリッドのToolTextTipプロパティの値を返すようにすることです。
ただし、ToolTipTextは拡張プロパティであり、拡張プロパティは自分で記述した同じ名前のプロパティよりも優先されるため、これは言うは易く行うは難しです。