1

Cプログラムでマウス関連のイベントを実行するためにGoogleでこのヘッダーファイルを見つけましたが、 Cで利用できるint86 union REGS i,o;他のint86タイプの関数は何ですか? Windows OS と Turbo C を使用しています。

#include<conio.h>
#include<stdio.h>
#include<dos.h>

initmouse();
void showmouseptr();
void restrictmousept(int,int,int,int);
void getmousepos(int *,int *,int *);
void hidemouseptr();

union REGS i,o;
initmouse()
{
     i.x.ax=0;
     int86(0x33,&i,&o);
     return(o.x.ax);
}
void showmouseptr()
{
   i.x.ax=1;
   int86(0x33,&i,&o);
}
void restrictmouseptr(int x1,int y1,int x2,int y2)
{
   i.x.ax=7;
   i.x.cx=x1;
   i.x.dx=x2;
   int86(0x33,&i,&o);
   i.x.ax=8;
   i.x.cx=y1;
   i.x.dx=y2;
   int86(0x33,&i,&o);
}
void getmousepos(int *button,int *x,int *y)
{
  i.x.ax=3;
  int86(0x33,&i,&o);
  *button=o.x.bx;
  *x=o.x.cx;
  *y=o.x.dx;
}

void hidemouseptr()
{
   i.x.ax=2;
   int86(0x33,&i,&o);
}
4

4 に答える 4

3

これは、MS-DOS が x86 割り込みを使用してシステム関数を呼び出し、マウス座標を取得するための古いコードのように見えます。このコードが最新のコンピューターのコマンド プロンプトでまだ機能する場合、私は驚かれることでしょう。実際、dos.h を含む上部のヘッダー ファイルは、これを明らかにします。

in86() は、DOS モードで CPU を「中断」する方法です。これは、現代のオペレーティングシステムで関数が呼び出される方法のようなものです。詳細はこちら: http://wiki.answers.com/Q/What_is_the_INT86_function_in_C_programming

ユニオンは、さまざまな方法でアクセスできるデータを定義する C のメソッドです。詳細はこちら: http://www.go4expert.com/forums/showthread.php?t=15 .

何をしようとしているのか、ましてや実行しているオペレーティング システムが不明です。最初に言語を選択し (Windows を使用していると仮定すると、C# から始めるのがよいでしょう)、次に WinForms の基本クラス ライブラリを調べて、マウス イベントに応答する方法を学習することをお勧めします。マウスに応答する方法を教えてくれる WinForms に関する優れたチュートリアルがあります。

于 2012-10-16T18:05:03.590 に答える
2

そのコードは破棄してください。それは古い 16 ビット DOS であり、おそらくあなたが望んでいるものではありません。

あなたは C にかなり慣れていないようです。その場合、言語をよく勉強することをお勧めします。サイトをチェックして、良い学習の参考文献を探してください。Dennis Ritchie と Brian Kernighan による「The C Programming Language」は良い出発点です。

そうは言っても、int86「Cには」関数はありません。これらは Borland Turbo C 拡張機能です。それが DOS でマウスを操作する方法でしたが、現在では異なります。

C 言語は、基本的に単なるプログラミング言語であることに注意してください。アルゴリズムを表現することを目的としています。ただし、C 言語標準は標準ライブラリも提供します。これは、時間と移植性を節約するために使用できる定義済みの型、関数、およびマクロのセットです。このライブラリはいくつかの基本的な機能に対応していますが、マウス入力の処理はその 1 つではありません。

つまり、C を学習した後は、特定のオペレーティング システムの API を扱う準備が整います。これが必要なのは、C 標準ライブラリがどのような種類の入力デバイスも操作する方法を提供していないためです。また、最新のオペレーティング システムで入力がどのように処理されるかについて、いくつかの基礎を学習します。たとえば、マウス入力を処理するには、ほとんどの場合、マウス イベントを受け取るためにウィンドウ(またはウィジェット) を作成する必要があります。これは、基礎となるウィンドウ API について少し読む必要があることを意味します。

システムの API にアクセスして違いを取り除き、プログラミングの代替手段を提供するライブラリがいくつかあります。ただし、移植性の向上を除けば、システムの API を直接調べて使用することと何ら変わりはありません。

于 2012-10-16T18:25:48.700 に答える
1

int86 関数は、DOS マウス割り込み 33h を呼び出します。dos 割り込みは msdos オペレーティング システムに固有であるため、コードは msdos でのみ使用できます。「union REGS」は、DOS 割り込みのパラメーターとして使用される入出力レジスターです。DOS 割り込みは、他のオペレーティング システムのシステム コールに似ています。

于 2012-10-16T18:04:51.403 に答える
-1

Windows/Linuxなどでプログラム dosboxを実行したい場合に使用できますturbo C

たとえば、Windows では、プログラムを実行するバッチ スクリプトを実行するデスクトップ リンクを作成するだけですdosbox。これが、Steam バージョンの Doom の仕組みだと思います

于 2014-03-20T09:58:24.393 に答える