Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/46: Рейтинг темы: голосов - 46, средняя оценка - 4.63
ArcSSSS

Рисовать в Win32 как в Paint

21.05.2010, 15:43. Показов 9396. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно нарисовать прямоугольник и другие фигуры так чтобы было видно уже нарисованые фигуры через те что будут рисоватся.Тоесть надо их нарисовать прозрачными по отношению к другим фигурам. Тоесть так чтобы когда они наложились например, больший квадрат на менший, то через больший квадрат можно было увидеть менший. Или если провести сначало линию а потом нарисовать квадрат который пройдет по линии то можно было бы увидеть ету линию в квадрате и тп.... Функцйи Api Rectangle-не даст такого ефекта.Если такие функцыи API есть просьба написать.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2010, 15:43
Ответы с готовыми решениями:

Не получается рисовать больше чем одну линию в win32
Здравствуйте снова, Цель такова: надо сделать программу типа Paint. Одна из возможностей - рисовать прямую линию. Начало там, где щелкают...

Как рисовать в видеокарту?
Привем всем! Представим, что запущена какая-либо игра, могу ли я рисовать поверх изображения игры, то есть прямо в видеокарту?

Рисовать на форме без события Paint
Здравствуйте! Как можно рисовать на форме без использования события Paint. Ну типа самому написать функцию а потом ее вызывать когда...

7
КотЪ
 Аватар для Zabiyak
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
21.05.2010, 19:33
Рисуй все линии (в том числе и стороны замкнутых фигур) с помощью функции LineTo и всё будет видно.
0
ArcSSSS
22.05.2010, 08:36
Если рисовать фигуры как линии то как быть с кругом, елипсом и тд...
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 11:08
SetBkMode(hdc, TRANSPARENT) ?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
22.05.2010, 11:42
Rectangle() - прямоугольник (квадрат)
Ellipse() - эллипс (круг)
Arc() - дуга
Polyline() - или как-то так... на входе массив с вершинами - на выходе фигура
0
0 / 0 / 0
Регистрация: 22.05.2010
Сообщений: 4
22.05.2010, 12:59
Вот пример AlphaBlend (Делфи, но можно найти на любом язьике)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const
 AC_SRC_ALPHA = $50;
 
procedure DrawAlphaBlend (hWnd : HWND;  hdcwnd : HDC);
var
    Ahdc : HDC;              // handle of the DC we will create
    bf : BLENDFUNCTION;      // structure for alpha blending
    Ahbitmap : HBITMAP;      // bitmap handle
    bmi : BITMAPINFO;        // bitmap header
    pvBits : pointer;        // pointer to DIB section
    ulWindowWidth,
    ulWindowHeight : ULONG;  // window width/height
    ulBitmapWidth,
    ulBitmapHeight : ULONG; // bitmap width/height
    rt : TRect;             // used for getting window dimensions
begin
    // get window dimensions
    GetClientRect(hWnd, rt);
 
    // calculate window width/height
    ulWindowWidth := rt.right - rt.left;
    ulWindowHeight := rt.bottom - rt.top;
 
    // make sure we have at least some window size
    if ((ulWindowWidth = 0 ) and  (ulWindowHeight=0)) then
        exit;
 
    // divide the window into 3 horizontal areas
    ulWindowHeight := trunc(ulWindowHeight / 3);
 
    // create a DC for our bitmap -- the source DC for AlphaBlend
    Ahdc := CreateCompatibleDC(hdcwnd);
 
    // zero the memory for the bitmap info
    ZeroMemory(@bmi, sizeof(BITMAPINFO));
 
    // setup bitmap info
    bmi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER);
    bmi.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2);
    ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2);
    bmi.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2);
    ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2);
    bmi.bmiHeader.biPlanes := 1;
    bmi.bmiHeader.biBitCount := 32;         // four 8-bit components
    bmi.bmiHeader.biCompression := BI_RGB;
    bmi.bmiHeader.biSizeImage := ulBitmapWidth * ulBitmapHeight * 4;
 
    // create our DIB section and select the bitmap into the dc
    Ahbitmap := CreateDIBSection(Ahdc, bmi, DIB_RGB_COLORS, pvBits, 0, 0);
    SelectObject(Ahdc, Ahbitmap);
 
    bf.BlendOp := AC_SRC_OVER;
    bf.BlendFlags := 0;
    bf.SourceConstantAlpha := $7f;  // half of 0xff = 50% transparency
    bf.AlphaFormat := 0;             // ignore source alpha channel
 
    AlphaBlend(hdcwnd, trunc(ulWindowWidth/5), trunc(ulWindowHeight/5),
                    ulBitmapWidth, ulBitmapHeight,
                    Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf);
 
 
    bf.BlendOp := AC_SRC_OVER;
    bf.BlendFlags := 0;
    bf.AlphaFormat := AC_SRC_ALPHA;  // use source alpha
    bf.SourceConstantAlpha := $ff;  // opaque (disable constant alpha)
 
    AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
     trunc(ulWindowHeight/5+ulWindowHeight), ulBitmapWidth, ulBitmapHeight,
      Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight, bf);
 
    bf.BlendOp := AC_SRC_OVER;
    bf.BlendFlags := 0;
    bf.AlphaFormat := 0;
    bf.SourceConstantAlpha := $3A;
 
    AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
               trunc(ulWindowHeight/5+2*ulWindowHeight), ulBitmapWidth,
               ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
               ulBitmapHeight, bf);
 
    // do cleanup
    DeleteObject(Ahbitmap);
    DeleteDC(Ahdc);
 
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DrawAlphaBlend ( Handle, Image2.Picture.Bitmap.Handle);
end;
 
