draw on desktop using visual c++

前端 未结 1 780
执笔经年
执笔经年 2021-02-06 08:54

I am writing an opencv application to draw using laser beam using visual studio VC++ console application. I want to draw lines on desktop. I know that the drawing functions are

相关标签:
1条回答
  • 2021-02-06 09:10

    The code below draws a blue rectangle on the desktop.

    #include <iostream>
    #include <Windows.h>
    
    int main() {    
    
        /* hide console window */
        ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
    
        /* Calling GetDC with argument 0 retrieves the desktop's DC */
        HDC hDC_Desktop = GetDC(0);
    
        /* Draw a simple blue rectangle on the desktop */
        RECT rect = { 20, 20, 200, 200 };
        HBRUSH blueBrush=CreateSolidBrush(RGB(0,0,255));
        FillRect(hDC_Desktop, &rect, blueBrush);
    
        Sleep(10);
        return 0;
    }
    

    Just for fun. A Mandelbrot fractal drawn directly on the desktop.

    #define MAGNITUDE_CUTOFF 100
    #define NUMCOLOURS 256
    #define WIDTH 640
    #define HEIGHT 200
    #define UP 72
    #define DOWN 80
    #define LEFT 75
    #define RIGHT 77
    #define SPACE 32
    #define ENTER 13
    #define ESCAPE 27
    #define TAB 9
    #define INSERT 82
    
    #include <stdio.h>
    #include <time.h>
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int col(int x, int y);
    void fract(void);
    
    char op;
    int ch,max_iterations;
    double xmin = -2.10, xmax = 0.85, ymin = -1.5 , ymax = 1.5;
    double  width_fact, height_fact;
    
    
    int main(){
    
        COLORREF color = RGB(255,0,0); // COLORREF to hold the color info
    
    
        SetConsoleTitle("Pixel In Console!"); // Set text of the console so you can find the window
        HWND hwnd = FindWindow(NULL, "Pixel In Console?"); // Get the HWND
        HDC hdc = GetDC(hwnd); // Get the DC from that HWND
    
        width_fact = (xmax-xmin)/WIDTH;
        height_fact = (ymax-ymin)/HEIGHT;
    
    
        for( int x = 0 ; x < 640 ; x++ ){
            for (int y = 0;y < 480; y++ ){
    
             int blue = (col(x,y) & 0x0f) << 4;
             int green =    (col(x,y) & 0xf0) << 0;
             int red =  (col(x,y) & 0xf00) >> 4;
             SetPixel(hdc, x,y, RGB(red,green,blue));
    
            }
        }
    
    
        system("pause");
    
        ReleaseDC(hwnd, hdc); // Release the DC
        DeleteDC(hdc); // Delete the DC
        return(0);
    }
    
    void fract(){
       int x,y,icount=0;
       width_fact = (xmax-xmin)/WIDTH;
       height_fact = (ymax-ymin)/HEIGHT;
    
       for (y=0;y<HEIGHT;y++){
           for (x=0;x<WIDTH;x++){
              // setcolor(col(x,y));
              // gotoxy(x+3,y+3);printf("Û");
    
           }
    
       }
       //setcolor(15);
    }
    
    
    int col( int x, int y){
        int n,icount=0;
        float p,q,r,i,prev_r,prev_i;
    
        p= (( (float)x ) * width_fact) + (float)xmin;
        q= (( (float)y ) * height_fact) +(float)ymin;
    
        prev_i = 0;
        prev_r = 0;
    
        for (n=0; n <= NUMCOLOURS; n++){
            r = (prev_r * prev_r) - (prev_i * prev_i) +p;
            i = 2 * (prev_r * prev_i) +q;
    
            if (( r*r + i*i) < MAGNITUDE_CUTOFF ){
                prev_r = r;
                prev_i = i;
            }
            else {
                return n;
            }
        }
        return n;
    }
    
    0 讨论(0)
提交回复
热议问题