自分でわっふるのビルドを行っている方むけの小ネタ集(WinCE用) ======================================== ●WinCE.NET対策(あまりにも有名なネタですが…) OSがPPC2003のPocketPCやシグマリオンVでは、 正規のわっふる(PPC版)は終了時にフリーズしてしまい、 リセットするしかなくなる。 (HPC版をシグマリオンVで使う場合は問題ない。) 対策は、けんじょさんのところの掲示板「御意見板」などにもある通り、 WAVEMNG.Cのwavemng_destroy()の中の  waveOutPause(w_ctrl.hwave);  waveOutReset(w_ctrl.hwave); の二行を(コメントにする等して)削除すればよい。 (対策提供者:sigu3氏) (http://otd6.jbbs.livedoor.jp/610544/bbs_plain?base=1104&range=8) ======================================== ●セーブ/ロード不具合の対策 わっふるのデータ(AVDファイル)を深い階層のディレクトリに 入れていたり、極端に長い名前のディレクトリに入れていると、 動作はしているのにセーブ/ロードが出来ないことがある。 (終了時にもグローバルフラグの保存が出来ずエラーになる。) これは、セーブファイル名の保存に使われている変数の サイズが小さすぎるためだと思われる。 これを直すにはsystem.cの最初の方(165行目)で  static char SaveFile[64]; と定義されているところを  static char SaveFile[MAX_PATH]; としておけばよい。 ======================================== ●サスペンド時にタスクリストに残す わっふるでは、他のウィンドウにフォーカスが移った際に (バッテリ警告メッセージが出た時など)、 わっふるはサスペンドする仕様となっている。 このときタスクリストにはわっふるが表示されないために タスクマネージャの類ではわっふるをレジューム出来ない。 (再度わっふるを実行すればレジューム出来る。) サスペンド時にタスクリストに表示されるようにするには main_ppc.cのSuspend()の中の  ShowWindow(hMainWnd, SW_HIDE); のところを  ShowWindow(hMainWnd, SW_MINIMIZE); に変更すればよい。 (対策提供者:ゆい氏) (http://otd11.jbbs.livedoor.jp/1178689/bbs_plain?range=-6&base=260) ======================================== ●レジューム時の画面更新不具合 サスペンドしているわっふるをタスクマネージャ等で レジュームすると、画面が白いまま更新されない場合がある。 正確な対処方法は不明だが、とりあえずの対策として、 main_ppc.cのWinMain()の中の  case WM_PAINT:   if ( GetUpdateRect(hwnd, &r, 0) ) {    BeginPaint(hwnd, &ps);    GXUpdate(r.left, r.top, r.right-r.left, r.bottom-r.top);    EndPaint(hwnd, &ps);  }  return 0; の箇所を全て(コメントにする等して)削除するという方法がある。 (ただ、HPC版(main_hpc.c)ではこれはやらない方がよいかも。) ======================================== ●バックログ表示中のメッセージスキップ禁止 わっふるでは何故かバックログ中にメッセージスキップ(左キー) が可能となっている。これを行うと最悪の場合、回復不能なほどに 文字表示が乱れたりする。 (方向キー右でのメッセージ送りも可能で、これも同様に  文字表示に悪影響を及ぼす恐れがある。) バックログ中にはメッセージスキップが効かないようにするには、 main_ppc.cのWndProc()の中の  if ( vkKey==gxkl.vkLeft ) { //左   Sys_ToggleSkip();  } else if ( vkKey==gxkl.vkRight ) { //右   if (!GetAsyncKeyState(gxkl.vkUp) && !GetAsyncKeyState(gxkl.vkDown))    Mouse_ButtonUp(0);  } else if (vkKey == gxkl.vkUp) { //上 のところを  if ( vkKey==gxkl.vkLeft ) { //左   if ( !AVG32Work->LogMode ) // バックログを表示していない    Sys_ToggleSkip();  } else if ( vkKey==gxkl.vkRight ) { //右   if ( !AVG32Work->LogMode ) // バックログを表示していない    if (!GetAsyncKeyState(gxkl.vkUp) && !GetAsyncKeyState(gxkl.vkDown))     Mouse_ButtonUp(0);  } else if (vkKey == gxkl.vkUp) { //上 などとすればよい。 (バックログ表示中はAVG32Work->LogMode≠0。) ======================================== きゅーびずむ