PTVIです。

> ボタンの処理を実装するクラスにより、その処理が動く場合と
> そうでない場合があるようですが、その理由が理解できません。

> 環境:VC++6.0 SP4 MFC ビューの基底=CFormView

> 実装処理:ボタンが1回押されたとき(BN_CLICKED)

> 実装先クラスと動作:
> CMyApp 実行されない
> CMainFrame 実行されない
> CChileFrame 実行されない
> CMyView 実行される
> CMyDoc 実行される
> (CMyViewとCMyDoc両方に実装するとCMyViewだけ実行)

> クラスウィザードによるデフォルトの実装先はCMyViewに
> なりますが、行う処理とクラスとの関係により

クリックなどの通知はボタンなどに限らず、
特殊のものを除いて
親ウィンドウに送られます。

もしビューで処理しなかったら
対応するドキュメントにメッセージが送られるように
MFCが作られているからです。

コマンド ルーティングという機能です。

> CMyAppなどで処理する方が好都合なケースがあります。

そうではないケースもあるわけですよね。
コマンド ルーティングの動作はMSDNに書いてあります。

CMyAppなどで処理する方が好都合なケースとは何ですか。
もしかして、複数の種類のビュークラスとドキュメントクラスがあるけど、
共通の処理だからCMyAppに記述したいということですか。

実装例
ビューのボタンでなく、フレームウィンドウについているメニューに置く。
共通な処理をクラスにして、ビューを多重継承にする。
共通な処理を非クラスの関数にして、各種ビューから呼び出す。
各種ビューからCMyAppオブジェクトのメンバ関数を呼び出す。

コマンド ルーティングはオーバライドできますよ。
改造してみたらどうでしょうか。
ビューからフレームウィンドウへコマンドルーティングして、
もし処理をどこにも書かなかったら無限ループにならないのかなあ??。