イメージ 1

イメージ 2

FT-1000MPトランシーバーのマウスホイールの制御での周波数コントロールを検討してみた。以前のVisualBasicでもマウスホイールでの周波数コントロールを行ったが今回は同じ方法で制御できないことが判った。VisualBasicでの次のイベント制御での取得値が異なるのだ。
以下はVBコード
--------------------------------------------------------------------------------
Private Sub Form1_MouseWheel(ByVal sender As Object,ByVal e As System.Windows.Forms.MouseEventArgs)Handles Me.MouseWheel
wa = e.Delta.ToString()
End sub
--------------------------------------------------------------------------------
この中で次の様にマウスホイールのDelta値を取得していたが、VisualBasicの場合は取得値がマウスホイールを回転する割合で値が120の倍数で取得できていた。ホイールを奥方向に強く回すとwaが600とかの値が取れていた。逆方向ではwa=-600とかの値

wa=e.Delta.ToString()

VisualC++2010ExpressでのForm1イベントでのMouseWheelはVisualBasicの様にイベントが表示されていない。VBでのイベント選択画像添付
なのでVisualC++2010Expressでは以下のようにイベントを手動で書きます。
-------------------------------------------------------------------------------
private: System::Void Form1_MouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e){
 int wv = (e->Delta)/120;
if(wv < 0 ) {
  cv = -1;
}else{
cv = 1;
}
.
.
以下処理コード省略(後で記載しています。)
.
.
}
-------------------------------------------------------------------------------
上記のwvの値がVBだと ±10ぐらいまでの値が取れているのだが、VisualC++2010Expressだといくらホイール回転を強く回してもいいところ±2であった。VisualBasicのようにホイールの回転クリック度にあわせたリニアなデータは取れない。VBでの動作がうそだったのか?MSDNヘルプではやはりマウスホイールの回転方向を取得が目的であり値は環境で変わるとの事である。つまり回転方向を取得するのが主なのである。だから値は符号がついた数字でプラスかマイナスかがわかればよいということなのだ。ということでVBの書き換えと言うわけにはいかなくなりました。いろいろと考えているうちに上記の方向の値が変わるのが(±1と±2)気に入らないので、最初に上記コード中のように正負を判定し値をプラス1とマイナス1の2つに限定するようにしました。周波数はマウスホイールの1クリックで回転方向により±1khzとなる事をもとに上記の限定を行っています。ですからこの値を10とかにすると1クリックあたり10khzにすることも可能ということです。
あとは先の周波数読み取りのところにて周波数を計算で求めた次のコードの後に無線機の周波数範囲に合わせた1khz台の場合の計算用の周波数データを文字化してSwitchで周波数桁に合わせて計算用周波数データを設定します。
------------------------------------------------------------------------------
//従来の周波数計算コードの部分
int Frequency=0;
Frequency=(GOUKEI * 0.625); //周波数を求めます。小数点等はなしの数値のみ
String^ mojiFreq; //周波数を文字化して入れる変数
mojiFreq=Frequency.ToString(); //文字化します。
int lenFrequency=0; //文字化の長さ用
lenFrequency=mojiFreq->Length; //長さを求めます。
-------以下追加コード---------------------------------------------------------
lenF = lenFrequency; //グローバルエリアでlenFはint宣言してあります。

// 周波数のkhz情報のみ取り出しておきます。後でのマウスwheelでの周波数制御用 khz代のup down
String^ mousewheel1khz;
switch(lenFrequency)
{
   case 8://14252 周波数14.252MHzの桁の場合
mousewheel1khz=mojiFreq->Substring(0,lenFrequency-3);
break;
   case 7://1503 周波数1.503MHzの桁の場合
mousewheel1khz=mojiFreq->Substring(0,lenFrequency-3);
break;
   case 6://646 周波数.646MHzの桁の場合
mousewheel1khz=mojiFreq->Substring(0,lenFrequency-3);
break;
}
char* p1=(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(mousewheel1khz).ToPointer();
mojiwheel[0]=*p1;
mojiwheel[1]=*(p1+1);
mojiwheel[2]=*(p1+2);
mojiwheel[3]=*(p1+3);
mojiwheel[4]=*(p1+4);
System::Runtime::InteropServices::Marshal::FreeHGlobal((IntPtr)p1);
//以下従来コード
--------------------------------------------------------------------------------
以上5000文字制限がかかったので続きは次に記載します。