Kezdőoldal » Számítástechnika » Programozás » C++-ban hogyan lehet megcsinál...

C++-ban hogyan lehet megcsinálni, hogy az egér egy kiválasztott színű pixelre kattintson?

Figyelt kérdés
Azt szeretném elérni hogy ha pl. egy narancssárga pixel előjön a kijelzőn akkor a program arra kattintson vagy legalább a pixel fölé vigye az egeret.
2011. dec. 11. 15:34
 1/1 anonim ***** válasza:
100%

Szia!


Elég kevés információt adtál meg. Az első legfontosabb kérdés,hogy milyen operációs rendszer. Azért fontos,mert itt eseménykezelésről van szó,az pedig eltérő.


Windows alatt igen könnyű a dolog.


#include <iostream>

#include <windows.h>


using namespace std;


int main()

{

HDC hDC = GetDC(HWND_DESKTOP);

COLORREF rgb;

POINT p;


//Definiáld a keresett pixel RGB színkódjait(0-255)

int defR = ...;

int defG = ...;

int defB = ...;


//Mivel a COLORREF 0x00bbggrr alakú színkódot ad

//ezért a lekérdezett színeket byte típusként kérjük le

BYTE actR, actG, actB;


//a BYTE színkódokat majd integerré castoljuk,ezekbe

//hogy a decimális értékeket hasonlítsunk össze


int actRD, actGD, actBD;


//tegyük fel,hogy tudod,hogy mekkora területen kell

//keresned ezt a területet jelöli xMin,xMax, yMin

//yMax


for(int cx = xMin; x<= xMax; cx++)

for(cy = yMin; y<=yMax; cy++)

{

p.x = cx;

p.y = cy;


//lekérdezzük az aktuális pont színkódját

rgb = GetPixel(hDC, p.x, p.y);


//szétszedjük

//hozzáteszem közvetlen is lehetne int lekérni

actR = GetRValue(rgb);

actG = GetGValue(rgb);

actB = GetBValue(rgb);


//Mehet intbe decimális érték végett

actRD = (int)actR;

actGD = (int)actG;

actBD = (int)actB;


//egyszerű összehasonlítás

if(defR == actRD && defG == actGD...)

{

SetCursorPos(p.x,p.y);

break;

}

}

}


Nem hatékony megoldás a területvizsgálás,de ez is egy módja. A kódot kiegészítve átírva már egyszerűen feladatspecifikusan is megoldhatod.

A Linux,akkor abban is tudok segíteni.

2011. dec. 13. 12:40
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!