| 
			| 
					
						| ann_nef | 
								|  | «  : 13-06-2013 06:15 »  |  | 
 
 Помогите, пожалуйста, ещё раз.
 Пишу в visual c++ 6.
 
 Нужно сделать неактивным, серым пункт меню POPUP.
 
 Как сделать тоже самое с пунктами не POPUP, я знаю.
 Примерно так:
 
 CMenu *mnu = this->GetMenu();
 mnu->EnableMenuItem(ID_step1, MF_DISABLT|MF_GRAYED);
 mnu->EnableMenuItem(ID_step2, MF_DISABLT|MF_GRAYED);
 ….
 
 У пункта меню POPUP нет ID_,  те к нему надо подобраться через номер позиции
 в меню.
 А как? Пока не нашла…
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #1 : 13-06-2013 07:34 »  |  | 
 
 думается, нужно перешуршать все элементы по позиции при помощи цикла и функции http://msdn.microsoft.com/en-US/library/kwkkkww5(v=vs.80).aspx причём, флажок BOOL fByPos пусть задаёт именно позицию, а не ID , так как в меню может быть и более одного элемента с этим ID   поэтому, перебираем все позиции и сравниваем по lpMenuItemInfo->wID |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #2 : 13-06-2013 07:35 »  |  | 
 
 Попробуй вместо ID_step1 указать позицию и добавь к флажкам MF_BYPOSITION -> MF_DISABLED|MF_GRAYED|MF_BYPOSITION |  
						| 
								|  |  
								| « Последнее редактирование: 13-06-2013 07:50 от Джон » |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #3 : 13-06-2013 07:36 »  |  | 
 
 Джон, точно ) Так проще |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #4 : 13-06-2013 07:51 »  |  | 
 
 Я только не знаю, об это в шестёрке работает. |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #5 : 13-06-2013 08:01 »  |  | 
 
 это же АПИ. Я даже так делал, помнится |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #6 : 13-06-2013 08:08 »  |  | 
 
 Вопрос в том, об флажок MF_BYPOSITION известен в 4.2 и/или какой WINVER надо для него определить. У меня ща под рукой уже ничего нет с тех времён, чтобы проверить. |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #7 : 13-06-2013 08:12 »  |  | 
 
 шестёрка понимает эти флаги /* ;win40  -- A lot of MF_* flags have been renamed as MFT_* and MFS_* flags *//*
 * Menu flags for Add/Check/EnableMenuItem()
 */
 #define MF_INSERT           0x00000000L
 #define MF_CHANGE           0x00000080L
 #define MF_APPEND           0x00000100L
 #define MF_DELETE           0x00000200L
 #define MF_REMOVE           0x00001000L
 
 #define MF_BYCOMMAND        0x00000000L
 #define MF_BYPOSITION       0x00000400L
 
 #define MF_SEPARATOR        0x00000800L
 
 #define MF_ENABLED          0x00000000L
 #define MF_GRAYED           0x00000001L
 #define MF_DISABLED         0x00000002L
 
 #define MF_UNCHECKED        0x00000000L
 #define MF_CHECKED          0x00000008L
 #define MF_USECHECKBITMAPS  0x00000200L
 
 #define MF_STRING           0x00000000L
 #define MF_BITMAP           0x00000004L
 #define MF_OWNERDRAW        0x00000100L
 
 #define MF_POPUP            0x00000010L
 #define MF_MENUBARBREAK     0x00000020L
 #define MF_MENUBREAK        0x00000040L
 
 #define MF_UNHILITE         0x00000000L
 #define MF_HILITE           0x00000080L
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #8 : 13-06-2013 08:23 »  |  | 
 
 Тогда всё в порядке. |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #9 : 13-06-2013 08:49 »  |  | 
 
 Спасибо! Всё получилось.  ЧТД.   |  
						| 
								|  |  
								| « Последнее редактирование: 13-06-2013 09:05 от ann_nef » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #10 : 13-06-2013 09:01 »  |  | 
 
 ann_nef, только вотку не пей ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #11 : 13-06-2013 09:07 »  |  | 
 
 Хорошо, буду пить красное сухое вино, плавая на т/х и любуясь с друзьями на наш красивый город - Санкт-Петербург. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #12 : 13-06-2013 09:14 »  |  | 
 
 боюсь уточнять, что такое т/х )))) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #13 : 13-06-2013 09:19 »  |  | 
 
 Всего навсего теплоход, который по каналам и рекам ходит. Обычное питерское развлечение   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #14 : 13-06-2013 09:20 »  |  | 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #15 : 29-10-2013 06:29 »  |  | 
 
 Помогите разобраться, пста.Вопрос опять возник о управлени пунктов меню.
 
 CMenu *mnu;
 mnu->EnableMenuItem(ID_Menu1, MF_GRAYED);
 
 Пункт меню с ID_Menu1 становится серым только, если щелкнуть по этому пункту меню.
 Аналогично, если сразу описать его серым, а потом сделать активным,
 то он становится доступным для выполнения,но цвет меняется после щелчка кнопкой мыши.
 
 Пыталась обновить экран UpdateData(false)/Invalidate(TRUE)/ UpdateWindow(TRUE) - не помогло.
 
 Что я упускаю?
 
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 29-10-2013 06:41 от ann_nef » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #16 : 29-10-2013 08:51 »  |  | 
 
 Наверно, что меню (или даже его пункт) - это отдельный window. |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #17 : 29-10-2013 09:09 »  |  | 
 
 Напрямую ответить - мало инфы. Что, где, как? Встречный вопрос: почему у тебя такие заморочки с меню? Ведь у тебя нормальное MFC приложение. Для работы с меню есть определённые, очень простые, функции. В частности, для твоей задачи решается просто: добавляем ф-ю обработки сообщения UPDATE_COMMAND_UI в .h void OnUpdateMyMenuItem(CCmdUI* pCmdUI); в MESSAGE_MAP ON_UPDATE_COMMAND_UI(ID_Menu1, OnUpdateMyMenuItem) в .cpp void CMyWnd::OnUpdateMyMenuItem(CCmdUI *pCmdUI){
 BOOL bEnable = условие;
 pCmdUI->Enable(bEnable);
 
 // если хочешь отобразить "чек", то это делается так
 int  nCheck = условие ? 1 : 0;
 pCmdUI->SetCheck(nCheck);
 
 }
 и всё. Тебя такой вариант не устраивает? |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #18 : 29-10-2013 09:55 »  |  | 
 
 Джон,спасибо, как всегда. за помощь. Только после твоей подсказки увидела, что есть такое сообщение UPDATE_COMMAND_UI в MFC.   |  
						| 
								|  |  
								| « Последнее редактирование: 29-10-2013 10:08 от ann_nef » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #19 : 29-10-2013 10:24 »  |  | 
 
 А как ты вобще создаёшь проект? Ведь если использовать мастер, например, SDI или MDI, то эти ф-ции уже находятся в коде и их можно "пощупать".   зы в качестве бонуса.    Если у тебя много пунктов меню, ID которых идут по порядку, и которые имеют одинаковую логику отображения, то, чтобы не писать кучу одинаковых ф-ций, можно использовать ON_UPDATE_COMMAND_UI_RANGE например: ON_UPDATE_COMMAND_UI_RANGE(ID_MENU_1, ID_MENU_75, OnUpdateMyMenuRange) где ID_MENU_1 и ID_MENU_75 - ID первого и последнего пунктов меню соответственно. |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| ann_nef | 
								|  | « Ответ #20 : 30-10-2013 05:03 »  |  | 
 
 Джон, я действительно использую мастер. В текущей задаче меню простое, всего 3 пункта.  Но, поиграюсь, чтобы осталось в памяти. Мб тогда вас и беспокоить не придётся по пустякам.   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #21 : 30-10-2013 05:49 »  |  | 
 
 Наверно, что меню (или даже его пункт) - это отдельный window.
 не, окно меню - это один HWND-объект, пункты нарисованы Аня, Джон - а я обновляю окно меню попроще (если после выбора пункта нужно поменять вид меню) - заново его вывожу   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #22 : 30-10-2013 06:52 »  |  | 
 
 а я обновляю окно меню попроще (если после выбора пункта нужно поменять вид меню) - заново его вывожу  Нууу проще в данном случае, это как через попу стеклорезом.    Зачем выводить его заново, если оно уже отображается в нужном состоянии? |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #23 : 30-10-2013 07:34 »  |  | 
 
 Джон, ну, скажем так, ещё не отображается, ведь апдейт для команд я не прописывал ))   Ну и состав меню тоже у меня менялся, не только доступность пунктов |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Джон 
								простоАдминистратор    Offline 
								Пол:    | 
								|  | « Ответ #24 :  30-10-2013 16:29 »   |  | 
 
 Ну... если очень хочется поиздеваться над меню, то есть на этот случай ф-я - OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu). Она вызывается всякий раз перед тем как какое-нить меню (или сабменю) в программе раскроется. В этот момент с ним можно делать практически УСЁ. После этого оно будет показано в желаемом виде, без всяких дополнительных обновлений, или выводОв.   |  
						| 
								|  |  
								|  |  Записан | 
 
 Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома."Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
 "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
 "All science is either physics or stamp collecting." Ernest Rutherford
 "Wer will, findet Wege, wer nicht will, findet Gründe."
 |  |  | 
	|  |