慎重に作成: easyx をインターフェイスとして使用する場合、マウスがボタンに触れたときに背景色が変わるようにしたいと考えます。

easyx を使って小さなアプリケーション (告白プログラム doge の作成など) を開発すると、非常に高度に感じられますが、プログラムをより完璧にして顧客 (またはあなたのガールフレンド) に満足してもらえるようにするには、まだいくつかの細部に注意を払う必要があると感じます。細心の注意を払い、細かい問題に直面する必要があります。

ここで説明したいのは、マウスをインターフェイスと対話させる方法です。これには、次の内容が含まれます (主に背景を変更します。自信を持っていただくために、ここではいくつかの基本的な内容も示します)。 easyxを使うには 操作インターフェースを確立する; 2. ボタンの作成方法; 3. ボタンが 1 つしかない場合、マウスをボタン上に移動したときに背景を変更する方法; 4. ボタンが多い場合の変更方法.

#1. 指定したサイズの操作インターフェースを作成する方法

#include <easyx.h>
#include <graphics.h> 

initgraph(1100,800);

まず、最初のステップとして 2 つのヘッダー ファイルを適用し、initgraph 関数を参照します (2 つのパラメーターはそれぞれ x 軸と y 軸の座標です)。確立されたインターフェイスは、右が正の x 方向、下が正の y 方向です。

#2. 作成ボタン

IMAGE button;
loadimage(&button, L"按钮.jpg", 20, 50);
putimage(100, 20, &button, SRCINVERT);

まず、インターネット上でボタンとして気に入った写真を見つけて、その写真をプログラムにインポートする必要があります。方法は次のとおりです: 写真をダウンロードします (名前を覚えやすいように変更することを忘れないでください) ) -> プログラムのソースファイルが存在するフォルダーに画像を転送 -> プログラムの操作を実行します。プログラムは次のように動作します: 最初にキーワード IMAGE を引用し、button という名前の画像が保存されるスペースを定義します。次に、loadimage 関数を使用して画像をプログラムにダウンロードします。a、b、c、と呼ばれる 4 つのパラメーターがあります。 d 以下. a は a アドレスはイメージが保存されるメモリの場所です; b はダウンロードするイメージの名前です (C++ では警告が表示される場合があります。その前に L を追加してみてください); cd はダウンロードするイメージの名前です保存する画像のサイズ (xy 座標で表されます)。次に、操作インターフェイス上の任意の場所に画像を配置するために putimage 関数を引用する必要があります。また、4 つのパラメータがあります。これらを a1、b1、c1、d1、a1 と呼びます。b1 は、画像の左上隅の位置座標です。画像; c1 は画像のアドレス; d1 は a このモードに興味がある場合は、検索してください。

#3. 単一のボタンがマウスとどのように相互作用するか

MOUSEMSG m;
m = GetMouseMsg();
bool c1 = 1, now = 0;
if (m.uMsg == WM_MOUSEMOVE)
        {
            if (m.x > 800 && m.x < 1000 && m.y < 250 && m.y > 200 && !c1)
            {
                now = 1;c1 = 1;
                fillrectangle(800, 200, 1000, 250);
            }
            if ((m.x < 800 || m.x > 1000 || m.y > 250 || m.y <200) && now)
            {
                c1 = 0;now = 0;
                fillrectangle(800, 200, 1000, 250);
            }
        }

最初に MOUSEMSG を参照し、マウス オブジェクト m を作成します。次に、GetMouseMsg 関数を使用して m のプロパティを割り当て、インターフェイス上のマウスの座標を取得します。WM_MOUSEMOVE はマウスの動きを表し、m.uMsg はマウスのステータス、mx は x です。はマウスの座標、my はマウスの Y 座標です。このプログラムは、マウスが x 座標 800 ~ 1000、y 座標 200 ~ 250 に移動すると、長方形の色が塗りつぶされることを示します。マウスがボタンの外に移動したら、長方形を再度塗りつぶして元の色に戻します。

変数を c1 にすると、パフォーマンスがより安定し、常にちらつくのを防ぐことができます。

以下では、関数 fillrectangle を紹介します。この関数は、現在の線の形状と現在の塗りつぶしスタイルを使用して、外枠のある塗りつぶされた四角形を描画します。

void fillrectangle{
int left,
int top,
int right,
int bottom
};

#4. 複数のボタンがプログラムをどのように改善できるか

ボタンが複数ある場合、上記のプログラムではボタンがランダムに点滅することがわかりますが、次のようにプログラムを改善する必要があります。

MOUSEMSG m;
    int now = 0, now2 = 0, now3 = 0, now4 = 0;
    int c1 = 1, c2 = 1, c3 = 1, c4 = 1, k1 = 1, k2 = 1, k3 = 1, k4 = 1;
    while (1)
    {
        m = GetMouseMsg();
        setrop2(R2_XORPEN);
        if (m.uMsg == WM_MOUSEMOVE)
        {
            if (m.x > 800 && m.x < 1000 && m.y < 250 && m.y > 200 && (c1 == 0 || k1 == 1))
            {
                now = 1; k1 = 0; c1 = 1;
                fillrectangle(800, 200, 1000, 250);
            }
            if (now != 0 && (m.x < 800 || m.x > 1000 || m.y > 250 || m.y < 200))
            {
                now = 0; c1 = 0;
                fillrectangle(800, 200, 1000, 250);
            }
            if (m.x > 800 && m.x < 950 && m.y < 367 && m.y > 317 && (c2 == 0 || k2 == 1))
            {
                now2 = 1; k2 = 0; c2 = 1;
                fillrectangle(800, 317, 950, 367);
            }
            if (now2 != 0 && (m.x < 800 || m.x > 950 || m.y > 367 || m.y < 317))
            {
                now2 = 0; c2 = 0;
                fillrectangle(800, 317, 950, 367);
            }
            if (m.x > 800 && m.x < 1000 && m.y < 484 && m.y > 434 && (c3 == 0 || k3 == 1))
            {
                now3 = 1; k3 = 0; c3 = 1;
                fillrectangle(800, 434, 1000, 484);
            }
            if (now3 != 0 && (m.x < 800 || m.x > 1000 || m.y > 484 || m.y < 434))
            {
                now3 = 0; c3 = 0;
                fillrectangle(800, 434, 1000, 484);
            }
            if (m.x > 800 && m.x < 900 && m.y < 601 && m.y > 551 && (c4 == 0 || k4 == 1))
            {
                now4 = 1; k4 = 0; c4 = 1;
                fillrectangle(800, 551, 900, 601);
            }
            if (now4 != 0 && (m.x < 800 || m.x > 900 || m.y > 601 || m.y < 551))
            {
                now4 = 0; c4 = 0;
                fillrectangle(800, 551, 900, 601);
            }
        }

ここには 4 つのボタンがあり、パフォーマンスをより安定させるために k シリーズ変数が追加されています。

*結論:

これらが私が共有したいヒントです。成功することを願っています (doge)。この方法は面倒かもしれませんが、シンプルで分かりやすいので、手放していただければと思います。ハハハッハッハ

おすすめ

転載: blog.csdn.net/m0_73747975/article/details/128687664