2006年4月13日木曜日

MFCダイアログでのON_UPDATE_COMMAND_UI

MFCのダイアログでUIコントロールをEnableにしたりDisableにしたりするのに
更新ハンドラの仕組みが使えたら便利なことがよくあります。

しかし単純に以下のように更新ハンドラを記述しても OnUpdateOKButton は呼ばれません。

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
  //{{AFX_MSG_MAP(CTestDlg)
  ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOKButton)
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CTestDlg::OnUpdateOKButton(CCmdUI* pCmdUI)
{
  pCmdUI->Enable(条件);
}

ダイアログで更新ハンドラを使うには適切なタイミングで CWnd::UpdateDialogControls を呼んでやる必要があります。
適切なタイミングとしては WM_KICKIDLE メッセージというものがあります。WM_KICKIDLE メッセージはWindowsプライベートメッセージのため標準では使えませんが、afxpriv.h をインクルードすることで使えるようになります。
#include <afxpriv.h>

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
  //{{AFX_MSG_MAP(CTestDlg)
  ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
  ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOKButton)
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

LRESULT CTestDlg::OnKickIdle(WPARAM wParam, LPARAM lParam)
{
// 更新ハンドラを呼び出してUIの状態を更新する
UpdateDialogControls(this, FALSE);
return FALSE;
}

void CTestDlg::OnUpdateOKButton(CCmdUI* pCmdUI)
{
  pCmdUI->Enable(条件);
}

2006年3月16日木曜日

組み込みデータ型のコンストラクタ

C++の組み込みデータ型(intなど)のコンストラクタを明示的に書くと、0が代入されます。

int n = int();  // nを0で初期化

知らなかったなぁー

2006年1月31日火曜日

XFce4 のキーボードショートカット設定

keythemerc ファイルを変更することでXFce4ウィンドウマネージャーの基本的なキー操作をカスタマイズできます。
ショートカットキーによるアプリケーションの起動は
shortcut_4_key=ショートカットキー
shortcut_4_exec=ファイル名
とすればできそうです。

設定ファイルは
/usr/X11R6/share/themes/Default/xfwm4/keythemerc (FreeBSDの場合)


2006年1月27日金曜日

アルファブレンド

アルファつきの2色を合成する場合の計算メモ
アルファは不透明度とします。

1. 色の上に色を重ねるように合成する場合
Pixel Alpha Blending

上塗りする色・アルファ:
下地の色・アルファ:





2. 2色をある割合ずつ合成する場合
Pixel Alpha Blending

色・アルファ:
色・アルファ:
色Xのカバレッジ(0~1):





3. 色の上に別の色をある割合だけ重ねるように合成する場合
上記1と2をあわせた感じになります。
Pixel Alpha Blending

上塗りする色・アルファ:
下地の色・アルファ:
色Xのカバレッジ(0~1):





2006/1/26 追記ついでに大きく書き直しました

2006/10/30 3番目の式が間違っていたので修正しました

2006年1月13日金曜日

リビングPCのためのキーボード

今ホームサーバとして使っているファンレスFreeBSDマシンをテレビに繋いで、X環境を整えてホームサーバ兼リビングPCにしてしまおうかと企んでいます。

そうなると欲しくなるのが最低でも3m以上電波が届くワイヤレスキーボード&マウス。それがいざ探してみると殆どの製品は1mそこそこで、3m以上電波が届くものは以外に少ないことに気づきました。キーワードは「2.4GHz帯」「赤外線」。
見つけた製品をメモメモ。

Microsoft Remote Keyboard for Windows XP Media Center Edition
Windows XP Media Center Editionで使うならよさそう

Microsoft Optical Desktop Elite for Bluetooth
リビングPC用途としては大きくて邪魔かも

Microsoft Wireless Optical Desktop for Bluetooth
リビングPC用途としては大きくて邪魔かも

Lenovo ThinkPlus エンハンスド パフォーマンス ワイヤレスUSB キーボード&オプティカルマウス [73P4082]
パームレストが場所とりそう

SONY タッチパッド付きワイヤレスキーボード VGP-WKB1
パームレストは折りたためるし、なかなかよさそう。

サンワサプライ SKB-WL08SET マウス付きワイヤレスキーボード
マウスのバッテリー寿命が32時間...!?

富士通コンポーネント FKB8580


他にもあれば教えてください。

自分はSonyのVGP-WKB1が欲しいなー。

2005年11月14日月曜日

Linkers & Loaders

だいぶ前に購入したLinkers & Loadersをやっと読み終えました。

一般的にはプログラムの作成時に行われる「リンク」と、プログラム実行時に行われる「ロード」ですが、これらについて詳しい解説、歴史が書かれています。
解説されているアーキテクチャもWindowsからUNIXからIBMのメインフレームまで、幅広く各種のリンク・ロードの仕組みと特徴について触れられています。
WindowsのDLLがどういう仕組みでリンクされロードされるのか、Linuxの共有ライブラリについてはどうか、Javaのリンク、インクリメンタルリンクの仕組み、リンク時最適化についてなどなど、一般のソフトウェア開発者も知っておいて損はない内容が多いです。
まぁ僕はUNIXに関する内容については若干読み飛ばしちゃいましたけども :-P


Linkers & Loaders


2005年11月9日水曜日

FreeBSDでPOPFile

最近SPAMが多いのでSPAMフィルタとしてPOPFileというソフトを使っています。
しばらく前からWindows版をメインPCに入れて使っていたのですが、起動が若干遅くなってしまうので家サーバ(FreeBSD 5.3)に入れて使ってみることにしました。
メインPC -> 家サーバ -> プロバイダのメールサーバ と家サーバを介してメールを受信します。

インストールメモ
portsからPOPFileをmake install

cd /usr/ports/mail/popfile
make WITH_POPFILE_JAPANESE=YES install clean


起動スクリプトを作成
cd /usr/local/etc/rc.d
vi popfile.sh

popfile.shの内容は以下の通り
#!/bin/sh
#

# PROVIDE: popfile
# REQUIRE: NETWORKING SERVERS
# BEFORE: LOGIN
# KEYWORD: FreeBSD shutdown

. /etc/rc.subr

name="popfile"
rcvar=`set_rcvar`
command="/usr/local/sbin/popfile.sh"
command_interpreter="/usr/bin/perl"
procname="/usr/local/share/popfile/popfile.pl"

export POPFILE_USER="/var/db/popfile"

load_rc_config $name
run_rc_command "$1"


パーミッションの設定
chmod +x popfile.sh


再起動後、http://localhost:8080/ でPOPFileの設定画面が出てきたらインストール成功!あとはその画面から各種設定を行います。

  © Blogger template 'Isolation' by Ourblogtemplates.com 2008

Back to TOP