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

Вопросы по GUI WINAPI

11.02.2011, 00:19. Показов 12266. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Начал изучать построение GUI средствами WINAPI и появились вопросы. Удачно создал окно и кнопку. Заметил что текст на ней очень большой. Какими функциями я могу менять размер шрифта и сам шрифт. Кнопку создаю так:
Code
1
CreateWindow("button", TEXT("My Button"), WS_CHILD |  WS_VISIBLE | BS_PUSHBUTTON, 20, 20, 150, 30, hWnd, (HMENU)3000,hInstance, NULL);
Раньше программировал на AutoIt, там был такой контрол как Label. Каким образом я могу создать подобное на WINAPI?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2011, 00:19
Ответы с готовыми решениями:

Интерфейс (GUI) в приложениях WinAPI
Собственно, вопросов несколько. Читал МСДН, в целом ясен принцип разработки на WinAPI, к тому же было проще, когда юзал всякие...

GCC + WinApi. Русский текст в GUI-приложении
Здравствуйте! Как заставить WinApi корректно выводить русский текст в заголовках окна, MessageBox'ах и т.д. TEXT(), L"test", _T()...

Какая разница между WinApi, GUI application?
какая разница между WinApi , GUI application

36
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
15.05.2011, 22:28
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от exkilla Посмотреть сообщение
Прикол в размере бинарника, не надо таскать с собой дополнительные dll-ки
Ну мелкий бинарник без использования runtime не обязательно писать на чистом API.
Во вложении исполняемый файл проги, в которой нет непосредственных вызовов WinAPI, и она будет работать даже на Windows 95 без установки дополнительных компонентов и библиотек. Runtime естествено не используется.
Более того, исходник проги (10 строк кода) без его модификации, можно скомпилировать не только под Windows, но и под Linux, MacOS X и AmigaOS. А WinAPI не обеспечит такой переносимости.
Вложения
Тип файла: rar WinProg.rar (6.7 Кб, 48 просмотров)
1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
15.05.2011, 22:35  [ТС]
PB, что использовалось при написании данной программы? Какая обертка для winapi использовалась? =)
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
15.05.2011, 22:53
Использовался не C++, а PureBasic.
К слову, если бы написать эту программу полностью на WinAPI, то размер исполняемого файла был бы примерно равен 3 КБ.
1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
15.05.2011, 23:04  [ТС]
PB, спасибо за информацию. На досуге посмотрю =)
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
15.05.2011, 23:32
Цитата Сообщение от PB Посмотреть сообщение
размер исполняемого файла был бы примерно равен 3 КБ.
Ммм, 3 не получилось, вышло 4 КБ.
Исходник полностью на WinAPI.
Code
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
Procedure WindowCallback(Window, Message, wParam, lParam)
  Shared hButton
  
  Select Message
    Case #WM_COMMAND
       If hButton = lParam
         MessageBox_(Window,"Ну что ж за день сегодня такой?"+Chr(10)+"Все меня закликали бедную!","Бедная я кнопко!",64)
       EndIf
    Case #WM_CLOSE 
      DestroyWindow_(Window) 
    Case #WM_DESTROY 
      PostQuitMessage_(0) : Result  = 0 
    Default 
      Result  = DefWindowProc_(Window, Message, wParam, lParam) 
  EndSelect 
  
  ProcedureReturn Result 
EndProcedure 
 
InitCommonControls_()
DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)
 
WindowClass.s    = "PureBasic_Win" 
wc.WNDCLASSEX 
wc\cbsize        = SizeOf(WNDCLASSEX) 
wc\lpfnWndProc   = @WindowCallback() 
wc\hCursor       = LoadCursor_(0, #IDC_ARROW) 
wc\hbrBackground = #COLOR_WINDOW
wc\lpszClassName = @WindowClass 
RegisterClassEx_(@wc) 
 
Win_x=GetSystemMetrics_(#SM_CXSCREEN)/2-100
Win_y=GetSystemMetrics_(#SM_CYSCREEN)/2-50
 
hWndMain  = CreateWindowEx_(0, WindowClass, "Мелкая прога API", #WS_SYSMENU | #WS_MINIMIZEBOX, Win_x, Win_y, 200, 120, 0, 0, 0, 0)
 
Text.s="Бинарник этой проги довольно мелкий и не требует дополнительных DLL для своей работы"
hText=CreateWindowEx_(0,"Static", Text, #WS_CHILD | #WS_VISIBLE, 10,10,180,54, hWndMain, 0, 0, 0)
SendMessage_(hText, #WM_SETFONT, DefaultFont, 1)
 
hButton=CreateWindowEx_(0, "Button", "Типа кнопко", #WS_CHILD | #WS_VISIBLE, 100,64,80,24, hWndMain, 0, 0, 0) 
SendMessage_(hButton, #WM_SETFONT, DefaultFont, 1)
 
 
ShowWindow_(hWndMain,  #SW_SHOWDEFAULT) 
UpdateWindow_(hWndMain); 
 
While GetMessage_(msg.MSG, #Null, 0, 0 ) 
  TranslateMessage_(msg) 
  DispatchMessage_(msg) 
Wend
End
Только что проверил, бинарник запускается на "голой" Windows 95 не прося установки библиотек.
Вложения
Тип файла: rar WinProg_API.rar (2.6 Кб, 27 просмотров)
1
16.05.2011, 23:41

Не по теме:

Цитата Сообщение от PB Посмотреть сообщение
А в чем прикол писать на чистом WinAPI?
Ну так, когда его осваиваешь, пишешь на чистом WinAPI...

0
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
23.05.2011, 17:19  [ТС]
В ресурсах лежит картинка 32х32 в формате ico с именем ресурса IDI_ICON1. Покажите пожалуйста пример вывода данной картинки в окне.
0
23 / 23 / 7
Регистрация: 30.01.2009
Сообщений: 103
23.05.2011, 19:55
это можно в WinMain
C++
1
HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
А вот это в обработчик
C++
1
2
3
4
5
6
7
case WM_PAINT:
{
   hDC= BeginPaint (hwnd, &ps);
   DrawIcon(hDC, 5, 5, hIcon );
   ReleaseDC(hwnd, hDC);
  EndPaint (hwnd, &ps);
}
0
PB
23.05.2011, 21:14

Не по теме:

Цитата Сообщение от Alex90 Посмотреть сообщение
hDC= BeginPaint (hwnd, &ps);
DrawIcon(hDC, 5, 5, hIcon );
ReleaseDC(hwnd, hDC);
Хм, разве нужно освобождать контекст, полученный от BeginPaint?

0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.05.2011, 03:59
По ходу нет, EndPaint же есть.

Еще вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static HICON hIcon = NULL;
 
// это на кнопку
hIcon = (HICON)LoadImage (hInst, "IDI_ICON1", IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
InvalidateRect (hWnd, NULL, TRUE);
 
case WM_PAINT:
    {
        PAINTSTRUCT ps;
        
        BeginPaint (hWnd, &ps);
        DrawIcon (ps.hdc, 10, 10, hIcon);
        EndPaint (hWnd, &ps);
    }
    break;
0
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
24.05.2011, 04:24  [ТС]
Спасибо большое. Днем сделал так:
C++
1
2
3
        HDC DC=GetDC(hWnd);
        HICON Icon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, 0);
        DrawIconEx(DC, 0, 0, Icon, 18, 18, 0, NULL, DI_NORMAL);
Мой вариант хуже вашего?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.05.2011, 04:39
exkilla, понятия не имею.

Для начала куда это все вставлять? Или ты в общих чертах?
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
24.05.2011, 19:02
Цитата Сообщение от exkilla Посмотреть сообщение
Мой вариант хуже вашего?
Во первых, не нужно каждый раз загружать значок из ресурсов, одного раза достаточно.
Во вторых, контекст, полученный функцией GetDC, нужно освобождать функцией ReleaseDC.

Не по теме:

иначе прога будет кушать все больше и больше памяти, а затем ее навестит дядушка Глюк!



Не по теме:

Я бы эти задачу решил по проще, без юзания API, но в всех разные потребности.

Исходник моего решения задачи с иконкой в окне
Code
1
2
3
4
5
6
7
8
OpenWindow(0,0,0,200,100,"прога",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(0,80, 34, 32, 32, CatchImage(0, ?Image))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
DataSection
  Image:
  IncludeBinary "PB.ico"
EndDataSection

Вложения
Тип файла: rar Image.rar (12.4 Кб, 27 просмотров)
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.05.2011, 19:41
У меня не работает ReleaseDC, сделал на кнопку. По идее, да, должен освобождать, но с каждым нажатием только добавляется еще пара объектов. Вопрос?
C++
1
2
3
4
5
6
DC=GetDC(hWnd);
 
Icon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, 0);
DrawIconEx(DC, 50, 50, Icon, 18, 18, 0, NULL, DI_NORMAL);
DeleteDC (DC);
ReleaseDC (hWnd, DC);
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
24.05.2011, 19:48
Цитата Сообщение от Digit@ll Посмотреть сообщение
У меня не работает ReleaseDC, сделал на кнопку.
Я думаю что эта функция как раз работает, а добавляет объекты (память) функция LoadImage.
Вынеси ее в начало программы (вызывай только один раз при старте проги).

Да и DeleteDC тут явно лишняя - нужно убрать из кода.
Из ее описания:
An application must not delete a device context whose handle was obtained by calling the GetDC function. Instead, it must call the ReleaseDC function to free the device context.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.05.2011, 19:51
Цитата Сообщение от PB Посмотреть сообщение
Исходник моего решения задачи с иконкой в окне
Занятно, а на чем это?
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
24.05.2011, 19:54
Цитата Сообщение от Digit@ll Посмотреть сообщение
Занятно, а на чем это?
Это PureBasic.

Не по теме:

Кстати, тот код без правки можно компилировать под Windows, Linux, MacOS X и AmigaOS.
Если юзать WinAPI, это нереальная задача.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.05.2011, 19:54
Помогаю со студенческими работами здесь

Программа для определения функций WinAPI, вызываемых программой с GUI
Хотел бы узнать, какие функции Windows API вызывает программа с GUI. Какие программы позволяют это сделать? Хотелось бы, чтобы в программе...

MS VC++ WinApi GUI
Добрый вечер. У меня задание, сделать окно с меню, такого вида: В меню colors - red, green, white; В меню Size - x2,x3; Все...

С# + winAPI, и оптимизация.вопросы
Доброго времени. и сразу к делу.. пишу проект, с использованием API функций и параллельно учусь шарпе,но возникают трудности..(не...

Как делать GUI в Eclipse? и другие вопросы..
Доброго времени суток, господа специалисты! 1. Скачал себе Eclipse 3, но никак не пойму, как GUI в нем сделать. В нем, что нет...

GUI в делфи через WinApi
Ищу примеры gui в делфи на WinApi кто может дать ссылочки на проек и код к нему?


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

Или воспользуйтесь поиском по форуму:
37
Закрытая тема Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru