2015年1月11日日曜日

DXライブラリー日記 「マウスホイールの拾い漏れ、こぼし」


  2割は頂く。
  そう宣言する。
  必ず貰うから。



あの馬鹿たれが好き勝手にしている某プログラムが哀れになったので色々と手直ししている。
表示がらみは普通に60FPS出るようになったので問題なし。
ただ、これだと文字の表示スピードが一秒間に60文字しか出せない。
どうしたものかと思い、3文字に一回フリップするようにしたらいい感じなので、この辺は好きに調整出来る様にする事にしよう。


  • キーボードのみでもカーソルで履歴を行ったり来たり、背景表示
  • 文字のノーウエイト表示(画面端でのみフリップするようにしただけとも言う)
  • ノーウエイト時でも強制ストップする制御文字追加

キーボード周りはこんなものであろう。
あとはセーブロードをキーボードからでも出来る様にしたいところだが、めんどくさいので無し。
マウス使ってメニューを出せ、と。


マウスに関しても少し追加機能のコードを書いていたら嵌った。


『if文になんでもかんでも条件式を放り込むな』

というのが今日の教訓。
マウスホイールの回転量を得る関数 GetMouseWheelRotVol() を一個使っているうちは良かったのだが、上回転、下回転で分けるために二個目のif文追加したら見事に反応が変になった。


<<失敗>>

if(GetMouseWheelRotVol() > 0 )  history_mode(); //履歴モードへ
if(GetMouseWheelRotVol() < 0 )  check=1;         //クリック待ち抜け条件


何も考えずに二行目を追加したが、よくみりゃどっちが呼ばれるか判らんジャン!
そりゃ意味不明な挙動になるな。



<<当たり前の書き方>>


mouse_w=GetMouseWheelRotVol()
if (mouse_w>0){
history_mode();
}else if (mouse_w<0){
check=1;
}




これでOKと思ったところ、このホイールはウインドウがアクティブじゃなくても効いてしまうという、、、、、

ハイハイ、めんどくさいめんどくさい。
アクティブかどうかチェキしてホイールの回転返す関数作って


int get_mouse_wheel(){
//ウインドウがアクティブの時だけマウスホイールの値を返すよ
if (GetWindowActiveFlag()) {
return (GetMouseWheelRotVol());
} else{
//それ以外は0を返すよ
return (0);
}

}



こうね


mouse_w=get_mouse_wheel();
if (mouse_w>0){
history_mode_2();
}else if (mouse_w<0){
check=1;
}





ふう、おかげで履歴と本文を行ったりきたりが楽になったと。
本当はこの後、右クリックで履歴を抜けていたのに加えて、履歴最終ページからはホイールを進める方向に回した際に本文に戻ってくるようにしたのであるが、何年も前に書いた物だけあって抜ける条件をどう書いていいものかと1時間悩んだ。



  矢張り2割は頂く。
  絶対に頂く。























0 件のコメント: