Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Не создается окно произвольной формы

19.09.2011, 23:07. Показов 1059. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
после компиляции просто что-то работает но ничего не показывает.я уверен что это связано с регионами. но что там?
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <Windows.h> //библиотека WinApi
#include <tchar.h>
 
#define WIN_CLASS_NAME _T("winclass1")
 
HINSTANCE     g_hInst;
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    MSG msg;//описание приложения
    g_hInst = hInstance;//дескриптор приложения
 
    WNDCLASSEX wcex;
    static TCHAR szWindowClass[]=_T("win32app");
    static TCHAR szTitle[]=_T("T");
    wcex.cbSize = sizeof(WNDCLASSEX);//контроль версий структур
    wcex.style = CS_HREDRAW | CS_VREDRAW;//стили класса перерисовываются по диагонали или вертикали
    wcex.lpfnWndProc = (WNDPROC)WndProc;//указатель на функцию обработчик
    wcex.cbClsExtra = 0;//дополнительная память под класс
    wcex.cbWndExtra = 0;
    wcex.hInstance = g_hInst;
    wcex.hIcon = LoadIcon(NULL,IDI_APPLICATION);//стандартная иконка
    wcex.hCursor = LoadCursor(NULL,IDC_ARROW);//стандартная стрелка
    wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//цвет фона рабочей области окна
    wcex.lpszMenuName = NULL;//меню окна
    wcex.lpszClassName = WIN_CLASS_NAME;//название класса окна
    wcex.hIconSm = NULL;//маленькая иконка окна
 
    RegisterClassEx(&wcex);
 
 
    while(GetMessage(&msg,NULL,0,0))
    {
       TranslateMessage(&msg);
       DispatchMessage(&msg);//отправляет сообщения в функцию обработки окна
    }
 
    BITMAP bm;
    HBITMAP hMask=(HBITMAP)LoadImage(NULL,_T("Noname.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);//грузим битмап картинку
    GetObject(hMask,sizeof(bm),&bm);
    BYTE *pMaskBits=(BYTE*)bm.bmBits;//приводим LPVOID к BYTE
    int pixel;
    int xStart=-1;
    HRGN hRgn=0;
    for(int i=0;i<bm.bmHeight;i++)
    {
       for(int j=0;j<bm.bmWidth;j++)
       {
          pixel=(pMaskBits[i*bm.bmWidthBytes+j]);
 
          if (pixel!=0)//черный цвет - 0
          {
             if (xStart == -1)
                xStart=j;
          }
          else
          {
             if (xStart!=-1)
             {
                if (hRgn==0)
                    hRgn=CreateRectRgn(xStart,bm.bmHeight-i-j,j,bm.bmHeight-i);
                else
                    CombineRgn(hRgn,hRgn,CreateRectRgn(xStart,bm.bmHeight - i - 1,j,bm.bmHeight - i),RGN_OR);
                xStart=-1;
             }
          }
          if (j==bm.bmWidth-1 && xStart!=-1)
          {
             if (hRgn == 0)
                hRgn=CreateRectRgn(xStart,bm.bmHeight- i - 1,j+1,bm.bmHeight-i);
             else
                CombineRgn(hRgn,hRgn,CreateRectRgn(xStart,bm.bmHeight-i-1,j+1,bm.bmHeight-i),RGN_OR);
             xStart=-1;
          }
       }
    }
    HWND hWnd=CreateWindow(szWindowClass,szTitle,WS_POPUP,100,100,bm.bmWidth,bm.bmHeight,NULL,NULL,hInstance,NULL);
    SetWindowRgn(hWnd,hRgn,TRUE);
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
    return (int)msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message)
    {
    case WM_LBUTTONDOWN:
       MessageBox(hWnd,_T("Hammertime!"),_T("MC HAMMER"),MB_OK);
       break;
    case WM_KEYDOWN:
       if (wParam == VK_ESCAPE)
          DestroyWindow(hWnd);
       break;
    case WM_DESTROY:
       PostQuitMessage(0);
       break;
    default:
       return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
}

Не по теме:

Файл переименовал из .bmp в .jpg

Миниатюры
Не создается окно произвольной формы  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2011, 23:07
Ответы с готовыми решениями:

окно произвольной формы
Добрый день.Делаю окно из прямоугольника с закругленными краями.Код взял из учебника.Работает. Непонятно,как работает строчка №9. //...

Создается окно и тут же закрывается. Как заставить окно оставаться рабочим открытым?
Как заставить окно оставаться рабочим открытым? Скопировал с одного исходника код (с++ WinApi) для создания окна. И оно сразу...

Не создается окно
вот регистрация класса окна WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, ...

1
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 209
20.09.2011, 09:12
Artishok, во-первых окно должно создаваться после регистрации класса окна и до входа в цикл обработки сообщений GetMessage. Всё, что связано с рисованием в окне, должно происходить в оконной процедуре WndProc при обработке сообщения WM_PAINT, а не в главной функции. Короче, почитайте лучше нормальную литературу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2011, 09:12
Помогаю со студенческими работами здесь

Не создается диалоговое окно
Всем привет! Помогите новичку. Работаю в Dev-Cpp 5.11. Пытаюсь создать простое диалоговое окно с кнопкой, но не получается, появляется...

Не создается окно CreateWindow
#include &lt;windows.h&gt; #include &lt;stdlib.h&gt; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM Reg(HINSTANCE, LPCTSTR); ...

Не создается дочернее окно
Почему не создается дочернее окно? HINSTANCE hInstance; HWND hDataWin; // Дескриптор...

WinApi Не создается окно
Не знаю что произошло, но через пару запусков программы перестало создаваться окно. #include &lt;Windows.h&gt; const char...

Не создается всплывающее окно
У меня абсолютно непонятная ошибка. Я не могу создать всплывающее окно. Я вроде бы всё сделал правильно, зарегистрировал класс, использовал...


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

Или воспользуйтесь поиском по форуму:
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru