やすソフトウェア


■ プログラミングについて

逆ポーランド記法言語 (05/06/30)
PHPスクリプトへのPOSTの問題 (05/01/23)
全ウィンドウの再描画 (05/02/22)
トランプのカードの描画 (05/02/22)



逆ポーランド記法言語
なんとなく逆ポーランド記法のプログラミング言語を作ってみた。構想段階で作り途中だけどなんとなくインタプリタを公開してみる
brainfuckと共に難解奇妙言語としてヨロシク

■ USAY言語
ダウンロード

PHPスクリプトへのPOSTの問題
PHPスクリプトへプログラムからPOSTでデータを送る場合、Content-Typeapplication/x-www-form-urlencodedを指定しないとPHPはPOSTデータとして受け取ってくれない。
一部のプログラムを使用したり、一部の携帯端末でアプリを作ると、Content-Typeが指定できなかったりtext/plainになってしまったりする。
そこで自分でPOSTデータをデコードするスクリプトを書いてみた。


  if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_SERVER['CONTENT_TYPE'] == 'text/plain')  
  {
    $putdatas = "";
    $inpo = fopen("php://input", "r");
    while ($data = fread($inpo, 1024))
      $putdatas .= $data;
    fclose($inpo);
    $putdatas = explode("&", $putdatas);
    foreach ($putdatas as $putdata)
    {
      list($putkey, $putvalue) = explode("=", $putdata, 2);
      $putkey = urldecode($putkey);
      $putvalue = urldecode($putvalue);
      if (ini_get("register_globals"))
        $$putkey = $putvalue;
      $_POST[$putkey] = $putvalue;
    }
  }

これを頭に入れればContent-Typetext/plainの時には自力でデコードするようになるはず。
文字コードなどは考えていないので適当にいじって下さい。

全ウィンドウの再描画
よくイタズラプログラムでGetWindowDC(GetDesktopWindow())なんて具合にデスクトップのデバイスコンテキストを取得して画面に落書きしたりするんだが、この後処理が分からずにいた。
全ウィンドウにWM_PAINT送ればいいのかと思ったけどなぜか再描画してくれない。色々調べてたらValidateRectというAPIを使えばいいこと判明。


  ValidateRect(NULL, NULL);  

こんだけでおっけー。ヘルプの“If hWnd parameter is NULL, Windows invalidates and redraws all windows and sends the WM_ERASEBKGND and WM_NCPAINT messages to the window procedure before the function returns.”ってのに最初気づかなくて試行錯誤してたし('A`)

トランプのカードの描画
トランプゲームを作る時、カードの絵が必要となる。そんな時、自分で用意しなくてもWindowsに既に描画してくれるDLLが存在するのだ。
cards.dllというDLLがsystem32にある。Windows98以前にもあるらしいけど16bitらしいからシラネ。

サンプルプログラムを作ってみたので特製ソースを置いておきますよー

Googleで検索してみると解説サイト(英語)が見つかります。



戻る


Copyright(C) CounterCounterCounterCounter Yasu All Rights Reserved.