» Utilizator
LAMP
» Parteneri» De citit» Recomandari» Taskuri securitate » Statistici
  • 65486 de mesaje.
  • 7732 de topicuri.
  • 1230 de utilizatori.
  •  
  • Joistestisket8 e ultimul utilizator inregistrat.
[Detalii]

 

| |
Pagini: [1]
Print

Draw on top [410 afisari]

Th3 P!mp
*


Mesaje: 253
OfflineOffline


Buna este vreo metoda de a desena pixeli peste orice fereastra, direct pe ecran(sa zicem ca vrei sa desenezi diagonala monitorului cu verde ... ceva de genu')

Nu cam am timp sa caut ca sunt la lucru hee hee

Mersi, o zi placuta
Logged
18-06-2009, 09:01 Twitt ::
Claudiu
*


Mesaje: 1543
OfflineOffline

WWW

Ma gandesc ca sunt metode care sa faca ce vrei tu, dar ar fii doua alternative (asa cum le vad eu acum).

1. Iei screenshot si te joci cu ea in full-screen
2. Fullscreen/Transparent window

Primul lucru la care m-am gandit au fost jocurile alea mai vechi unde puteai sa nenorocesti ecranul cu diverse unelte Tongue

Stiu ca mai erau si programele cu ninsoare pe ecran care se aduna pe ferestre etc., dar presupun ca asta tine de API-ul de Windows...
Logged

18-06-2009, 09:06 Twitt ::
DarkByte



Mesaje:

Nu stiu cum se face in C++ / C#, dar in Delphi e chiar simplu.

Aici ai un exemplu, poate poti face niste analogii. Sper sa-ti fie de folos Smile

Bafta
Logged
18-06-2009, 09:11 Twitt ::
Claudiu
*


Mesaje: 1543
OfflineOffline

WWW

Canv.Handle := GetWindowDC(0);

Nice hee hee Trebuie sa fie si in C++ ceva de genul, dar nu cunosc eu API'ul de Windows Sad
Logged

18-06-2009, 09:15 Twitt ::
DarkByte



Mesaje:

GetWindowDC e API de Windows. Rezultatul (TCanvas in Delphi) pare sa fie HDC in C (Handle of Device Context, I guess).
Logged
18-06-2009, 09:20 Twitt ::
Claudiu
*


Mesaje: 1543
OfflineOffline

WWW

Pentru C#

Pentru C++, setezi prima oara o fereastra transparenta (codul e de pe MSDN)
Code:
//C++
private:
   void CreateMyOpaqueForm()
   {
      // Create a new form.
      Form* form2 = new Form();
      // Set the text displayed in the caption.
      form2->Text = S"My Form";
      // Set the opacity to 75%.
      form2->Opacity = .75;
      // Size the form to be 300 pixels in height and width.
      form2->Size = System::Drawing::Size(300,300);
      // Display the form in the center of the screen.
      form2->StartPosition = FormStartPosition::CenterScreen;

      // Display the form as a modal dialog box.
      form2->ShowDialog();
   }

Apoi faci fereastra allways on top (de pe CodeGuru)
Code:
void CTopDlgDemoDlg::StayOnTop() const
{
 CRect rect;

 // get the current window size and position
 GetWindowRect( rect );

 // now change the size, position, and Z order
 // of the window.
 ::SetWindowPos(m_hWnd ,       // handle to window
                HWND_TOPMOST,  // placement-order handle
                rect.left,     // horizontal position
                rect.top,      // vertical position
                rect.Width(),  // width
                rect.Height(), // height
                SWP_SHOWWINDOW // window-positioning options);
}

Cel putin asta e principiul, sunt la lucru acum si nu am timp sa testez, hope this helps
Logged

18-06-2009, 09:42 Twitt ::
Th3 P!mp
*


Mesaje: 253
OfflineOffline


hmm ...  Thinking
daca desenez oriunde pe ecran oare va trebui sa sterg si sa redesenez daca trebuie animatie sau sa schimb pozitia ... si windowsu' va sti sa isi redeseneze componentele .. hee hee cred

mai multe deseara cand ajung pe acasa
Mersi tuturor  Big hug Peace sign
Logged
18-06-2009, 09:43 Twitt ::
payne
*


Mesaje: 1313
OnlineOnline

WWW

http://bytes.com/groups/net-c/263740-draw-directly-screen
Logged


WIK-What I Know

18-06-2009, 09:51 Twitt ::
Claudiu
*


Mesaje: 1543
OfflineOffline

WWW

One more thing, in timp ce "goagoluiam" am dat peste cineva care spunea ca nu se poate desena peste ceva care deseneaza folosind hardware rendering (de obicei jocuri), in sensul ca le minimalizeaza, dar asta vei vedea in practica daca se poate sau nu.

Quote
hmm ...  Thinking
daca desenez oriunde pe ecran oare va trebui sa sterg si sa redesenez daca trebuie animatie sau sa schimb pozitia ... si windowsu' va sti sa isi redeseneze componentele .. hee hee cred

Pentru animatie faci exact cum ai face intr-o fereastra normala. Metoda cea mai simpla de animatie e sa desenezi pe un buffer, apoi pe ecran, stergi bufferul, il redesenezi si il afisezi iar pe ecran, e double buffering.
Logged

18-06-2009, 09:57 Twitt ::
Th3 P!mp
*


Mesaje: 253
OfflineOffline


Code:
#include <iostream>
#include <windows.h>

using namespace std;

HDC desktop;

void CALLBACK onTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
for(int i=0; i<500; i++)
SetPixel(desktop, i, i, 99999);
}

int main()
{
desktop = GetWindowDC(NULL);

int id;
MSG msg;

id = SetTimer(NULL, 0, 33, (TIMERPROC) onTimer);
while(true)
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
}

}

Smile
am vazut postul si am zis sa incerc sa desenez
Logged
28-06-2009, 20:40 Twitt ::
Pagini: [1]
Print
SkullBox Forum  |  Development  |  Java / C / C++ / C#  |  Topic: Draw on top