コマンドプロンプトのcompコマンドが、いちいち「ほかのファイルを比較しますか」と聞いてきてウザい

2019-06-12 追記:

いつからか不明だが、少なくとも Windows 10 の最近のバージョンでは、 comp.exe/M その他のファイルを比較するメッセージを表示しない オプションが追加されている。

以下は、 Windows 7 当時の話。


コマンドプロンプトで、2つのファイルまたはファイルセットの内容を比較するコマンド、comp.exe

しかしこのコマンド、終了時にいちいち
「ほかのファイルを比較しますか」
と聞いてきてかなりウザい。

これを表示させないオプションがなぜか存在しないのだ。

特にバッチでループさせ対するときに、毎回毎回停止してしまうので、
すこぶる迷惑なのだが…

で、これを回避する方法だが、 "N" を自動で入力させるほか無い。
つまるところ、

echo n | comp Data1 Data2

という風に、echoを使って "n" と改行をパイプしてやれば、めでたくcompでループすることができる。

仕組みがわかればなんてことはないのだが、気づかないとちょっと悩んでしまうところだ。

エディットコントロールの高さを、文字列や横幅にあわせて自動的に変更する

横幅がぐりぐり変わり、複数行表示可能なエディットコントロールを、文字列にあわせて、高さを調節したい。

DrawText 関数に、 DT_CALCRECT フラグを設定することで、指定した幅に収まる文字列を表示するのに必要な矩形の取得だけをすることができる(描画されない)。
コレを使ってコントロールの高さを計算し直せば実現できる。

上のエディットコントロールを書き換えると、その文字列が下のエディットコントロールに反映され、サイズが変更されるようなサンプルを作った。

ばりばり ATL/WTL 使ったコードだが、基本的に普通にWin32API呼んでも同じようにできる。

続きを読む

継承するなら、基本・派生どちらにもデストラクタを書かないとしても、仮想デストラクタが必要!?

継承されるクラスに仮想デストラクタを書かなくてはならない理由として、
よく、ポリモーフィズムを使った場合に、派生クラスのデストラクタが実行されない理由が挙げられる。
"継承 仮想デストラクタ" でググった結果

そうすると、「派生クラスにデストラクタ書かなければ当然仮想デストラクタでなくてもいい」と思いがちだが、
実はそんなことは全然無い。

続きを読む

WM_SIZEをハンドルしないCDialogResizeを作る

前回突然オーバーライドと隠ぺいの話をしたのは、
今回の話につなげるため。

CDialogResizeは便利だが、
チェインを使ってコレを処理してしまうと、
その後にWM_SIZEの処理をすることができなくなってしまう。
(チェインする前に捕まえて、 bHadled=FALSE することは可能)

じゃあCDialogResizeを継承して、処理した後にreturnしないようにすればよいのだが、
OnSize関数は仮想関数ではないので、書き換えることができない。

ところが、そのOnSizeを呼んでいるメッセージマップの実態である、
ProcessWindowMessage関数は、(BEGIN_MSG_MAPマクロの中身)
チェインからのみで、CDialogResize内部からは呼ばれていないので、
これを隠ぺいしてしまえば、CDialogResizeのProcessWindowMessageは呼ばれない。

つまり、WM_SIZEを捕まえてもreturnしないProcessWindowMessageを書けばいいのだ。

続きを読む

[C++] 継承クラスでの、仮想関数による再定義(オーバーライド)と、普通の関数の再定義(隠ぺい)の違い

よくある仮想関数を使ったポリモーフィズム(多様性)の例とは少し違うけど
(複数の種類の派生クラスのアドレスを、親クラスのポインタに代入するやつ)、
メソッドをオーバーライドした場合と、隠ぺいした場合の動作の違いを例示すると、
こんな感じのソースになる。 続きを読む

WordPress Theme Designer のテーマのバグ

今現在のこのブログは、Techy boxのフリー版を少し改造して使っている。
(…と言っても、サイドバーを左に移動しているだけだが)

トップページ

何が気に入ったかって、ページの頭にFeaturedが画像付きでどんどんスライドしていくところ。
…ところが、なんか1週目のループの調子がおかしい。
どうもバグがあるようだ。

続きを読む

WM_SIZEを処理するとCDialogResizeが動かない?

最近、簡潔さとヘッダだけで動く手軽さ、動作の速さに出力バイナリの小ささから、
ATL/WTLに若干ハマっている。

WM_SIZEを処理するとCDialogResizeが動かないという
初歩的すぎるミスを犯したのでメモメモ。

続きを読む

さらさらと消えゆくしょぼーん

書くことないというか、ホント正直時間内からなんだが、
ホントどうでもいいことをボソリ。

どんどん砂のように風化していくショボーンのAAが好きなのだが、
これ「さらさらと消えるショボーン」と言うらしい

(´・ω・`)
(´・ω:;.:...
(´:;....::;.:. :::;.. .....

↑これ。
使いたいときにググってもなかなか出てこないのでメモ。

VBA / VBS で正規表現による関数を使った置き換え

JScriptのString.replaceメソッドは非常に便利だ。
置き換え文字列に、「文字列」ではなく「関数」が使えるところが意外と使える。

"test0 test1".replace(
    /\w+(\d)/g,
    function($0,$1){return (Number($1)+1).toString();})

てな具合に。

普段はWSHではVBSなんぞ使ったりしないが、
たまにどうしてもVBAやVBSを使わなくてはならない場合がある。
そんなときにそれっぽい動作をする様なのを、
不完全ながら自作してみた。

続きを読む