Google

2007年10月29日月曜日

PopClock Ver.1.3b

PopClock Ver.1.3b
処理は出来たけど、時たま微妙な動作をする可能性があるので今回はβ版です。

修正点は以下の通り。
Ver.1.3b 2007/10/29
・起動オプションに-sと入力することで、常駐モードで動作する機能を追加しました。
(常駐モードでは通常起動、タスクアイコンのタップ起動、サスペンドからの復帰時起動、で時計表示を行います)
・BMPに加え、PNG・JPG・GIFファイルの読込が可能になりました。
・処理を改修し、時計表示時の消費メモリを削減しました。
・時計表示時に画面回転による縦横変更を行った場合、表示がおかしくなる問題への暫定対処を行いました。

今回は常駐モードが大きな修正点なんだけど、
-sをつけない普通起動している限り、モノとしては今までどおりなんだよなぁ。
何はともあれ今回βということで常駐周り何かあるかもしれませんが、よろしくおねがいします。

CABファイル形式は、こちら
ZIPファイル形式は、こちら

※いつもの注意書き
CABファイルのインストール先は、指定デバイス内の\Program Files\PopClock\になります。
同じフォルダに同じファイル名のものが存在した場合、自動的にインストールデータで上書かれてしまいますので、必要なファイル(同名だけど自作で作ったファイル等)がある場合は別フォルダにコピーするなど、バックアップを行ってください。

2007年10月28日日曜日

ようやく一段楽しそうな

2週間たったか・・・テスト期間というには本仕事の方が忙しかったりするわけですが
ま、それはさておき貴重に休日を利用して日曜プログラミングだぜ やっほうー!
・・・と。

常駐ルーチンを組んでしばらく使ってみて、まずやばかったのが
サスペンド復帰時の起動で背景画像が2重に描画されるときがあった、というのがありました。
これは・・・背景用の画像を作成するタイミングが復帰起動表示後に来ていたということで
処理順を修正&余分に再取得していたルーチンを修正することで何とかなった感じ。

もう一つ、いっとうヤベーと思ったのが、
常駐モードにしてると、本体で設定していたアラームが利かなくなるというか、
復帰して起動した時計を閉じるまで自動的なアラーム表示が出てこない、っていうのがあったのよね。

これに結構手間取った感じ。
サスペンド発生してから、ユーザー独自イベント発行の段取りを踏んだりとか、タイマーでしばらく待ってから表示させるしかないか、スレッド関数でまわしてみるか・・・とか色々試してみたわけですが、
結局は毎フレーム描画処理している最後でSleepをすることで、動いた。

まぁ・・・まだそんなに試せてないから、今度の更新はバージョン表記はあがってるけど実質βバージョンな意味合いになるかも・・・追加機能もひそかにまだあったりするからなぁ・・・。

・・・ここまで書いてて、また復帰時多重描画再発してるな・・・orz。
まぁとりあえず、いったん公開してみるか~。

2007年10月15日月曜日

サスペンド復帰をチェック処理

さて、次の段階。
ずばり、サスペンドからの復帰を検知して時計表示をONにする処理を作る・・・てなわけで
その検知方法を調べてたわけですが・・・コレが意外と情報が見つからない(汗。

かなり探して、結局探しついた先はといいますと・・・インストールしたSDKのサンプルフォルダに。
http://mtbeta.msdn.microsoft.com/ja-jp/library/bb158662.aspx?altlang=ja-jp
から探すに、
\Common\CPP\Win32\PowerManager
ちなみにわつぃのPCでは
D:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32\Powermanager
にあったす。

ここにあるサンプルソースを、まぁ・・・大体コピペに近い形で(ぉぃ)移植して試してみたですよ。
結果、・・・おぉ、サスペンド復帰時に処理来てるぞ、これ。
とりあえず、この部分に時計ONの処理を突っ込んでみると・・・
おー、サスペンド復帰時に時計がktkr!

ちなみに、サンプルソースの内容を理解した分だけかいつまんでみるに、
どうやら電源関係のイベントが発生した時にシグナルONとする仕組みがあるようで。
シグナル発生時に処理をまわすため、独自にスレッド作ってその中でシグナル来るまで処理待ちすると。
で、シグナル発生時にシグナル分だけ処理をまわすように出来ているような。
ちなみに、終了用のシグナルが発生した時にスレッド内ループを抜けるようにしてて、スレッド終了になるようです。

てなわけで、サスペンド復帰時の時計表示が出来るように・・・だけど
実際組み込むに当たって色々と作成する要素があるので
バージョンアップの公開にはもうしばし待たれし・・・ということで。

とりあえず現在試しとして常駐モードで使用中なのですが
・・・サスペンド復帰表示結構いいな・・・
試用した途端、さっそくバグ見つけたけど(苦笑)。

2007年10月7日日曜日

久しぶりにコーディングできたぜぃ

会社の新しい部署に移ってから、えらく忙しくなってしまって
仕事外のプログラムに手をつける余裕がまるで無かった今日この頃。
とりあえず、環境を自宅に移して休日にちまちまやることに決定。
環境移すっていっても、ノートPC持ち帰ってくるだけなんですけどね♪
うーん、まさに日曜プログラマーだ・・・。

さて、久しぶりにソース触ったから感覚忘れそうになってましたが、続きの方を。
常駐状態で、時計のON・OFFを・・・ON/OFF処理はソースの記述整頓で抜き出しておいたので
関数呼び出すだけでOKとして、軽く大変だったのがウィンドウの表示非表示が
何気にうまくいっていなかった・・・てか、ちょっと抜けてたというか
そもそも表示・非表示はShowWindow関数で十分いけた感じ。
MoveWindowでサイズ変えることも無かったみたい。

とりあえず、時計表示のON・OFFは任意に出来るようになったので、次の段階へ・・・といきたいところですが、ちょっと前々から気がかりだった不具合が合ったので修正を試み。

ふつーの最初からあるdefault.txt起動で時計表示したまま画面回転させると、表示がえらいことになるという・・・。
これは表示背景の問題でして、画面表示を毎フレーム更新かけてるわけですが、
最初の画面クリア処理をどうしてるかというと、
起動時の画面画像をまんま一画像として保持しておいて、
それを背景画像として毎フレーム書いていたわけです。

透明ウィンドウってのがWindowsMobileで存在しないのでとっている手段なわけですが、
これがアドエスの画面回転が起こったときにチト問題。
だってねぇ・・・最初に作った背景用画像を変えてないから・・・縦横とかそもそもサイズあってないし・・・。

てなわけで対策としては、画面回転が起こったときに背景用画像を作り直し、なわけですが
背景だから、それまでの時計表示を非表示にした状態で縦横変わった画像を取得しないと
・・・てなことで、色々試したけど結局表示OFF→表示ONの手順を踏むことに。
これ動作フレーム1Fからになるんだよな・・・つまり最初から起動しなおししてるのと同じ。
あと、画面回転を判断するイベントがよくわからんというか、WM_SIZEってウィンドウサイズが変わったことで判断するみたいなんですが、
このイベント、画面回転時以外でも発生するときあるんだよな・・・色々調節したけど、うん・・・コレは試行錯誤まだいるな・・・。

てなわけで、少しだけ進められたよ・・・。
こうしてみると結構大変になってきたな・・・特に画面回転ってうまく取る方法ないのかねぇ?