API-11 エディットボックスで全選択

エディットボックスが選択されたときに全ての文字が選択されるようにしたくて、EM_SETSELメッセージを送ったけれどうまくいきません。

サブクラス化すればできるらしいのですが、エディットボックスの数が多くなると面倒そうです。
 EM_SETFOCUSが来たらPostMessageで自作メッセージを送る
 自作メッセージが来たらSetFocus
という方法を見つけました。
http://homepage1.nifty.com/MADIA/vc/vc_bbs/200606/200606_06060046.html

SendMessageだったのがいけなかったのかと思い、
EM_SETFOCUSが来たらPostMessage
1.
2.
3.
case EN_SETFOCUS:
        PostMessage(GetFocus(), EM_SETSEL, 0, -1);
        break;
で試してみたところ、期待通りに動いてくれました。

雑誌 日経ソフトウェア

日経ソフトウェア

連載記事「こちらユーザー・インタフェース研究所」が面白いです。
インターフェースとは、とか
使いにくいCUI,GUIの例とか
アイコンについて、とか
配置について、など
使いやすいソフトを作るうえで参考になります。


以下、ちょっとした意見


お菓子の紹介

頭脳労働に必要なものは何だ?
それは糖分だ!

てなわけで、お気に入りのお菓子の紹介。

名糖 アルファベットチョコレート


常に冷蔵庫に入ってます。

Kasugai 5連グミ100
グミの中では一番好きです。
実家の方のスーパーでは売っているのに、こっちでは探しても見つからない。
会社のHPに通販がありました。
しかも、送料無料・代金引換手数料も会社負担


流れを読むなら、センター前くらいに投稿するのがよかったですね。

にこ動 VOCALOID-SONG ゲーム

ツイン・ストライクス
AEGISさんの最新作。
お気に入りの作者さんです。

ストラトスフィア -2008 Remix-
t.Komineさんの代表作ストラトスフィアを本人がリミックス。
tkomine.comにてCD情報。


気功砲のロックマン2完結
攻撃すると自分のライフが減る 回復アイテムは出てこない 常に残機0
というルールでプレイ。
始め、クリアできないだろうと思ってました。ごめんなさい。
作者さん、お疲れ様でした。

API-9 ダイアログのコントロール

Tabストップ
ダイアログウィンドウの中のコントロールに対してTab移動ができない。
普通にWindowを作って、そこからダイアログを作成した場合はTab移動できる。

ダイアログに来たメッセージかを判断するIsDialogMessageをメッセージループに書くとTab移動ができるようになった。


WM_COMMAND
なぜか、エディットコントロールだけ、選択時にWM_COMMANDメッセージが複数回やってくる。
ラジオボタンとか、プッシュボタンとかはちゃんと1回だけなのに。


ダイアログウィンドウの初期化
普通ダイアログを作ったときはWM_INITDIALOGメッセージがやってくる。
だが、ダイアログウィンドウの場合、やってくるのはWindowと同じWM_CREATEメッセージ。

ここで初期化のためにGetDlgItemでコントロ-ルのハンドルを取得しようとするが、できない。
Windowからダイアログを作った場合はちゃんと取得できている。
ならばと、ハンドルを取得しなくてもコントロールを操作できるSendDlgItemMessageを使ってみたが、反応しない。

コントロールのプッシュボタンを押したときに同じことをやってみると、GetDlgItemもSendDlgItemMessageもうまくいく。
が、これではエディットボックスの読込みはできても、ラジオボタンの初期化は結局できないまま。

ちなみに、
WM_CREATEはCreateWindowがreturnする前に届く
WM_INITDIALOGはダイアログが表示される前に届く
というタイミングの違いがある。

試しにCreateWindowがreturnした後に適当なメッセージ(まあWM_INITDIALOGが妥当だと思う。どうせシステムからは送られて来ないし)を送って、そこで初期化してみるとうまくいった。

考えてみると、この方法ならWM_INITDIALOGメッセージを処理しているので、そのまま通常のダイアログプロシージャにも使える。


なぜか、wsprintfが%fを正しく処理してくれない。
アクセラレータも動作しない。


wsprintfについて
そもそもwsprintfは小数点数を扱えないみたいです。
sprintfなどprintf系の関数を使うのがいいです。

MSDNライブラリ

API-8 ダイアログウィンドウを使ったアプリケーション

API関連の本やwebページを見ていると、一般にWindowsAPIでアプリケーションを作る場合、
メインとなるウィンドウを作り
そのウィンドウの上にコントロールなどのいろいろな部品を置く
という感じになるみたいです。


で、場合によってはメインウィンドウをダイアログにしたいことがあります。
ダイアログならリソースエディタでコントロールを簡単に配置できるからです。
それがダイアログウィンドウで、Windows付属の電卓なんかがそうらしいです。
http://wisdom.sakura.ne.jp/system/winapi/win32/win89.html

WNDCLASS構造体のメンバに値を代入するとき、
cbWndExtraメンバの値をDLGWINDOWEXTRAとし
lpszClassNameメンバで決めたクラス名をダイアログリソースのCLASSで指定します。

ウィンドウを作るとき、CreateWindowのかわりにCreateDialogを使います。
第3引数は0
通常は親ウィンドウを指定するのですが、親がない
第4引数はNULL
通常はダイアログプロシージャを指定するのですが、ダイアログウィンドウではWNDCLASSで指定されたプロシージャが使用される

ダイアログウィンドウはウィンドウと同じ扱いなので、作成時にはWM_INITDIALOGではなくWM_CREATEメッセージが送られてきます。



2009.3.25追記
BCC+BCCForm環境の注意点

BCCFormで作ったリソースファイルをそのまま使うことができません。
作ったリソースファイルをテキストエディタで開き、DIALOGの中にCLASSパラメータを追加します。

 IDD_DLG DIALOG ・・・・・・・
 EXSTYLE WS_EX_DLGMODALFRAME
 STYLE WS_POPUP | ・・・・・・
 CAPTION "ダイアログのキャプション"
 CLASS "DLG" // これを自分で入力
 FONT 10, "MS P明朝"
 ・・・・・・
今度は逆にBCCFormで編集することができなくなります。
編集する場合は、リソースファイルをテキストエディタで開いてCLASSパラメータを消します。

にこ動 VOCALOID-SONG

ビー玉流星
優しい感じの曲です。

ファミリンコンピューター
ファミコン→スーファミくらいの世代なので、けっこうわかる

dance in the red moon with 初音ミク
独特ですが、こうゆうのも好きです。
同じ作者さんの帰郷風想、完成版を待ってます。

にこ動から

ラジカルペイント
元ネタが、わかる私は、ミク廃。

1画面マリオ
こんなすごいのがあったなんて、知らなかったです。

『ブラック会社に勤めてるんだが、もう俺は限界かもしれない』を読んでみた

第1部 前半 後半
第2部
第3部
第4部
第5部
完結

以前からほかのブログなんかで名前だけは聞いていました。
で、先日、地元の友人と遊んだときにこの話題が出てきて、私は読んでないけれど人に勧めたりもしました。
なので、この機会にと思い読み始め、そのまま最後まで読んでしまいました。

以下ぐだぐだ文


LALAWAY ルララ

いつの間にか消えていたLALAWAYが復活!
でも、期間限定らしいです。


ルララfull完成!
暫定版のときから待ってました。