30/09/2018, 22:20

Sử dụng kỹ thuật gì để vẽ một hình "trong suốt" trên màn hình cmd với C++?

Như tiêu đề, bữa trước em có tình cờ thấy một câu đố của một bạn trên group lập trình C/C++ và câu đố đó là viết một chương trình để có thể vẽ hay “đục” một lỗ trong suốt lên màn hình cmd như này:

Hôm nay lục lại tấm ảnh nên tò mò muốn hỏi mọi người ở đây sử dụng kỹ thuật giờ để làm được như vậy ạ?
Có thể gợi ý cho em vài từ khóa để tìm hiểu thì tốt quá.
Em cám ơn.

Xuân Hòa viết 00:25 ngày 01/10/2018

có vẻ khó nhỉ… hic.

X viết 00:34 ngày 01/10/2018

Theo kinh nghiệm 8 năm vọc vạch và soi nhiều bức ảnh thì đây là kỹ thuật… photoshop
Có lẽ nhiều người tin vì 2 chi tiết này có vẻ hợp lý, nhưng chẳng có gì khó để làm cả
Hình tròn rất có vấn đề, rìa trên và rìa phải có dư 2 vạch trắng, ảnh này nhất định đã được chỉnh sửa

viết 00:36 ngày 01/10/2018

làm được đó WinGDI. Cái thư viện này cũ kĩ lắm rồi

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

int main()
{
    HWND hWnd = GetConsoleWindow();

    if (hWnd)
    {
        SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
        SetLayeredWindowAttributes(hWnd, RGB(255,255,0), 0, LWA_COLORKEY);
        HDC hdc = GetWindowDC(hWnd);
        if (hdc)
        {
            HBRUSH yellowBrush = (HBRUSH)CreateSolidBrush(RGB(255,255,0));
            HPEN redPen = (HPEN)CreatePen(PS_SOLID, 2, RGB(255,0,0));
            HBRUSH oldbrush = (HBRUSH)SelectObject(hdc, GetStockObject(NULL_BRUSH));
            SelectObject(hdc, yellowBrush);
            SelectObject(hdc, redPen);

            Ellipse(hdc,90,90,150,150);

            SelectObject(hdc, oldbrush);
        }
    }
}

lệnh compile link trên codeblocks (nhớ link với gdi -lgdi32 là được)

g++.exe -Wall -fexceptions -O2 -std=c++14  -c C:\Users\tri\Dropbox\Cpp\HoleInConsole\main.cpp -o obj\Release\main.o
g++.exe  -o bin\Release\HoleInConsole.exe obj\Release\main.o  -lgdi32 -s  

(code trên vọc thôi chứ còn phải giải phóng pen, brush, hdc gì tùm lum nữa)

stackoverflow.com
adoss

Creating a transparent window in C++ Win32

c++, winapi, gdi+, transparency
asked by adoss on 03:36PM - 19 Oct 10

với google ở đâu nữa quên rồi

vọc từ hôm qua tới giờ gu gồ mới ra

X viết 00:30 ngày 01/10/2018

Kinh thế =)) Xem ra mình còn non kém quá (Không nghĩ có thể làm được điều này trên màn hình console)

viết 00:21 ngày 01/10/2018

hôm qua mình vọc được vẽ hình tròn màu vàng viền đỏ, gu gồ mãi mà ko thấy cách nào set color key màu vàng cho cái handle hdc hay hwnd gì đó, hôm nay thế nào 1 phát lại gu gồ ra

Xuân Hòa viết 00:22 ngày 01/10/2018

Tuyệt vời!!!, em cám ơn ạ :))

Văn Dương viết 00:26 ngày 01/10/2018

Thánh Sốp đây rồi =]].

Bài liên quan
0