Windowsプログラミング 「文字を書く」

今度は文字を書くぞ!
ウィンドウプロシージャの一部を抜粋。

case WM_PAINT:
        PAINTSTRUCT paint;
        hdc = BeginPaint(hwnd,&paint);
        TextOut(hdc,100,100,tmp,strlen(tmp));
        EndPaint(hwnd,&paint);
        break;


hdcはHDC型で最初の方で宣言している。tmpは文字列。
HDCはデバイスコンテキストハンドルと呼ばれるもので、ウィンドウに貼り付けられている画用紙などと説明されている。
各ウィンドウには画用紙が貼り付けられており、BeginPaintでその画用紙のハンドルを取得して描画するというイメージらしい。

んで、これだけじゃつまらんのでボタンを押すと文字が変わるプログラムを作ってみた。
ボタンが押されたことはWM_COMMANDでわかり、ここでtmpを変えてやればよい。
しかし問題がある。ボタンを押しただけだとWM_PAINT、すなわち再描画メッセージが送られないのでウィンドウを最小化して再表示する等しないと文字が変化しない。

よし、じゃあ自分でWM_PAINTメッセージを送ってやればいいんじゃ!ということでPostMessageやSendMessageを試してみたがだめ。どうやらWM_PAINTメッセージはユーザが送ってはならないっぽい。
色々調べてみると、ウィンドウに無効領域を作る関数があり、それを使えばよいらしい。

    case WM_COMMAND:
        sprintf(tmp,"Button");
        InvalidateRect(hwnd,NULL,TRUE);
        break;



ボタンクリックで・・・
続きを読む >>
ジャジャガッチ | C/C++ | 21:43 | comments(0) | trackbacks(0) |

Windowsプログラミング 「プッシュボタン」

プログラムをインストールしているときに出る進捗状況をあらわすプログレスバー。
99パーセントから中々100パーセントにならないのはまだ許す。
でも100パーセントになったのに中々処理が終わらないのは許せねえ!!

さて、前回GUIプログラムのひな形を作った。
今回はプッシュボタンを追加する。ウィンドウプロシージャのみ示す。

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
 static HWND hButton;
 switch (msg)
 {
 case WM_CREATE:
  hButton = CreateWindow("BUTTON", "b", WS_CHILD|WS_VISIBLE, 100, 100, 100, 100, hwnd, NULL, ghInst , NULL);
  break;
 case WM_COMMAND:
  MessageBox(hwnd, "test", "s", MB_OK);
  break;

 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hwnd, msg, wp, lp);
 }
 return 0;
}

ボタンのウィンドウハンドルはstaticにしておく。こうしないとプロシージャを抜けたときにハンドルが破棄される。
あと、インスタンスハンドルを渡す必要があるため、グローバル変数に代入しておく(ghInst)。
そんなに難しくないね。
 
ジャジャガッチ | C/C++ | 22:43 | comments(0) | trackbacks(0) |

Windowsプログラミング

妻に言わせるとプログラムをごりごり書いているよりも積分計算等をやっている方が賢く見えるらしい。

********************
さて、プログラムを書く際、ほとんどはCUIで済ませてしまう。
しかしたまーにGUIを備えたプログラムを書きたいことがある。
そんなときはプライベートならC#で書いてしまう。
仕事ならWindows APIを使ってごりごり書くか、MFCを使う。ちなみに僕は別にプログラマじゃありません。
ただ、C#とかMFCはあまり好きではない。
自分が知らないところにたくさんのコードが生成されて気持ちが悪いのだ。便利ではあるんだけど。
そんなに複雑なインターフェースを持ったプログラムは必要ないのでWindows APIでごりごり書くのが一番よいのかもしれない。
性にも合っている。
ただ、ほとんど書く機会がないため不慣れで、書くのが億劫になってしまう。

そういうわけで少しWindows APIを使ったGUIプログラミングについて再勉強しようではないか、ということである。
 
続きを読む >>
ジャジャガッチ | C/C++ | 21:39 | comments(0) | trackbacks(0) |

バレーボール観ながらBMIについて考えた

ぐらちゃんバレー観ながらデータ放送で選手の身長と体重をチェックしていて、こんなでっかい人たちにもBMIの基準を適用してよいのだろうか、という疑問が芽生えた。
BMIとはBody Mass Indexの略で、
体重÷(身長の2乗)
で計算できる。18.5以上25未満が普通体重らしい。

物体の長さをLとしたとき、長さを2倍にスケールアップすると重さは8倍になる。これを相似則という。
人間にもこれを適用すると身長が2倍になると体重は8倍になる。
このような場合、例えばBMIが20普通体重の人の身長を2倍にするとBMIは20×8/4=40となり、肥満になってしまう。

おいおい、BMIなんか指標にしていいのかよ、と思ったが、問題ないらしい。
成人に対しては相似則は成り立たず、体重は身長の2乗に比例するそうだ。
筋肉が増えると表面積を増やして放熱する必要があるかららしい。
表面積は身長の2乗に比例すると考えられるので、筋肉量が3乗で増えてしまうとオーバーヒートしてしまう。
筋肉量の増加を2乗以下に抑えてオーバーヒートを防ぐということだろうか?
ということは、身長によって身体を構成する要素の割合は異なるということか?
疑問は尽きない。

ちなみに子供に対しては相似則が比較的成り立つらしく、
∝体重÷(身長の3乗)
が指標として用いられるそうだ(ローレル指数)。

これまであまり深く考えたことがなかったが中々奥深い。
もう少し調べたいが寝なきゃいけないので我慢してねる。おやすみ。
ジャジャガッチ | その他 | 21:04 | comments(0) | trackbacks(0) |