end.
0
 Аватар для Hell Knight
230 / 60 / 17
Регистрация: 11.03.2010
Сообщений: 294
23.05.2010, 11:20
еще если хочешь можно еще и попиксельно)))
1
ruslan_poks
30.03.2014, 17:19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <windows.h>
 
 
LRESULT WINAPI WindowProc(HWND hWnd, UINT message,
                          WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
     MessageBox (NULL, TEXT ("Окно для открытия"), TEXT ("Жми!!!"), 0);
 
   
  WNDCLASSEX WindowClass;     
 
  static LPCTSTR szAppName = L"OFWin";       
  HWND hWnd;                                
  MSG msg;                                  
 
  WindowClass.cbSize = sizeof(WNDCLASSEX);  
  WindowClass.style   = CS_HREDRAW | CS_VREDRAW;
  WindowClass.lpfnWndProc = WindowProc;
  WindowClass.cbClsExtra = 0;     
  WindowClass.cbWndExtra = 0;     
  WindowClass.hInstance = hInstance;          
  WindowClass.hIcon = LoadIcon(0,IDI_HAND);
  WindowClass.hCursor = LoadCursor(0, IDC_ARROW);
  WindowClass.hbrBackground = 
                          static_cast<HBRUSH>(GetStockObject(WHITENESS));
  WindowClass.lpszMenuName = 0;             
  WindowClass.lpszClassName = szAppName;    
  WindowClass.hIconSm = 0;                  
  RegisterClassEx(&WindowClass);
  hWnd = CreateWindow(
          szAppName,                       
          L"САЛАМ!! ПОЛИТЕХ!!",   
          WS_OVERLAPPEDWINDOW,             
          CW_USEDEFAULT,          
          CW_USEDEFAULT,          
          CW_USEDEFAULT,          
          CW_USEDEFAULT,          
          0,                      
          0,                      
          hInstance,              
          0                       
        );
  ShowWindow(hWnd, nCmdShow);     
  UpdateWindow(hWnd);             
  while(GetMessage(&msg, 0, 0, 0) == TRUE)  
  {
    TranslateMessage(&msg);                 
    DispatchMessage(&msg);                  
  }
 
  return static_cast<int>(msg.wParam);      
}
 
LRESULT WINAPI WindowProc(HWND hWnd, UINT message, 
                          WPARAM wParam, LPARAM lParam)
{
  HDC hDC;                       
  PAINTSTRUCT PaintSt;           
  RECT aRect;                    
  switch(message)                
  {
    case WM_PAINT:                     
      hDC = BeginPaint(hWnd, &PaintSt); 
      GetClientRect(hWnd, &aRect);
      SetBkMode(hDC, TRANSPARENT);     
      DrawText(
             hDC,                 
             L"Laba #1",
             -1,                  
             &aRect,              
             DT_SINGLELINE|       
             DT_LEFT|           
             DT_WORDBREAK);         
      EndPaint(hWnd, &PaintSt);   
      return 0;
 
    case WM_DESTROY:              
      PostQuitMessage(0);
      return 0;
 
    default:                      
                            
                      
   return DefWindowProc(hWnd, message, wParam, lParam);
  }
  
}
Добавлено через 44 секунды
Примерно так)))_KG
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2014, 17:19
Помогаю со студенческими работами здесь

Как запустить и настроить php-4.3.5-Win32 а также apache_2.0.49-win32-x86-no_ssl и mysql-5.0.0a-alpha-win ?
Здрасте... Php я решил начать изучать недавно. Уже делал странички в Html, Java. Теперь хочу научиться более серьезному языку. Вот...

Win32/SpyVoltare.A и win32/qhost как лечить?
Недавно нод начал писать про эти вирусы : Win32/SpyVoltare.A и win32/qhost Удалял файл hosts Переодически тут...

Добавить справку в Paint. Создать графический интерфейс - прототип Paint - в Delphi
добавить справку в Paint .создать графический интерфейс прототип Paint в Delfi. Помогите плиз

Открыть картинку в Paint или Paint Net если установлен
Здравствуйте. Как можно открыть картинку в программе Paint или если существует в Paint net И еще вопрос как узнать установлен ли Paint...

Эпидемия Win32.HLLW.Shadow.based (Net-Worm.Win32.Kido, W32.Downadup, Worm:Win32/Conficker)
Компания «Доктор Веб» информирует о появлении новой троянской программы, которая при запуске компьютера предлагает ввести регистрационный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru