2012年9月10日月曜日

iPhone/iPad用バーコード表示プログラム

以前Twitterのiphone_dev_jpで誰かが聞いていたので、作ってみた
iPhone/iPadでバーコードを表示するプログラム



エラーチェックは単純なチェックしかしてません。
最後尾はCheckDigitなので計算で出すようにしています。
番号も表示するようにしましたが、高さが短いと文字が小さくなりすぎると予想します。
その場合は、フォントの最小サイズを考慮するなどで対処するのがよろしいでしょう。

作成にあたり、こちらを参考にしました。

2012年9月6日木曜日

SetWindowLong with GWL_HWNDPARENT

Windowsにおいてウインドウには親、子、オーナーが居る(もっと居るけど)
SetParentを使うと、親をセットできる。
SetParentすると、親の領域内で子のウインドウはクリッピングされる。

Zオーダーを静的に維持したいということをよく聞いたりする。
CのオーナーをB
BのオーナーをAとすると、
A→B→CというZオーダーは維持される。

通常オーナーを設定出来るのはCreateWindowExの第八引数にインスタンスを指定したときだけだ。
昔のVBでは frm.Show(vbModeless,Me) とかすると、オーナー指定でウインドウを開く事が出来る。

ところで、オーナーを後から付け替える方法として、大昔から以下のようなAPI呼び出しが使われてきた。
SetWindowLong(hWnd,GWL_HWNDPARENT,parent);
これをやると、後からオーナーの付け替えが出来る。(SPY++で確かめた)
しかし、MSDNによると、これはやってはいけないことらしいのだ。
「親の付け替えを行いたい場合、SetParentを使え」と書いてある。
そして「オーナーを付け変えるAPIはWindowsには無い」ことになっている。

つまり、SetWindowLongにGWL_HWNDPARENTを指定するのは、
サポート外の使い方という事になり、
「オーナー指定はウインドウ作成時に限る」というのが正しい解釈である。

オーナーを付け変えることによる副作用が何かあるのかもしれない。
なんだかわからないけど、使わない方がいいだろう。