要望として、サスペンド復帰時に自動起動して欲しい、ていうのがありまして
確かにそれ便利ね・・・と思うので、作成に挑戦。
とりあえずやることは・・・プログラム上で時計の起動・終了を可能とする辺りから。
今はプログラム起動で問答無用で時計出して、クリックとかで問答無用でプログラム自体の終了をする状態なんですな。
んで、ソースの各種処理関数の位置を色々修正して・・・つまりは整理整頓。
それから時計非表示状態の時は使用メモリを極力使わないように、ってことでメモリ確保と開放の処理を組み込み。mallocとfreeですな。
ついでに時計表示時の変数の使い方とかメモリ確保の処理も色々修正したところ
通常起動している状態で消費メモリが5MBほどだったのが2MBちょいまで減少。
モバイル機の搭載メモリを考えると・・・結構メモリくってたのね・・・。
さて、常駐する・・・てことで、常駐させる方法としては起動時の引数を用意する形に。
引数なしで起動したときは、これまでの時計表示→画面タップで終了の流れを保持しつつ、
常駐用の引数をもって起動したときには、たとえばmode=1として常駐モードとして起動。
常駐モードの時は、時計はいきなり表示させない状態に。
でも時計表示出さないと画面タップでの終了が出来ないので、常駐モード起動の終了方法としては、常駐モード用引数による多重起動で終了という形に。
多重起動判定ルーチンを利用して、多重起動したときに元のウィンドウに独自にイベントを発行してやることで判定です。
こんな感じ↓
PostMessage(hwnd, WM_DUPEXEC_NOTIFY, ExecMode, 0);
んで、多重起動モードではイベント受け取るために目に見えないウィンドウを作成するわけですが(MoveWindow( hWnd, 0, 0, 0, 0, FALSE );でサイズ0にしてます)、このままだと起動してるかも分からないので、タスクトレイにアイコンを表示することに。
こんな感じ↓
Shell_NotifyIcon(NIM_ADD, &nid);
ちなみに終了時は↓で表示解除。
Shell_NotifyIcon(NIM_DELETE, &nid);
タスクトレイに表示されているアイコンに対しては、クリックするとかでイベントを送ったりも出来ますが、
とりあえずこの状態で時計を表示したり、非表示にしたりの繰り返しが出来るように試しているところ・・・で今現在止まっております。トライアンドエラーでココまで来ておりますが・・・意外と大変ですなぁ・・・初めてのプログラムで知らないことだらけだから・・・まぁ、やりがいはあるですが~。
さて・・・次はいつソース触れるだろうか・・・最近実生活が忙しくなりそうな匂いがしてるからなぁ・・・。
2007年9月23日日曜日
2007年9月20日木曜日
画像読み込みの作成
さて、次なる機能として
BMP以外にもPNG・JPG・GIFファイルを読み込めるようにしてみよう、という事をしてました。
BMPしか読めないというのも、サイズ的な見地からちょっとよろしくは無いわけでして
例えばアドエスの解像度全開サイズ(480×800)の32ビットBMPファイルを作ってみると、
画像1つで1.4MBとかいっちゃうわけで、
携帯端末でそんな、アフォですかとかいわれちゃうわけで、
そんなわけで、他のファイル形式も読めるようにしなくては~なわけです。
んで、参考ページ見るに、SHLoadImageFile関数を使えば読み込める、という事なので
ふふん楽勝じゃん、てな感じで入れ込んで見たけども・・・ひっかかった。
コンパイルエラー発生、参考しても見つかりませんでした・・・てな感じの。
ちょっと調べて、あぁ、#include <aygshell.h>が必要なのか・・・で入れてみたら、
今度はコンパイルは通ったみたいだけど、リンクエラー発生。
え~、ファイル無いの?とか思って検索掛けてみたけど、ふつーにファイルあるし、パス通って無いのかとか色々試してみたけど、うまくいかず。
で、散々ググったりなんだり色々参考ページとかソースとか巡っているうちに、MFCのファイルだっけかstdafx.hとかあたりに記述っぽいのが。
結局#include <aygshell.h>の次の行に
#pragma comment(lib, "aygshell.lib")
と書く事で、ビルドできるように。
なんだろうねこれ。よくわかんない辺りまだまだプログラマとして日が浅いなぁと思うのでした(苦笑)。
何はともあれ、コレでさっきの関数が使えるようになってPNGファイルとか読み込めるようになったので、表示周りを色々試して見ましたが、ちと微妙に不都合と言うか
PNGファイル読込での半透明表示だと、透過色設定とか透過PNGとか効かないんだな・・・という事が。
おそらくは読み込んで作成されるビットマップの形式によるものだと思われるんだけど、
コレも色々試したんだけどイマイチうまくいかないというか、結局画像四角全部が色に関係なく半透明して表示されるということに・・・。
単純な描画なら透過色を指定して、色抜き描画が出来てるんだけどねぇ・・・。
とりあえずは、BMPとそれ以外で使用する関数変えて、BMPだけはαチャンネルが表示に効くようにする形でやることにしようかな、と。
てな感じでBMP以外の画像ファイル読込の作成を行いました。
いやぁ、トライアンドエラーというか、初めての作成ってやっぱ大変だなぁ・・・。
まぁ、これもまた勉強ですが、が、が。
BMP以外にもPNG・JPG・GIFファイルを読み込めるようにしてみよう、という事をしてました。
BMPしか読めないというのも、サイズ的な見地からちょっとよろしくは無いわけでして
例えばアドエスの解像度全開サイズ(480×800)の32ビットBMPファイルを作ってみると、
画像1つで1.4MBとかいっちゃうわけで、
携帯端末でそんな、アフォですかとかいわれちゃうわけで、
そんなわけで、他のファイル形式も読めるようにしなくては~なわけです。
んで、参考ページ見るに、SHLoadImageFile関数を使えば読み込める、という事なので
ふふん楽勝じゃん、てな感じで入れ込んで見たけども・・・ひっかかった。
コンパイルエラー発生、参考しても見つかりませんでした・・・てな感じの。
ちょっと調べて、あぁ、#include <aygshell.h>が必要なのか・・・で入れてみたら、
今度はコンパイルは通ったみたいだけど、リンクエラー発生。
え~、ファイル無いの?とか思って検索掛けてみたけど、ふつーにファイルあるし、パス通って無いのかとか色々試してみたけど、うまくいかず。
で、散々ググったりなんだり色々参考ページとかソースとか巡っているうちに、MFCのファイルだっけかstdafx.hとかあたりに記述っぽいのが。
結局#include <aygshell.h>
#pragma comment(lib, "aygshell.lib")
と書く事で、ビルドできるように。
なんだろうねこれ。よくわかんない辺りまだまだプログラマとして日が浅いなぁと思うのでした(苦笑)。
何はともあれ、コレでさっきの関数が使えるようになってPNGファイルとか読み込めるようになったので、表示周りを色々試して見ましたが、ちと微妙に不都合と言うか
PNGファイル読込での半透明表示だと、透過色設定とか透過PNGとか効かないんだな・・・という事が。
おそらくは読み込んで作成されるビットマップの形式によるものだと思われるんだけど、
コレも色々試したんだけどイマイチうまくいかないというか、結局画像四角全部が色に関係なく半透明して表示されるということに・・・。
単純な描画なら透過色を指定して、色抜き描画が出来てるんだけどねぇ・・・。
とりあえずは、BMPとそれ以外で使用する関数変えて、BMPだけはαチャンネルが表示に効くようにする形でやることにしようかな、と。
てな感じでBMP以外の画像ファイル読込の作成を行いました。
いやぁ、トライアンドエラーというか、初めての作成ってやっぱ大変だなぁ・・・。
まぁ、これもまた勉強ですが、が、が。
2007年9月19日水曜日
PopClock Ver.1.2
PopClock Ver.1.2
修正点は以下の通り。
Ver.1.2 2007/09/18
・CABインストールファイルの作成を行いました。
・コマンドラインに-f (ファイル名)と入力することで、使用する設定ファイルの選択が出来るようになりました。
・設定ファイル内「表示設定」の他発生データ№に乱数範囲を持たせられるようにしました。
・その他バグ修正。
CABファイルによるインストールとZIPファイルによるファイルデータの2種類を用意します。
CABファイルの方は、インストール・アンインストールを自動処理してくれますが(アンインストールはアプリケーションの削除から)、
ファイル設置先は自動的に設定され、設置ファイルは毎度問答無用で上書きされます(下記注意書き参照)。
ZIPファイルの方は手動でコピーするので、上書きファイルを自分で選択できますが、
インストール個所の管理やアンインストールの削除は自分で行う事になります。
どちらを選んでも自由ですが、どちらにせよ自作で設定ファイルや画像を用意していた方は
自作ファイルをバックアップしておく事をお勧めいたします。
CABファイル形式は、こちら。
ZIPファイル形式は、こちら。
※注意書き
CABファイルのインストール先は、指定デバイス内の\Program Files\PopClock\になります。
同じフォルダに同じファイル名のものが存在した場合、自動的にインストールデータで上書かれてしまいますので、必要なファイルがある場合は別フォルダにコピーするなど、バックアップを行ってください。
上書き対象のファイルは、exe本体・readme・default.txtを含む00~04の設定ファイル・bmpフォルダ内の数字/:球×2と四角画像、です。
修正点は以下の通り。
Ver.1.2 2007/09/18
・CABインストールファイルの作成を行いました。
・コマンドラインに-f (ファイル名)と入力することで、使用する設定ファイルの選択が出来るようになりました。
・設定ファイル内「表示設定」の他発生データ№に乱数範囲を持たせられるようにしました。
・その他バグ修正。
CABファイルによるインストールとZIPファイルによるファイルデータの2種類を用意します。
CABファイルの方は、インストール・アンインストールを自動処理してくれますが(アンインストールはアプリケーションの削除から)、
ファイル設置先は自動的に設定され、設置ファイルは毎度問答無用で上書きされます(下記注意書き参照)。
ZIPファイルの方は手動でコピーするので、上書きファイルを自分で選択できますが、
インストール個所の管理やアンインストールの削除は自分で行う事になります。
どちらを選んでも自由ですが、どちらにせよ自作で設定ファイルや画像を用意していた方は
自作ファイルをバックアップしておく事をお勧めいたします。
CABファイル形式は、こちら。
ZIPファイル形式は、こちら。
※注意書き
CABファイルのインストール先は、指定デバイス内の\Program Files\PopClock\になります。
同じフォルダに同じファイル名のものが存在した場合、自動的にインストールデータで上書かれてしまいますので、必要なファイルがある場合は別フォルダにコピーするなど、バックアップを行ってください。
上書き対象のファイルは、exe本体・readme・default.txtを含む00~04の設定ファイル・bmpフォルダ内の数字/:球×2と四角画像、です。
2007年9月18日火曜日
またまた一段落したよ~。
残作業の方、すこしずつ作っておりました。
まず、起動パラメータによる設定ファイルの選択起動。
アプリが始まる時に最初の関数にコマンドライン引数が渡されるので、
その文字列をチェックして色々処理する、てな感じ。
// アプリケーションのエントリポイント
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
の3つ目の引数ですな。
ファイル名を取り込めるようにして、読込に行くファイルを設定・・・と。
次、CABインストールファイルの作成。
これは、CABファイルを作成するためのプロジェクトを新規作成する事に。
「スマートデバイスCAB」プロジェクトってのを選んで、後はウィザードに従っていく、と。
んで、CABに含めるファイルを指定して、それらをインストール時に何処のフォルダに配置させるかを入力していくって感じ。
基本的に処理本体その他諸々は\Program Files\PopClock\に入る事になるわけですが、
・・・どうしても問答無用に上書きされることになるみたいなのね~。
独自に作成した設定ファイルとか画像とか同じ名前で同じフォルダに存在したら、
問答無用で上書きされるわけで、
これは・・・色々考えたけど、注意書き書くしかないかなぁ・・・と思うのでした。
あとは、ちょこちょこっと修正事項を加えて、とりあえず一段落ですので
Ver.1.2の準備に取り掛かるですよ~。
単純に使用するのは恐ろしく簡単なんだけど、
作りこみにこだわっていくと、結構複雑だよなぁ・・・と思う今日この頃。
一度解説ページ作らないといけないかなぁ、と思うのでした。
まず、起動パラメータによる設定ファイルの選択起動。
アプリが始まる時に最初の関数にコマンドライン引数が渡されるので、
その文字列をチェックして色々処理する、てな感じ。
// アプリケーションのエントリポイント
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
の3つ目の引数ですな。
ファイル名を取り込めるようにして、読込に行くファイルを設定・・・と。
次、CABインストールファイルの作成。
これは、CABファイルを作成するためのプロジェクトを新規作成する事に。
「スマートデバイスCAB」プロジェクトってのを選んで、後はウィザードに従っていく、と。
んで、CABに含めるファイルを指定して、それらをインストール時に何処のフォルダに配置させるかを入力していくって感じ。
基本的に処理本体その他諸々は\Program Files\PopClock\に入る事になるわけですが、
・・・どうしても問答無用に上書きされることになるみたいなのね~。
独自に作成した設定ファイルとか画像とか同じ名前で同じフォルダに存在したら、
問答無用で上書きされるわけで、
これは・・・色々考えたけど、注意書き書くしかないかなぁ・・・と思うのでした。
あとは、ちょこちょこっと修正事項を加えて、とりあえず一段落ですので
Ver.1.2の準備に取り掛かるですよ~。
単純に使用するのは恐ろしく簡単なんだけど、
作りこみにこだわっていくと、結構複雑だよなぁ・・・と思う今日この頃。
一度解説ページ作らないといけないかなぁ、と思うのでした。
2007年9月15日土曜日
作業ピックアップその2
さて、現在の残作業をピックアップ。
特にCABインストール化は、ソフト登録しているWindowsCE FANの登録形式が何気にリニューアル掛かってて、CABファイルでないと登録移行できない感じなので、早々に対応しないとなぁ・・・と思ってたり。
あとは他にソフトウェア登録できる所ってあるかしら?
PopClock Ver.1.1
PopClock Ver.1.1、アップ致します。
まずは修正点。
Ver.1.1 2007/09/15
・テキストの表示及び各種図形の表示が行えるようになりました。
・背景色が指定できるようになりました。
・設定項目の増加により設定ファイルの書式が変更されました。
設定ファイルの改修によってVer1.0で使っていた設定ファイルは、
修正しないと使用不可になります。
一応readme.txtに変更部分を載せておきましたが、
サンプル見て修正していくほうがいいかもしれませんね。
で、今回機能を利用したサンプルを、ざっくりとした作りですが2つ用意しておきました。
それぞれ概要は、
default_03.txt・・・文字列表示機能を使用。内容は突っ込み不可の方向で(笑)。
default_04.txt・・・図形を使った表示デモ。割と適当に作ってます。
使用の際は、例の如くリネームしてください。
とりあえず、コレで表示周りの機能はほぼ完了かと。
設定ファイルも書式的に大きく仕様変更することは・・・多分無い・・・かな?。
ダウンロードは、こちら。
まずは修正点。
Ver.1.1 2007/09/15
・テキストの表示及び各種図形の表示が行えるようになりました。
・背景色が指定できるようになりました。
・設定項目の増加により設定ファイルの書式が変更されました。
設定ファイルの改修によってVer1.0で使っていた設定ファイルは、
修正しないと使用不可になります。
一応readme.txtに変更部分を載せておきましたが、
サンプル見て修正していくほうがいいかもしれませんね。
で、今回機能を利用したサンプルを、ざっくりとした作りですが2つ用意しておきました。
それぞれ概要は、
default_03.txt・・・文字列表示機能を使用。内容は突っ込み不可の方向で(笑)。
default_04.txt・・・図形を使った表示デモ。割と適当に作ってます。
使用の際は、例の如くリネームしてください。
とりあえず、コレで表示周りの機能はほぼ完了かと。
設定ファイルも書式的に大きく仕様変更することは・・・多分無い・・・かな?。
ダウンロードは、こちら。
さて、ひと段落
2007年9月14日金曜日
文字列導入と、図形表示づくり
結局文字列のcharとWCHARのやりとりは
MultiByteToWideChar(CP_ACP, 0, l_char, j, l_wchar, 256);
てな感じで、この関数使えばうまくできそうす。
んで文字列表示と図形表示のプログラミングをちまちまと進めておりました。
文字列表示はDrawText関数でやって、サイズは論理フォントの作成により指定、色はSetTextColor関数で行います。
文字列表示を組み込んだので、次は図形表示にとりかかり。
まずは四角形と円から。
四角形がRectangle関数、円がEllipse関数。
サイズは関数の引数で決まって、色をつけるのはペン(枠色)とブラシ(中の色)の設定で行います。
関数はそれぞれ、CreatePenとCreateSolidBrush。引数で色が決定です。
作成したペンとブラシをSelectObject関数で描画DCに設定して、その後RectangleとかEllipse関数発行すると、色が指定したもので書かれる、と。
ちなみに作ったペンとブラシはDeleteObject関数で忘れず削除です。
で、設定ファイルで描画できるように書き方とか作ってましたが、
何気に一部で、図形の時だけこういう書き方・・・みたいなのがどうしても発生するなぁ、と。
果たして設定ファイル破綻しませんように・・・。
この後は、線分と多角形の表示に挑戦です。
明日、公開にまでこぎつけられるかなぁ・・・?
下の画像は、テキストと図形を組み込んだテスト中の画面を取ったもの。
なんちゅーか、カオス(笑)。
2007年9月13日木曜日
ページをカスタマイズ
どうにも前のつかってたテンプレートでは横幅が狭いなぁ・・・思ってて、
ちらちらっとカスタマイズ項目みてたら、ふつーに横幅あるテンプレートあるんだね。
せっかくなのでちょこちょこっとページレイアウト整えてみましたですよ。
横幅広くなって大分落ち着いた感じかな。
ブログやり始めて間もないから、まだまだ試行錯誤ですよ~。
ちらちらっとカスタマイズ項目みてたら、ふつーに横幅あるテンプレートあるんだね。
せっかくなのでちょこちょこっとページレイアウト整えてみましたですよ。
横幅広くなって大分落ち着いた感じかな。
ブログやり始めて間もないから、まだまだ試行錯誤ですよ~。
文字表示作成中
文字列表示の為に色々調べておりましたよ。
とりあえず出来そうなのは大きさ指定と、色指定ってとこでしょうか。
半透明はなさそうね・・・。
で、これを表示するための設定ファイルのパラメータの策定ですが・・・
現状を利用しつつ表現可能にするには、パラメータ項目を増やさないといけなくて。
ごめんちゃい設定項目ふえちゃったよ。
特に@setのトコ36項目だったのが46項目になる予定す(笑)。
たぶん、今回のと後でつける図形の表示がつけば、そうそう項目が変わることはないとは思っておりますが・・・。まぁ、書き加えで修正できるレベルだから多めに見ていただけると~(^^;。
で、コーディングを進めておりますが、何かWindowsMobileって文字列の扱いが特殊というか、特定の型でないといけないみたいね・・・。
UNICODEがどーとかいう事らしいのですが、WCHARとか使っていかなくてはならなくて。
いまchar型に格納されてる文字列をWCHAR型として表示関数に渡さないといけないのだけど、
なんちゅーか、うまいこといってないというか、ちゃんと渡ってないんだよなぁ・・・特に2バイトな日本語字をがうまいこと表示できてないのでした。
明日はとりあえず、解決策が見つかるとええのう・・・。
とりあえず出来そうなのは大きさ指定と、色指定ってとこでしょうか。
半透明はなさそうね・・・。
で、これを表示するための設定ファイルのパラメータの策定ですが・・・
現状を利用しつつ表現可能にするには、パラメータ項目を増やさないといけなくて。
ごめんちゃい設定項目ふえちゃったよ。
特に@setのトコ36項目だったのが46項目になる予定す(笑)。
たぶん、今回のと後でつける図形の表示がつけば、そうそう項目が変わることはないとは思っておりますが・・・。まぁ、書き加えで修正できるレベルだから多めに見ていただけると~(^^;。
で、コーディングを進めておりますが、何かWindowsMobileって文字列の扱いが特殊というか、特定の型でないといけないみたいね・・・。
UNICODEがどーとかいう事らしいのですが、WCHARとか使っていかなくてはならなくて。
いまchar型に格納されてる文字列をWCHAR型として表示関数に渡さないといけないのだけど、
なんちゅーか、うまいこといってないというか、ちゃんと渡ってないんだよなぁ・・・特に2バイトな日本語字をがうまいこと表示できてないのでした。
明日はとりあえず、解決策が見つかるとええのう・・・。
夕飯話
新宿のカレーうどん屋、千吉でございます。
ここはいわゆるそば屋とかで出てくるダシの効いたうどんとはちがって
ミルクが含まれているようなクリーミーな味わいが良いというか、
まさにカレーうどんというのを1ジャンルと出来る独自の味わいを持っております。
前に名古屋に行ったときに、最近の名古屋名物としてあったカレーうどんを食べましたが
つまりはああいう流れですわね。
さて、このカレーうどん。個人的に思うステキな食べ方があって、
もともとカレーうどんを普通に頼むと、カレーうどんに加えてご飯が付いてきます。
大きさ的には両方食べて1食分の量でして、テーブルにある食べ方の説明書きには
「うどんを食べた後、おもむろにご飯を入れて食べるべし」とあります。
当然、作法どおり食べて美味しいわけですが、個人的にはトッピングとして
チーズと温泉たまごをつけることをオススメ。
まず、アツアツなので溶けたチーズと絡めて食べるうどんがステキ。
この時出来るだけ温泉たまごを崩さないようにして、
うどんをひとしきり食べた後、おもむろにご飯を入れ、ここで温泉たまごを裂くと・・・
その瞬間、卵の黄身とチーズとご飯とカレーがあいまって・・・至高の食品が出来ます。
これがまた・・・ドリアというか雑炊というかなんちゅーか・・・うまいんだわ。
ま、何はともあれ機会があったら試してみるべし~。
2007年9月11日火曜日
今日もチョコチョコと
機能追加に向けてソース触っておりました。
まず、背景クリア色設定。
毎フレームの最初に描画領域を塗りつぶせばOK。
で、色を指定するって事で、独自に作成するブラシというのが必要になります。
ペンとブラシってのが、Windowsプログラムの経験が今まで無かったからあんまり概念的にピンとこなかったりしてたわけですが、
つまるところ塗りつぶし用の設定データって感じでしょか。
ブラシをCreateSolidBrush関数で作って、SelectObject関数で作ったブラシをDCにセット、PatBlt関数で描画することで、毎度上書き描画できる、と。
ちなみに最後にDeleteObject関数で作ったブラシを削除することも忘れずに。
てな感じで導入しました。
んで、次にテキストデータの描画ですが・・・単純な描画は分かったけど、他にどんなことが出来るか調査中です。
どんな設定方法にするかも考えないとねぇ~・・・ちらっと触ってみるに、コレも結構重い処理な気がするのが泣けるでする。
とりあえず、テキストと図形の描画が出来るようになったらアップデートかける予定ですよ~。
まず、背景クリア色設定。
毎フレームの最初に描画領域を塗りつぶせばOK。
で、色を指定するって事で、独自に作成するブラシというのが必要になります。
ペンとブラシってのが、Windowsプログラムの経験が今まで無かったからあんまり概念的にピンとこなかったりしてたわけですが、
つまるところ塗りつぶし用の設定データって感じでしょか。
ブラシをCreateSolidBrush関数で作って、SelectObject関数で作ったブラシをDCにセット、PatBlt関数で描画することで、毎度上書き描画できる、と。
ちなみに最後にDeleteObject関数で作ったブラシを削除することも忘れずに。
てな感じで導入しました。
んで、次にテキストデータの描画ですが・・・単純な描画は分かったけど、他にどんなことが出来るか調査中です。
どんな設定方法にするかも考えないとねぇ~・・・ちらっと触ってみるに、コレも結構重い処理な気がするのが泣けるでする。
とりあえず、テキストと図形の描画が出来るようになったらアップデートかける予定ですよ~。
作業ピックアップ
PopClockをいったん公開したわけですが、作っているうちにまだやりたいことが出てきたので
その作業分をピックアップ。
その作業分をピックアップ。
- 背景クリア色設定
- 図形描画
- テキスト描画
- 起動パラメータによる設定ファイルの選択読み込み
- 処理軽量化
- 音声イベント再生
こんな感じでしょうか。
あぁ、そういえば解説ページとかも作ったほうがいいよなぁ。
何はともあれ、出来るところからチマチマやっていこうかと思っております。
ソフトを使っておられる方で、要望等あればメール等でご一報を。
2007年9月10日月曜日
PopClock Ver.1.0
一般公開用として、当初考えてた処理を一通り搭載したものをアップしました。
今回は設定ファイルのサンプル&画像も用意しました。
それぞれ概要は、
default_00.txt・・・基本となる時計表示のみの設定。解凍時点でのdefault.txtはこれと同じ。
default_01.txt・・・時計表示&球体広がりの表示。いっぱい弾出してみた。
default_02.txt・・・時計表示&白球を上から降らしてみた。雪っぽく。
使用の際は、リネームしてくださいませ。
とはいっても、設定次第で色んな動きや見え方をすると思うので色々試してみてください。
あとは・・・readmeで。あんまり分かりよい説明ではないですが・・・。
ダウンロードは、こちら。
今回は設定ファイルのサンプル&画像も用意しました。
それぞれ概要は、
default_00.txt・・・基本となる時計表示のみの設定。解凍時点でのdefault.txtはこれと同じ。
default_01.txt・・・時計表示&球体広がりの表示。いっぱい弾出してみた。
default_02.txt・・・時計表示&白球を上から降らしてみた。雪っぽく。
使用の際は、リネームしてくださいませ。
とはいっても、設定次第で色んな動きや見え方をすると思うので色々試してみてください。
あとは・・・readmeで。あんまり分かりよい説明ではないですが・・・。
ダウンロードは、こちら。
未完成だった残機能を導入したよ
PopClockの方、まだ出来ていなかった他データ発生時値引継ぎと、α半透明描画を作成。
パラメータを見て慎重に・・・。
あと、ひそかにバグもあったので修正、と。
んで、一通り触って大体OKそうなので、いったんVer.1.0として公開してみます。
もう1.0ですかい、と言いたくなりましたが・・・ま、いっか。当面作ろうとしていた物は一通り出来たし。
サンプルも3つほど突っ込んでおきました。
ちゅーわけで、家戻ったら公開するっす。
その後でソフトウェアページとかにも登録に挑戦してみるですよ~。
パラメータを見て慎重に・・・。
あと、ひそかにバグもあったので修正、と。
んで、一通り触って大体OKそうなので、いったんVer.1.0として公開してみます。
もう1.0ですかい、と言いたくなりましたが・・・ま、いっか。当面作ろうとしていた物は一通り出来たし。
サンプルも3つほど突っ込んでおきました。
ちゅーわけで、家戻ったら公開するっす。
その後でソフトウェアページとかにも登録に挑戦してみるですよ~。
2007年9月9日日曜日
PopClock ver. 0.1a
PopClockテスト版の公開です。
とりあえず、簡単に体裁だけ整えた&ひとしきりの説明を加えたテキストを突っ込んでおきました。
テスト版なので、色々足りない事とかあるです。cabインストールとかじゃないしね・・・。
あと、テスト公開なので、どこかのソフトウェアライブラリ的なページとかへの登録はまだです。
さらに、テキストに書いてありつつ発生時の値引継ぎという機能はまだ未実装になります。
あ、そういえば画像半透明描画もまだ組み込んでなかったや。
ソフトの性格として、設定項目いじること前提でありながらパラメータ多くて何かと大変なものではありますが、
どういうソフトか触ってみたい・・・という奇特な方はどうぞ~。
ダウンロードは、こちら。
とりあえず、簡単に体裁だけ整えた&ひとしきりの説明を加えたテキストを突っ込んでおきました。
テスト版なので、色々足りない事とかあるです。cabインストールとかじゃないしね・・・。
あと、テスト公開なので、どこかのソフトウェアライブラリ的なページとかへの登録はまだです。
さらに、テキストに書いてありつつ発生時の値引継ぎという機能はまだ未実装になります。
あ、そういえば画像半透明描画もまだ組み込んでなかったや。
ソフトの性格として、設定項目いじること前提でありながらパラメータ多くて何かと大変なものではありますが、
どういうソフトか触ってみたい・・・という奇特な方はどうぞ~。
ダウンロードは、こちら。
2007年9月8日土曜日
・・・とりあえず出来た。
あれから、パラメータ作って
あとは足し算引き算した結果でもって、描画するように設定。
関数まとめて順番に処理するようにすればOK。
・・・てな感じで、まずはざっくりとしたものが・・・出来てしまいましたな・・・。
まさかこんなあっさり進むとは。
といっても何ぞ技術探したり作ったりするわけでもなく、ルーチン組むだけなんだけんどね。
いざ軽く動かしてみた所・・・う、結構重さ的にシビアだなコレ・・・。
多分色々改造していかなくてはいけない気がする・・・。
ちゅーわけで、まだテストもマトモに出来てないので簡易的な公開準備に入りますが、
その前にかるくフローチャートちっくに今回のソフトの処理の流れを箇条書きします。
(ソフト独自のトコだけ書いてくよん)
起動→
ウィンドウ作成時に初期処理(設定ファイル読み込み)→
ファイル読み込み時にファイル内容解析(画像読み込み&パラメータ格納)→
タイムイベントによる繰り返し処理にて→
現在のフレーム数とイベントデータを見比べて、画像発生タイミングなら発生処理→
発生している表示パラメータに対して計算処理(位置、サイズ、透明度、表示範囲、他発生)→
計算結果によるパラメータを使って表示関数発行→
表示処理へ
あとはタイムイベント繰り返し・・・と。
作る道筋が見えているものに関しては、割とサクッとコーディングできるものなのよ~、と。
というわけで、テスト版公開準備。
あとは足し算引き算した結果でもって、描画するように設定。
関数まとめて順番に処理するようにすればOK。
・・・てな感じで、まずはざっくりとしたものが・・・出来てしまいましたな・・・。
まさかこんなあっさり進むとは。
といっても何ぞ技術探したり作ったりするわけでもなく、ルーチン組むだけなんだけんどね。
いざ軽く動かしてみた所・・・う、結構重さ的にシビアだなコレ・・・。
多分色々改造していかなくてはいけない気がする・・・。
ちゅーわけで、まだテストもマトモに出来てないので簡易的な公開準備に入りますが、
その前にかるくフローチャートちっくに今回のソフトの処理の流れを箇条書きします。
(ソフト独自のトコだけ書いてくよん)
起動→
ウィンドウ作成時に初期処理(設定ファイル読み込み)→
ファイル読み込み時にファイル内容解析(画像読み込み&パラメータ格納)→
タイムイベントによる繰り返し処理にて→
現在のフレーム数とイベントデータを見比べて、画像発生タイミングなら発生処理→
発生している表示パラメータに対して計算処理(位置、サイズ、透明度、表示範囲、他発生)→
計算結果によるパラメータを使って表示関数発行→
表示処理へ
あとはタイムイベント繰り返し・・・と。
作る道筋が見えているものに関しては、割とサクッとコーディングできるものなのよ~、と。
というわけで、テスト版公開準備。
2007年9月6日木曜日
PopClock作成の軌跡~その8
続きまして、ファイル読込したデータの解析について、
読込テキストの書き方を決めておいて、パラメータとして取り込もうということをします。
読込みたい画像ファイル名を書いておけば、それを読込んで表示する・・・みたいなね。
んでまぁ、コレをやるために読込テキストの書き方を決定しなくてはいけなくて、
パラメータの設計をひたすら考えておりました。
画像のID設定するとか、初期位置とか移動速度とかまぁ、色々。
で、いざまとめてみたら入力項目えらく多くなっておりまして、特に表示設定に関しては36項目あるという・・・こんな入力やってくれる人いるんだろうか(^^;。
まぁ、殆どは0ですむものではあるんだけどね。。。
前回作った読込処理でchar型の文字列データが得られます。
ここから数字としてとか、文字列としてとか引っ張り出してくるわけですね。
たとえばこんな感じで数字引っ張り出して、用意したパラメータ項目につっこんどります。
// 文字列中のInt値の取得&文字列数を返す
int SetInt(char *lp_str, int *l_int)
{
char buf[256];
int i = 0;
// ,か改行か終了位置まで見る
while (lp_str[i] != '\0' && lp_str[i] != '\r' && lp_str[i] != '\n' && lp_str[i] != ',') {
buf[i] = lp_str[i];
i++;
}
// 終了文字
buf[i] = '\0';
*l_int = atoi(buf);
return i;
}
atoi関数使って数字を得ております。あと文字列数取るのは文字列の開始位置ポインタを進めるためとなっております。
というわけでファイルからパラメータをもらってくるという処理を作った所で、
ココまでが現在の進行度具合であります。
ココから先はプログラム進めながら、その都度書いていくことにするですよ~。
えーと、次何するんだっけ・・・あぁ、またパラメータ設計か・・・。
パラメータ種類多いと大変だな・・・てか、種類多くてちゃんとWindowsMobileで動くんだろうか、最近ちょっと不安になってきてたりする・・・(^^;。
読込テキストの書き方を決めておいて、パラメータとして取り込もうということをします。
読込みたい画像ファイル名を書いておけば、それを読込んで表示する・・・みたいなね。
んでまぁ、コレをやるために読込テキストの書き方を決定しなくてはいけなくて、
パラメータの設計をひたすら考えておりました。
画像のID設定するとか、初期位置とか移動速度とかまぁ、色々。
で、いざまとめてみたら入力項目えらく多くなっておりまして、特に表示設定に関しては36項目あるという・・・こんな入力やってくれる人いるんだろうか(^^;。
まぁ、殆どは0ですむものではあるんだけどね。。。
前回作った読込処理でchar型の文字列データが得られます。
ここから数字としてとか、文字列としてとか引っ張り出してくるわけですね。
たとえばこんな感じで数字引っ張り出して、用意したパラメータ項目につっこんどります。
// 文字列中のInt値の取得&文字列数を返す
int SetInt(char *lp_str, int *l_int)
{
char buf[256];
int i = 0;
// ,か改行か終了位置まで見る
while (lp_str[i] != '\0' && lp_str[i] != '\r' && lp_str[i] != '\n' && lp_str[i] != ',') {
buf[i] = lp_str[i];
i++;
}
// 終了文字
buf[i] = '\0';
*l_int = atoi(buf);
return i;
}
atoi関数使って数字を得ております。あと文字列数取るのは文字列の開始位置ポインタを進めるためとなっております。
というわけでファイルからパラメータをもらってくるという処理を作った所で、
ココまでが現在の進行度具合であります。
ココから先はプログラム進めながら、その都度書いていくことにするですよ~。
えーと、次何するんだっけ・・・あぁ、またパラメータ設計か・・・。
パラメータ種類多いと大変だな・・・てか、種類多くてちゃんとWindowsMobileで動くんだろうか、最近ちょっと不安になってきてたりする・・・(^^;。
PopClock作成の軌跡~その7
うん、大分現状進行度まで近づいてきましたですな。
続いてはファイル読込のお話。
今回作ろうとしているソフトは、表示設定情報が書き込まれたファイルを読込んで
その内容にしたがって描画を行う・・・というもの。
スキンみたいだけど、もうちょっと動的な感じかな。
というわけで、ファイル読込を作っていきました。
流れとしては、
CreateFile関数でファイル開いて、
ReadFile関数で開いたファイルの中身を取得して、取得データの処理の後
CloseHandle関数でファイルを閉じる、と。
ちなみに読込むファイルの名前を、引数に入れないといけないのだけれど、
WindowsMobileプログラムでは、基本的にフルパスで入力せねばならず、相対パスはダメと。
となると、ファイルが何処に置かれるか決め打ち出来ない状況では色々不都合が。
対策として、exeファイルのフルパスを取得するGetModuleFileNameという関数があるので、これを利用するようにしました。
パスとファイル名がくっついた文字列が得られるので、最後からの¥¥マークを探して
そこから先を消して文字列部分を取得。
このパス文字列を使えば、exeファイル含んだフォルダが何処におかれても、そのフォルダ配下の構成さえ変わらなければ、データ読込にいけることになるわけですなっ。
続いてはファイル読込のお話。
今回作ろうとしているソフトは、表示設定情報が書き込まれたファイルを読込んで
その内容にしたがって描画を行う・・・というもの。
スキンみたいだけど、もうちょっと動的な感じかな。
というわけで、ファイル読込を作っていきました。
流れとしては、
CreateFile関数でファイル開いて、
ReadFile関数で開いたファイルの中身を取得して、取得データの処理の後
CloseHandle関数でファイルを閉じる、と。
ちなみに読込むファイルの名前を、引数に入れないといけないのだけれど、
WindowsMobileプログラムでは、基本的にフルパスで入力せねばならず、相対パスはダメと。
となると、ファイルが何処に置かれるか決め打ち出来ない状況では色々不都合が。
対策として、exeファイルのフルパスを取得するGetModuleFileNameという関数があるので、これを利用するようにしました。
パスとファイル名がくっついた文字列が得られるので、最後からの¥¥マークを探して
そこから先を消して文字列部分を取得。
このパス文字列を使えば、exeファイル含んだフォルダが何処におかれても、そのフォルダ配下の構成さえ変わらなければ、データ読込にいけることになるわけですなっ。
PopClock作成の軌跡~その6
その6は・・・描画処理のお話。
といっても描画処理発行前段階の処理といったとこでしょか。
BitBltとかの描画処理は発行した順に書いていくわけでして、絵が重なった時は当然後に発行した絵のほうが手前に描かれるわけです。
んで、実際描画を行うのに毎フレーム結構な数の描画を行う事になった場合、BitBltをソースの中にいちいちペタペタ順番考えながら書き込んでいく・・・ってのは毎フレーム何が書かれるか定まっていない場合はちょいと現実的ではないわけでして、
どうするかというと、描画関数発行する数だけリストを作っていき、フレーム処理の最後にリストを順にたどって描画していく、てのを作ります。
リストデータ要素を構造体で定義して、構造体データに優先順位値を含めて、データ作成する時優先順位値をみながらリストの場所を決定して、って事をすれば書きたい順番に描画処理が発行できる、という感じです。
たとえばこんな感じ。
typedef struct {
bool enable; // 有効データならtrue
GRA_PRM gra_prm; // 描画パラメータ
int pri; // 描画優先順位
int next; // 次のindex番号
int back; // 前のindex番号
} GRA_LST;
GRA_LST gra_lst[GRA_MAX]; // 描画パラメータリスト
リストデータを配列で用意してるからこんな感じっす。
リストデータを登録する関数作って、リストを回してBitBltとか発行する関数作って・・・
てなわけで、描画順番を考慮した描画処理の作成のお話でした。
といっても描画処理発行前段階の処理といったとこでしょか。
BitBltとかの描画処理は発行した順に書いていくわけでして、絵が重なった時は当然後に発行した絵のほうが手前に描かれるわけです。
んで、実際描画を行うのに毎フレーム結構な数の描画を行う事になった場合、BitBltをソースの中にいちいちペタペタ順番考えながら書き込んでいく・・・ってのは毎フレーム何が書かれるか定まっていない場合はちょいと現実的ではないわけでして、
どうするかというと、描画関数発行する数だけリストを作っていき、フレーム処理の最後にリストを順にたどって描画していく、てのを作ります。
リストデータ要素を構造体で定義して、構造体データに優先順位値を含めて、データ作成する時優先順位値をみながらリストの場所を決定して、って事をすれば書きたい順番に描画処理が発行できる、という感じです。
たとえばこんな感じ。
typedef struct {
bool enable; // 有効データならtrue
GRA_PRM gra_prm; // 描画パラメータ
int pri; // 描画優先順位
int next; // 次のindex番号
int back; // 前のindex番号
} GRA_LST;
GRA_LST gra_lst[GRA_MAX]; // 描画パラメータリスト
リストデータを配列で用意してるからこんな感じっす。
リストデータを登録する関数作って、リストを回してBitBltとか発行する関数作って・・・
てなわけで、描画順番を考慮した描画処理の作成のお話でした。
PopClock作成の軌跡~その5
次は、アイコンについて。
せっかくソフト作るんだから、exeファイルにアイコンマーク表示させたいところ。
これはVisualStudioからプロジェクト>リソースの追加、でIconを選ぶ。
リソースビューで選ぶとエディット画面が出てくるのでここで作るわけですが、
とりあえず予めペイントソフトでBMPファイルを別個用意しておきました。
(32×32ピクセルの256色ビットマップ)
んでさっきのエディット画面にコピペで作成。
あとはリソースIDをIDR_MAINFRAMEって付けたら出来た感じ。
この名前決まり文字なんだろうか。
ついでに次。二重起動防止について。
手軽に起動できるようにって、ためしに本体のほうで上キー押して起動するようにしてみたら
上押すたびにドンドコドンドコ起動しちゃって、なんかえらいことになってしまったので(^^;、二重起動防止の処理を入れました。
これは、参考ページからササッと流用。
プログラム開始直後にFindWindowで同じ名前のウィンドウがあるか探すって事をしているようで、
あったらそのウィンドウを最前面にして、自分は終了、てな感じでした。
なるほど。
せっかくソフト作るんだから、exeファイルにアイコンマーク表示させたいところ。
これはVisualStudioからプロジェクト>リソースの追加、でIconを選ぶ。
リソースビューで選ぶとエディット画面が出てくるのでここで作るわけですが、
とりあえず予めペイントソフトでBMPファイルを別個用意しておきました。
(32×32ピクセルの256色ビットマップ)
んでさっきのエディット画面にコピペで作成。
あとはリソースIDをIDR_MAINFRAMEって付けたら出来た感じ。
この名前決まり文字なんだろうか。
ついでに次。二重起動防止について。
手軽に起動できるようにって、ためしに本体のほうで上キー押して起動するようにしてみたら
上押すたびにドンドコドンドコ起動しちゃって、なんかえらいことになってしまったので(^^;、二重起動防止の処理を入れました。
これは、参考ページからササッと流用。
プログラム開始直後にFindWindowで同じ名前のウィンドウがあるか探すって事をしているようで、
あったらそのウィンドウを最前面にして、自分は終了、てな感じでした。
なるほど。
2007年9月5日水曜日
昨日の夕飯
PopClock作成の軌跡~その4
画像の描画が出来るようになりました。
次は・・・オフスクリーン描画というものをやってみたす。
ウィンドウと同じ大きさの描画領域を用意して、そこにいったん描画して、最後にそれをウィンドウに描画するというもの。
ちっこい画像を次々描画していくより、でっかい画像1つを1回パンッと描画する方が
タイミング的にも画面がちらつかないという利点があるのだそうな。
手順としては、
GetDC関数でウィンドウのDCを取得して、そのウィンドウのDCを元にCreateCompatibleBitmap関数でウィンドウへと同じように描画できる画像領域BMPが出来る。
そしてそのBMPを、予めCreateCompatibleDCで作っておいた別箇DCに割り付けることで
そのDCに対してBitBlt等で描画することが出来る。
ひとしきり描画を行ったところで、1描画の最後にウィンドウDCに対して作成DCを描画(BitBltでOK)することによってオフスクリーン描画終了。
と、こんな感じ。
ループ毎に繰り返し描画を行うにあたって、前回描画した分はクリアする必要が出てくるわけですが。
方法としては、ウィンドウを作る時のパラメータ(WNDCLASS型内のhbrBackground)で背景色を指定しておいて、InvalidateRect関数のところでクリアするように指定する・・・のが多分通常なんだけど。
毎回画面真っ白とか真っ黒とかにしか出来なくて、透明ウィンドウってのがWindowsMobile上で出来ないみたいなのよね。
で、とった方法が、
プログラム起動時のToday画面を別画像でコピー保存しておいて
その画像を毎回背景として最初に描画する・・・という方法す。
GetDCの引数をGetDesktopWindow()で行うことで、デスクトップ自体のDCがとれて
オフスクリーンの時の要領で描画領域用意しておいてソコに描画しておく、と。
あとはその用意したDCを毎回書いていく、って感じ。
というわけでオフスクリーン描画によるちらつき防止と、デスクトップをプリントスクリーンして透明ウィンドウもどきをやった、というお話でした。
なにげにこの透明ウィンドウもどきをやることで、横画面に切替した瞬間えらいことになったりするわけですが・・・現状解決策見つかってなかったりする・・・orz。
次は・・・オフスクリーン描画というものをやってみたす。
ウィンドウと同じ大きさの描画領域を用意して、そこにいったん描画して、最後にそれをウィンドウに描画するというもの。
ちっこい画像を次々描画していくより、でっかい画像1つを1回パンッと描画する方が
タイミング的にも画面がちらつかないという利点があるのだそうな。
手順としては、
GetDC関数でウィンドウのDCを取得して、そのウィンドウのDCを元にCreateCompatibleBitmap関数でウィンドウへと同じように描画できる画像領域BMPが出来る。
そしてそのBMPを、予めCreateCompatibleDCで作っておいた別箇DCに割り付けることで
そのDCに対してBitBlt等で描画することが出来る。
ひとしきり描画を行ったところで、1描画の最後にウィンドウDCに対して作成DCを描画(BitBltでOK)することによってオフスクリーン描画終了。
と、こんな感じ。
ループ毎に繰り返し描画を行うにあたって、前回描画した分はクリアする必要が出てくるわけですが。
方法としては、ウィンドウを作る時のパラメータ(WNDCLASS型内のhbrBackground)で背景色を指定しておいて、InvalidateRect関数のところでクリアするように指定する・・・のが多分通常なんだけど。
毎回画面真っ白とか真っ黒とかにしか出来なくて、透明ウィンドウってのがWindowsMobile上で出来ないみたいなのよね。
で、とった方法が、
プログラム起動時のToday画面を別画像でコピー保存しておいて
その画像を毎回背景として最初に描画する・・・という方法す。
GetDCの引数をGetDesktopWindow()で行うことで、デスクトップ自体のDCがとれて
オフスクリーンの時の要領で描画領域用意しておいてソコに描画しておく、と。
あとはその用意したDCを毎回書いていく、って感じ。
というわけでオフスクリーン描画によるちらつき防止と、デスクトップをプリントスクリーンして透明ウィンドウもどきをやった、というお話でした。
なにげにこの透明ウィンドウもどきをやることで、横画面に切替した瞬間えらいことになったりするわけですが・・・現状解決策見つかってなかったりする・・・orz。
PopClock作成の軌跡~その3
現在進行度までの説明がまだまだなので、ばしばしいきまするよ~。
描画に関して・・・えっと細かい話は勉強ページとかリファレンス見るとして、
画像を読込んで画面に表示する手順としては、
SHLoadDIBitmap関数でBMPファイルが読込まれ、HBITMAP型が返されるのでそれを、
CreateCompatibleDC関数でHDC型のデータ(デバイスコンテキストとかいうらしい)を作って
SelectObject関数でBMPをDCに当てはめる。
で、そのHDCデータを描画時BeginPaintとEndPaintの間に、BitBlt関数を書くとウィンドウ内の指定位置に貼付描画する、と。
んでまぁ色々試した感じだと、現状のSDK使う環境では画像描画に関して出来ることが
部分描画、拡大縮小、半透明描画
・・・位な感じ。
使う関数としては、TransparentImageとAlphaBlendで出来る、と。
回転とか、色指定とか、色加算とかは無いんだよな・・・何か方法あるんだろうか?
あ、ちなみに読込んだBMPデータ及びDCはプログラムの終了前までに解放しないとダメス。
DeleteDCとDeleteObjectの関数でどぞ。
描画に関して・・・えっと細かい話は勉強ページとかリファレンス見るとして、
画像を読込んで画面に表示する手順としては、
SHLoadDIBitmap関数でBMPファイルが読込まれ、HBITMAP型が返されるのでそれを、
CreateCompatibleDC関数でHDC型のデータ(デバイスコンテキストとかいうらしい)を作って
SelectObject関数でBMPをDCに当てはめる。
で、そのHDCデータを描画時BeginPaintとEndPaintの間に、BitBlt関数を書くとウィンドウ内の指定位置に貼付描画する、と。
んでまぁ色々試した感じだと、現状のSDK使う環境では画像描画に関して出来ることが
部分描画、拡大縮小、半透明描画
・・・位な感じ。
使う関数としては、TransparentImageとAlphaBlendで出来る、と。
回転とか、色指定とか、色加算とかは無いんだよな・・・何か方法あるんだろうか?
あ、ちなみに読込んだBMPデータ及びDCはプログラムの終了前までに解放しないとダメス。
DeleteDCとDeleteObjectの関数でどぞ。
2007年9月4日火曜日
PopClock作成の軌跡~その2
続いてその2
Windowsプログラム。イベントに対応して処理をする・・・なわけですが、
今作ろうとしているのは、決まった時間間隔で繰り返し処理を行う必要がある、と。
繰り返し処理としてタイマー関数を使いました。
初期処理部分にSetTimer関数を置くと、指定した間隔でWM_TIMERイベントが発生するんですな。
で、WM_TIMER内に繰り返し処理を記述です。
繰り返す内容としては、基本的には画像の描画処理になります。
表示すべき位置を計算した後、画像の表示処理を行う、と。
というわけで、描画の基本となるわけですが、
描画を行うのはこれもイベント発生に応じて行うことになりまして、WM_PAINTイベント内で記述することになります。
簡単に書くと、
// 描画処理イベント時に
case WM_PAINT: {
// 描画開始
hdc = BeginPaint(hWnd, &ps);
// 描画処理書いて
(色々)
// 描画終了
EndPaint(hWnd, &ps);
} break;
で、この描画開始終了関数間にテキスト書いたりとか、図形描いたりとか、画像貼り付けたりとかするわけです。
ちなみに、WM_PAINTイベントを発生させるのにWM_TIMERイベント内で、InvalidateRect関数とUpdateWindow関数を順に呼んでおります。
描画処理の中身については次っ。
Windowsプログラム。イベントに対応して処理をする・・・なわけですが、
今作ろうとしているのは、決まった時間間隔で繰り返し処理を行う必要がある、と。
繰り返し処理としてタイマー関数を使いました。
初期処理部分にSetTimer関数を置くと、指定した間隔でWM_TIMERイベントが発生するんですな。
で、WM_TIMER内に繰り返し処理を記述です。
繰り返す内容としては、基本的には画像の描画処理になります。
表示すべき位置を計算した後、画像の表示処理を行う、と。
というわけで、描画の基本となるわけですが、
描画を行うのはこれもイベント発生に応じて行うことになりまして、WM_PAINTイベント内で記述することになります。
簡単に書くと、
// 描画処理イベント時に
case WM_PAINT: {
// 描画開始
hdc = BeginPaint(hWnd, &ps);
// 描画処理書いて
(色々)
// 描画終了
EndPaint(hWnd, &ps);
} break;
で、この描画開始終了関数間にテキスト書いたりとか、図形描いたりとか、画像貼り付けたりとかするわけです。
ちなみに、WM_PAINTイベントを発生させるのにWM_TIMERイベント内で、InvalidateRect関数とUpdateWindow関数を順に呼んでおります。
描画処理の中身については次っ。
PopClock作成の軌跡~その1
プログラムのお話もそろそろ実部分へと行こうかと
とりあえずソフトの名前は「PopClock」としました。
・・・完全に思いつきによる名前ではあったりするんですが、作ろうとしているものとのイメージとまぁ合ってるからいいかと思ったり。
導入のお話の段階でウィンドウだけが作成されたプログラムが出来ました、と。
次にやったのは・・・なんだっけ。
ソフトの終了部の作成。
元ソースの段階でウィンドウ閉じれば終了するように出来ています。
これはイベント発生した時に、ウィンドウ作る時設定した関数WndProcがよばれて、対応するメッセージパラメータ(この時はWM_CLOSEか)を見て処理わけしていると。
で、DestroyWindow関数でウィンドウ終了させて今度はWM_DESTROYが渡されるからそこでPostQuitMessage関数でプログラム終了、てな感じでしょか。
ちなみに私のつたない言葉だけで書いていてもアレなので(汗)、ソース見ながら考えることをお勧めします。というかワケわからんながらに読み流す方がもっとお勧めです(笑)。
とりあえず作った点として、ウィンドウを閉じる以外に、本体の決定ボタンと画面タップでも閉じるようにしました。
画面タップ時のパラメータはWM_LBUTTONDOWNで、決定ボタン押しはWM_KEYDOWNのさらにWPARAM値VK_RETURNの時に、さっきのようにDestroyWindowする形に。
ウィンドウプログラムの基本って、イベントが発生した時に特定の決めた関数がパラメータと共に呼ばれるから、そのパラメータ値を見て特定の処理をしていくって感じなのね~。
とりあえずソフトの名前は「PopClock」としました。
・・・完全に思いつきによる名前ではあったりするんですが、作ろうとしているものとのイメージとまぁ合ってるからいいかと思ったり。
導入のお話の段階でウィンドウだけが作成されたプログラムが出来ました、と。
次にやったのは・・・なんだっけ。
ソフトの終了部の作成。
元ソースの段階でウィンドウ閉じれば終了するように出来ています。
これはイベント発生した時に、ウィンドウ作る時設定した関数WndProcがよばれて、対応するメッセージパラメータ(この時はWM_CLOSEか)を見て処理わけしていると。
で、DestroyWindow関数でウィンドウ終了させて今度はWM_DESTROYが渡されるからそこでPostQuitMessage関数でプログラム終了、てな感じでしょか。
ちなみに私のつたない言葉だけで書いていてもアレなので(汗)、ソース見ながら考えることをお勧めします。というかワケわからんながらに読み流す方がもっとお勧めです(笑)。
とりあえず作った点として、ウィンドウを閉じる以外に、本体の決定ボタンと画面タップでも閉じるようにしました。
画面タップ時のパラメータはWM_LBUTTONDOWNで、決定ボタン押しはWM_KEYDOWNのさらにWPARAM値VK_RETURNの時に、さっきのようにDestroyWindowする形に。
ウィンドウプログラムの基本って、イベントが発生した時に特定の決めた関数がパラメータと共に呼ばれるから、そのパラメータ値を見て特定の処理をしていくって感じなのね~。
さて続き、の続き
えーと、次は何を話そかな・・・。
んー・・・今作ってる時計アプリのコンセプトなど。
W-ZERO3を携帯として利用していて、今まで使っていた携帯電話と見た目で違って実用的に困っていたことがあって、それが
「ぱっと携帯を見たときに現在時間が隅に小さくしか出てなくて、時間が分からんですよん」
というトコ。
んで、そこはWindowsMobile機ということでフリーソフトとか色々あって、実のところいいソフトもあるんですが、
なんというか・・・あくまで自分には物足りないというか・・・まぁ、大きさとか主にその辺とか手軽さというか見た目とか何というか色々ごちゃごちゃ考えているうちに、
続く、と。
んー・・・今作ってる時計アプリのコンセプトなど。
W-ZERO3を携帯として利用していて、今まで使っていた携帯電話と見た目で違って実用的に困っていたことがあって、それが
「ぱっと携帯を見たときに現在時間が隅に小さくしか出てなくて、時間が分からんですよん」
というトコ。
んで、そこはWindowsMobile機ということでフリーソフトとか色々あって、実のところいいソフトもあるんですが、
なんというか・・・あくまで自分には物足りないというか・・・まぁ、大きさとか主にその辺とか手軽さというか見た目とか何というか色々ごちゃごちゃ考えているうちに、
- 時間確認するときだけ見れればいいんじゃね?
- 一時だけ起動させるんだったらメチャメチャ動かしたりして見た目にぎやかにして面白くしてもいいんじゃん?
- どうせならさらに誰でも自由に作りこめる仕組みなら何でも出来て色々広がるんじゃないかぃん?
続く、と。
2007年9月3日月曜日
さて続き
プログラムのお話、の続き。
まだ取っ掛かりまでしか話してないっけか
現在の進行度までまだまだ追いついてないですよ。
それ以上に作ろうとしているモノにまだまだ達していないわけですが(苦笑)。
さて、ウィンドウを作ったところですな。
この後を作るに当たって参考にしたサイトは・・・っと
メモ書きによると、この辺りか。
http://game_dev.at.infoseek.co.jp/winceapi/index.html
http://www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/index.html
まぁ、探せば他にもあるとは思いますが、
これもまた検索のめぐり合わせですな~。
といっても、それ以上に参考にしてるのはVisualStudio内のヘルプで検索でリファレンスだったり。
一つ関数を見るときも実際確認として使うのはMSDN内になるのよね。
一応この環境で作るに当たっての大元だから、勉強としても見ておくに越したことは無いのでありました。
・・・HDD容量無いからヘルプインストールできなくてオンラインヘルプだから検索レスポンスがちとアレなのがアレではありますが(汗。
うむ、キリがいいのでいったんココで切るか。
まだ取っ掛かりまでしか話してないっけか
現在の進行度までまだまだ追いついてないですよ。
それ以上に作ろうとしているモノにまだまだ達していないわけですが(苦笑)。
さて、ウィンドウを作ったところですな。
この後を作るに当たって参考にしたサイトは・・・っと
メモ書きによると、この辺りか。
http://game_dev.at.infoseek.co.jp/winceapi/index.html
http://www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/index.html
まぁ、探せば他にもあるとは思いますが、
これもまた検索のめぐり合わせですな~。
といっても、それ以上に参考にしてるのはVisualStudio内のヘルプで検索でリファレンスだったり。
一つ関数を見るときも実際確認として使うのはMSDN内になるのよね。
一応この環境で作るに当たっての大元だから、勉強としても見ておくに越したことは無いのでありました。
・・・HDD容量無いからヘルプインストールできなくてオンラインヘルプだから検索レスポンスがちとアレなのがアレではありますが(汗。
うむ、キリがいいのでいったんココで切るか。
2007年9月2日日曜日
んじゃ、食べ歩きの話
最初に書いてたし、そろそろ食べ歩きの話でも。
ホントはプログラムの話を進める予定だったんだけど、
あれから先の話は今ソース手元に無いから
書けそうに無かったりするのでした(汗)。
さて、食べ歩き・・・か。
2週間ほど前からの話になりますが、
もってるぴっちのカメラ機能を折角あるんだから使ってみるか・・・どうせ撮るなら食べ物だよな・・・後で見返して楽しいと言うか色々中枢刺激されそうだし
・・・てな感じで、外食時に普段食べる機会のあんまり無いもので
何となく気に留めたものを撮っていったら、
2週間で12件分・・・って結構あるな・・・。
写真もあるし折角ブログ開いたんだし、って事でぼちぼち食べ歩きのこととか書いてみるですよ。
と言った所で、何か長くなりそうなので一旦〆っと。
ホントはプログラムの話を進める予定だったんだけど、
あれから先の話は今ソース手元に無いから
書けそうに無かったりするのでした(汗)。
さて、食べ歩き・・・か。
2週間ほど前からの話になりますが、
もってるぴっちのカメラ機能を折角あるんだから使ってみるか・・・どうせ撮るなら食べ物だよな・・・後で見返して楽しいと言うか色々中枢刺激されそうだし
・・・てな感じで、外食時に普段食べる機会のあんまり無いもので
何となく気に留めたものを撮っていったら、
2週間で12件分・・・って結構あるな・・・。
写真もあるし折角ブログ開いたんだし、って事でぼちぼち食べ歩きのこととか書いてみるですよ。
と言った所で、何か長くなりそうなので一旦〆っと。
登録:
投稿 (Atom)