![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| S.A.G. |
|
||||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
WinAPI, MVS 8
Достаточно ли для отображения меню главного окна выполнить следующие действия:
Resource файл:
Хидер файла ресурсов:
В готовом приложении меню нет. Почему? Еще такой вопрос. В созданном .rc и сгенерированном хидере среда создает кучу "левого" кода непонятного содержания и смысла. Как-то невдобно себя чувствую глядя на это безобразие. Стоит ли в этом разбираться или оное нужно принять как должное (системные настройки среды или на что-то в этом духе списать чтобы успокоить взбунтовавшийся разум)? Понимаешь, что рано или поздно может выплыть какой-нибудь нюанс связанный с этим кодом.. Меня как-то раздражает любой "левый" код в такого рода средах. Это сообщение отредактировал(а) S.A.G. - 20.8.2007, 21:42 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||||
|
|||||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Ммда.. везде эти макросы, а как заглянешь в них..
А в чем состоит принципиальная разница? Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 14:36 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Чем так принцыпиально отличается "IDR_MENU1" от MAKEINTRESOURCE(IDR_MENU1)?
lpsz расшифровывается как указатель на строку. Однако даже если я вместо "IDR_MENU1" подставлю char id[] = "IDR_MENU1" всеравно меня не спасет.
Скажите, кто-то понимает зачем это нужно или все просто принимают "на веру"? Сначала приводится к WORD-у (и зачем эти макрозамены?) Потом к непонятному ULONG_PTR И наконец в LPSTR Читаем Финогенова: LPSTR, PSTR - Строка символов Windows с завершающим нулем; а id тогда что? Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 17:23 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 4 Всего: 29 |
||||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
S.A.G., иногда используют вместо MAKEINTRESOURCE()
код говорит сам за себя - грубо говоря, рассматривать число IDR_MENU1 как адрес строки идентифицирующей ресурс. Признаюсь, что конкретнее я разобраться даже не пытался - не вижу необходимости Добавлено через 9 минут и 56 секунд это ты про что? Вот про это:
так ведь написано: // Next default values for new objects но вникать в это смысла нет особого, можно считать служебной информацией для редактора |
||||
|
|||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Damarus, имелось ввиду id подставить а не всю строку, я же выделил его. И я знаю что такое макрорасширение.
Какая разница между типами LPSTR и char *? Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 18:11 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
||||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Тогда почему оно не работает с просто "IDR_MENU1"? Это же строковый литерал.
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
||||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
lpszMenuName требует LPCSTR
Если.. LPSTR и char * одно и тоже то.. почему если я напишу в определениях char id[] = "IDR_MENU1" и подставлю.. .. вот так: lpszMenuName = id, оно не работает..? В Финогенове вообще написано lpszMenuName = "IDR_MENU1" и заявлено что будет работать но нифига не пашет не в первом ни во втором случае. А вот пресловутый макрос MAKEINTRESOURCE() решает все проблемы и обнаруживает непостижимую разницу между char * и LPSTR. Или у меня уже совсем крыша съехала? А все толдычут что IDR_MENU1 это число и все, да знаю, знаю я! Это сообщение отредактировал(а) S.A.G. - 23.8.2007, 00:03 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
||||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
елки-палки. Два варианта:
и
в первом случае под строковый литерал на этапе компиляции будет выделена память, затем в процессе выполнения адрес этого участка будет записан в pA во втором случае мы четко говорим, что строка расположена по адресу B. Чувствуешь разницу? Добавлено через 1 минуту
честно говоря не читал его... Добавлено через 6 минут и 35 секунд а может не в процессе... но не суть
может у него есть основания так полагать |
||||||||||
|
|||||||||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
бл...., забыл совсем что в кавычках макросы не макросы
Оно? Если подставляю "101" не работает всеравно. :( Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 18:42 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
||||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Если подставить "101" всеравно меню не отображается.
В чем разница между (char *)101 и "101"? Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 18:48 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
а если подставить (LPSTR)101 или reinterpret_cast<LPSTR>(101)? вот пример накидал, может прояснит:
|
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
(char *)101 работает
Попробуй объяснить чем отличается "101" от (char *)101 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
вот: и пример в комплекте: если тут не понятно то спрашивай по тексту, что именно. |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
char * a = "101", имеем последствие - в a содержится адрес 1
char * a = (char *)B == char * a = (char *)101... привести целую константу к типу "указатель на чар"... компилятор разместит строку в память а адрес 1 присвоит a? т.е. когда мы просто пишем "101" оно в памяти не размещено, а когда (char *)101 то строка "101" помещается в память? Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 19:56 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
да ничего не помещается, просто мы явно указываем адрес строки = 101, или 0x00000065(hex). Те говорим: "вот по этому адресу лежит строка" (точнее символ или их последовательность), откуда она там возьмется науке неизвестно... |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
если wc.lpszClassName <= 0xFFFF, то это ID ресурса,
если wc.lpszClassName > 0xFFFF, то это указатель на LPCTSTR |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
А разве этот ID не нужен нам как число..? Система генерирует не случайный адрес (101)?
Я поначалу не въехал в преобразование типов... -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
zkv, ты сам немного запутался... MAKEINTRESOURCE, как уже тут неоднократно упоминалось, просто приведение типа к требуемому прототипами соотв.функций. а передается просто номер - не адрес строки, а просто число. а так как адресов меньше 0xFFFF нет, то функция может четко определить, номер ресурса ей приплыл или адрес строки с именем ресурса. |
|||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
ну это уже речь идет об интерпретации системы полученных данных, верно? тогда следует заметить, что это верно: только система не пытается обратиться к памяти по этому адресу, а рассматривает его (сам адрес) как ID, при условии указанном 586 Добавлено через 3 минуты и 32 секунды нет, я возможно только отошел от темы, процитирую себя:
Вообще то объяснял, что чем отличается "101" от (char *)101 |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
значит это уже я запутался, читая - витиевато излагаете...
|
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
уууууууууууу блииииииииииин
Это сообщение отредактировал(а) S.A.G. - 21.8.2007, 20:49 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
||||
|
||||
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Перед тем как переосмыслить все приведу цитату из книги:
Я таки считал что (char *)101 и "101" - одно и то же, и упрямо не отрывался от этого толкования. Иногда нужно ткнуть носом. Новое объяснение породило еще вполне естественный вопрос. А нафиг системе так дико извращаться, запоминая ID ресурса (целое число без знака) в форме указателя, предварительно преобразовав типы (!!!)? Не проще было бы в структуре типа WNDCLASS предусмотреть поле соотв. целого типа? И еще одно. Чем же так отличается число 101 (я непомню к какому типу компилятор C++ относит такие целочисленные константы) и адрес строки (да и вообще любой адрес). Ведь любой адрес это поидее тоже целое число? Прочитал вот это. Стало понятно почему работает пример из книги. Т.е. стало понятно что есть некоторые обстоятельства при которых так может работать.
возможно и зачем предусмотрено оба варианта. Это сообщение отредактировал(а) S.A.G. - 23.8.2007, 01:06 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
невнимательно читал... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |