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

Работа с ресурсами

23.02.2012, 16:18. Показов 5364. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать программу с линейкой меню код такой
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
#include <windows.h>
#include <windowsx.h>
#define MI_BLUE 100
#define MI_GREEN 101
#define MI_EXIT 102
 
 
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);//Оконная функция
void OnDestroy(HWND);
void OnPaint(HWND);
void OnCommand(HWND,int,HWND,UINT);
BOOL OnCreate(HWND,LPCREATESTRUCT);
 
HBRUSH hBlueBrush,hGreenBrush;//Дескрипторы кистей фона
int sw;//Переключатель для управления фоном окна
 
Main MENU{
    POPUP "&Фон"{
        MENUITEM "&Синий",MI_BLUE
    }
}
 
 
int WINAPI WinMain (HINSTANCE hInst,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    char szClassName[]="MainWindow";
    char szTitle[]="Program";
    MSG Msg;                                    //Структура для получения сообщений Windows
    WNDCLASS wincl;                             //Структура для задания характеристик окна
    ZeroMemory(&wincl,sizeof(wincl));           //Обнудение всех членов структуры
    wincl.hInstance=hInst;                      //Дескрипртор данного приложения
    wincl.lpszClassName=szClassName;            //Имя класса окна
    wincl.lpfnWndProc=WndProc;                  //Определяем оконную процедуру для главного окна
    wincl.hIcon=LoadIcon(NULL,IDI_APPLICATION); //Стандартнаяпиктограмма
    wincl.lpszMenuName="Main";
    wincl.hCursor=LoadCursor(NULL,IDC_ARROW);
    wincl.hbrBackground=(HBRUSH)(LTGRAY_BRUSH);
    RegisterClass(&wincl);                      //Регистрация класса окна
 
    HWND hwnd=CreateWindow(szClassName,szTitle, //Класс и заголовок окна
                    WS_OVERLAPPEDWINDOW,100,100,500,300,//Стиль окна, координаты и размеры
           HWND_DESKTOP,NULL,hInst,NULL);
 
    ShowWindow (hwnd, nCmdShow);//Функция показа окна
 
    //Цикл обнаружения сообщений
    while(GetMessage(&Msg,NULL,0,0))//Если есть сообщение то передать его
    {
       DispatchMessage(&Msg);
    }
   return 0;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
        HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
        HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
        HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
        default:
            return DefWindowProc(hwnd,msg,wParam,lParam);
    }
}
void OnDestroy(HWND){
    PostQuitMessage(0);
}
void OnPaint(HWND hwnd){
    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hwnd,&ps);
    if(sw==1) FillRect(hdc,&ps.rcPaint,hBlueBrush);
    EndPaint(hwnd,&ps);
}
 
BOOL OnCreate(HWND,LPCREATESTRUCT){
    hBlueBrush=CreateSolidBrush(RGB(100,100,255));
    hGreenBrush=CreateSolidBrush(RGB(100,255,100));
    return TRUE;
}
void OnCommand(HWND hwnd,int id,HWND,UINT){
    switch(id){
        case MI_BLUE:
            sw=1;
            InvalidateRect(hwnd,NULL,TRUE);
        break;
    }
}
выдается ошибка: `Main' does not name a type. с чем это связано? Работаю в Code::Blocks
И еще вопрос по поводу ресурсов: я знаю что часть кода:
C++
1
2
3
4
5
Main MENU{
    POPUP "&Фон"{
        MENUITEM "&Синий",MI_BLUE
    }
}
должна быть в файле с расширением .res Я делал так в Code::Blocks я не нашел способа сделать файл с таким расширением поэтому я взял программку ResEdit и с помощью нее сделал пустой файл. и уже в Code::Blocks добавил этот файл в проект и написал код меню. - так вообще правильно или нет? Но влюбом случае у меня была все та же ошибка и я на всякий случай перенес ее в основной файл.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2012, 16:18
Ответы с готовыми решениями:

Работа с ресурсами файла
Моя задача написать программу в среде Builder C++ которая будет изменять версию заданного файла (например dll). Я разобрался в функцией...

Работа с ресурсами: извлечение файла на жесткий диск
Господа у меня в программе в ресурсах лежит файл .exe каким образом я могу его извлеч на жёсткий диск ? Примного буду благодарен за...

Где почитать о работе с ресурсами в WinAPI и Visual Studio?
Интересует работа с .gif и картинками. Хочу научиться добавлять их в приложение и уметь выгружать файлом и использовать иначе.

4
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
24.02.2012, 02:20
Не знаю как там насчет создания res-файлов в Code::Blocks, не работал в нем. Но, возможно, там можно создать файл .rc - файл проекта ресурсов. Тогда туда и надо вставлять этот код.
И вместо wincl.lpszMenuName="Main" напишите wincl.lpszMenuName=MAKEINTRESOURCE(Main) .
0
 Аватар для MAnton
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
24.02.2012, 16:34  [ТС]
не помогает если wincl.lpszMenuName="Main" заменить на wincl.lpszMenuName=MAKEINTRESOURCE(Main) то выдается ошибка
Each undeclared identifier is reported only once for each function it appears in.

и еще такой вопрос чем .rs отличается от .res?
0
Ni-san
17.06.2012, 11:24
чем .rs отличается от .res?
не .rs, а .rc - это неоткомпилированный файл ресурсов, доступный для редактирования. .res - уже откомпилированный и готовый для использования.

`Main' does not name a type
- возможно, есть смысл изменить название. Все-таки 'main' - зарезервированное слово
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
17.06.2012, 11:41
Цитата Сообщение от Ni-san Посмотреть сообщение
возможно, есть смысл изменить название. Все-таки 'main' - зарезервированное слово
main - зарезервированное слово, Main - нет. Не надо ничего менять, достаточно просто правильно оформить RC-файл:

myrc.rc
Code
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
#include "resource.h"
 
Main MENU DISCARDABLE
BEGIN
  POPUP "&Фон"
  BEGIN
    MENUITEM "&Синий", MI_BLUE
  END
END
в файле resource.h за-define-ить Main и MI_BLUE, скажем, так:

C++
1
2
#define Main 102
#define MI_BLUE 105
, добавить к проекту myrc.rc, и работать с меню:

C++
1
2
3
// ...
wincl.lpszMenuName=MAKEINTRESOURCE(Main);
// ...
. Да, у меня Code::Blocks, скопировал эти отрывки кода из работающего приложения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2012, 11:41
Помогаю со студенческими работами здесь

Где почитать как пользоваться ресурсами при проектировании GUI
Где почитать как пользоваться ресурсами при проектировании GUI не могу найти информацию о том как пользоваться ресурсами в vs2010 при...

Работа с ресурсами.
Какая функция отвечает за удаление ресурса из exe проги во время её работы или по завершению работы? Ресурс достаю так: ...

Работа с ресурсами
Всем доброго времени суток, с наступившим новым годом! Есть проблема: Я создал две процедуры, первая считывает из файла в ресурсах,...

Работа с ресурсами
Такой вопрос - например, я &quot;засунул&quot; базу данных в ресурсы, как только программа запускается, эта база сохраняется на диск рядом с...

Работа с ресурсами
Вообщем вся картина на картине :) Вот Main.cpp void error(char code) { cout &lt;&lt; &quot;Error: &quot; &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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