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 available in GDI32.dll , but confused on how to integrate GDI32.dll with my vc code. can you suggest some good solution?
To create a Windows desktop project in Visual Studio 2017In the New Project dialog box, in the left pane, expand Installed > Visual C++, then select Windows Desktop. In the middle pane, select Windows Desktop Wizard. In the Name box, type a name for the project, for example, DesktopApp. Choose OK.
To draw a line in Windows GDI+ you need a Graphics object, a Pen object, and a Color object. The Graphics object provides the DrawLine method, and the Pen object holds attributes of the line, such as color and width. The address of the Pen object is passed as an argument to the DrawLine method.
The Windows Desktop Wizard replaces the Win32 Application Wizard in Visual Studio 2017 and later. The wizard allows you to create any of four types of C++ projects (listed in the heading in the table below). In each case, you can specify additional options that are appropriate for the type of project you open.
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With