プロジェクトオイラー問題47

プロジェクトオイラー問題47。
最初に4つの異なる素因数を持つ数が4つ連続であらわれるとき、その最小の数を求めよ、という問題。
簡単。
解説は続きから。
 
続きを読む >>
ジャジャガッチ | 数学 | 19:31 | comments(0) | trackbacks(0) |

プロジェクトオイラー問題46

本日はかに鍋パーティーなり。
うまかったー!

ゴールドバッハは奇合成数は素数と平方数の2倍の和であらわせると予想した。
実は予想は誤りであり、もっとも小さな予想に反する数はいくつか、という問題。
とても簡単。
解説は続きから。
続きを読む >>
ジャジャガッチ | 数学 | 19:00 | comments(0) | trackbacks(0) |

プロジェクトオイラー問題45

プロジェクトオイラー問題45。
40755は三角数かつ五角数かつ六角数である。
次に三角数かつ五角数かつ六角数であるとなる数を求めよ、という問題。
少し反則くさい愚直な方法で解いた。
解説は続きから。
続きを読む >>
ジャジャガッチ | 数学 | 10:06 | comments(0) | trackbacks(0) |

プロジェクトオイラー問題44

昨日は妻と久しぶりにカラオケに行った。
ペギー葉山の「算数チャチャチャ」を歌った。
平方根の計算とかサインコサインとかが出てくる楽しい歌です。ただしキーが高いので歌うのきついです。
カラオケに行くたびに思うのだが、曲と映像のひも付けはどうやってるんだろう?
曲と映像にキーワード(歌詞から抽出?手動?)を設定しておいて一致度の高いものを設定している?
一々手で設定している?知ってる人がいたら教えておくれ。

久しぶりにプロジェクトオイラー。
問題44。
五角数はPn=n*(3n-1)/2で生成される。
五角数の和及び差が五角数になるもののうち差が最小となるものを求めよという問題。
これは少してこずった。
解説は続きから。
続きを読む >>
ジャジャガッチ | 数学 | 08:53 | comments(0) | trackbacks(0) |

「ライブ・ア・ライブ」クリアした

スーパーファミコンの名作「ライブ・ア・ライブ」をクリアした。
オムニバス形式で7つの物語を任意の順でクリアしていく。
RPGなのだがボスくらいしか戦闘がないものもある。
ひとつの話が1〜2時間で終わるため、気楽にプレイできる。

ゲームとしてもよく作りこまれていて面白いのだが、何よりストーリーがすごい。
気になる人はぐぐってみるとよい。
何も知らずにプレイすると衝撃を受ける。
RPG三大不幸主人公の一人とスクウェア三大悪女の一人の競演が見られる。

なんと舞台にもなっているらしい!DVDもあるみたい。
これは買うべきか・・・?うーん、どうしよう。
 
ジャジャガッチ | その他 | 20:08 | comments(0) | trackbacks(0) |

λ式のβ変換

この前また妻とふたりで人生ゲームをやった。株を一度に三枚変えるようにしたり、所持金の3桁変動マスは4桁変動にするなどのルールでやってみた。若干ゲームバランスが破綻してしまう感はあるが、スリルがあって面白い。
人生ゲームの攻略法について考察するのも面白そう。すでにやってる人いそうだが。

「計算論」の続き。ここからがλ計算本番という感じ。
λ計算のβ変換とはλ記法であらわされた関数の関数値を求める操作に相当するもの。
定義2.1.2に形式的な定義は書いてあるが、具体的な式で考えた方がわかりやすい。β変換を→で表すことにする。
まずはすごく簡単な例から。
(λx.x)y→y
これが定義2.1.2(1)だ。
問題は(2)の方だ。
M→Nならばλx.M→λx.N。どういうことだ。
(λx.x)y→y
だから例えば
λz.((λx.x)y)→λz.y
ということになる。あたり前な感じか。
次にM→NならばMP→NP。
(λx.x)y→y
だから
(λx.x)yz→yz
ふむふむ。M→NならばPM→PNも同様だ。自然な定義だな。

λ式に対してβ変換を繰り返して具体的な値を得たいのだが、β変換の組み合わせは無数にある。左から変換していってもいいし、右からしていってもいい。最終的な結果は一致するだろうか。
これが2.2節のテーマで、実はChurch-Rosserの定理によってこれは保証されている。有限のβ変換列でそれ以上変換できなくなった場合、そのλ式を正規形という。
すべてのλ式が正規形を持つことは保証されない。また、正規形を持つλ式でも変換の仕方によっては変換が無限に続く場合もある。ただし、この場合もうまく変換すれば正規形にもっていくことができる。
では確実に正規形を得る変換の方法はあるだろうか、という問いには正規化定理が答えてくれる。左から順に変換していけば、正規形を持つ場合は必ず正規形に到達する。
ここまででλ式の基本的な性質は大分わかってきた。
2.3節はとりあえずスルー。

2.4節はλ式なんか考えて何が楽しいのかについて書いてある。
結論を言えば帰納的関数(すなわち計算可能な関数)はλ式によって表現できることが証明される。
計算可能関数の結果を得るためにwhileプログラム(C言語等)を書いて実行してもいいのだが、λ式を書いて実行してもいいわけだ。この場合の計算過程はβ変換そのものだ。コードはλ式、β変換が実行過程。

手続型言語はwhileプログラム、LISPはλ計算を基礎にしていると言えよう。そりゃあ全然違うものになるわな。
 
ジャジャガッチ | LISP | 22:29 | comments(0) | trackbacks(0) |
1/2PAGES | >> |

11
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH