2008年7月31日木曜日

MFCのSDIアプリケーションTIPS

MFCのSDIアプリケーションでメニューを消したい場合は、MainFrameクラスのPreCreateWindowでCREATESTRUCTのHMENUハンドラを解放してあげればよい。でもこれだと再度メニューを表示させる場合はどうしたらいいのやら。
http://support.microsoft.com/kb/131368/ja

SDIのフォームを複数切り替えたいってときは、リソースにFormViewを追加して、そこからCFormViewベースのクラスを作成する。MFCのCOLLECTサンプルが分かりやすい。
http://msdn.microsoft.com/ja-jp/library/fw2702d6(VS.80).aspx

ドキュメントサポートのSDIアプリケーションの場合、タイトルにドキュメント名が追加されてしまう(Untitleとか)。タイトルバーに任意の文字列を表示させるには、MainFrameにてOnUpdateFrameTitleをオーバーライドし、その中でSetWindowTitleを使うとよい。

MainFrameのインスタンスをMainFrame外で使用(取得)するには

CMainFrame *pMainFrame = (CMainFrame*)AfxGetMainWnd(); 

2008年7月25日金曜日

centos4+apache cgiトラブルー

perlのcgiがInternal server errorで全く動かない。errorlogを見てみると

Premature end of script headers: ~ 
(2) No such file or directory: exec of ' ~

と出力されている。

これはなんぞと調べてみて分かったことは、なにやらFTPで転送した際にcgiの改行コードがLFではなくCR+LFになっていたため、ファイル先頭のperlパスにいらない文字(この場合CR)がくっついて、perlがみつからないというエラーだった。

FTPクライアントはFFFTPを使っていて、特に文字コードうんぬんの設定はない。サーバに合わせて改行コードを変更してくれるはずなんだけど、上手く動いていないみたい。ぶっちゃけバイナリモードで改行コードLFのcgiを転送すれば動作するんだろうけど、いちいちCR+LFをLFにするのも面倒です。

ということでサーバ側に何か設定がないか調べてみた。centosのftpはvsftpdのようなので、/etc/vsftpd/vsftpd.confを開いてみる。ありましたasciiなんちゃらの設定。コメントアウトされていたのでコメントを外し、YESに設定を変更し、サーバを再起動。めでたくLFに変更されて転送されました。