3PPC.net
Старый 03.08.2008, 13:07 #1
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
wc.lpszMenuName сделаем меню :)

Перечитав некоторую инфу по С++ я так понял что нужно прописывать что-то вроде

wc.lpszMenuName=НАЗВАНИЕ_ФУНКЦИИ_С_МЕНЮ;

Где можно найти инфу о том как прописывать эту функцию?
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 03.08.2008, 14:44 #2
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
с английским дружим?
lpszMenuName
lpsz - непереводится
но Menu Name перводится как имя меню
это не функция,а указатель на идентификатор меню
добавленна для поддержки совместимости с WinAPI,на КПК работает не так как ожидается (создаёт меню СВЕРХУ аля WinCE) поэтому выставляй в 0
P.S.
посмотри в этой ветке я делал мини мануал как начать писать проги на С++
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 03.08.2008, 17:36 #3
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
Т.е. нужно будет что-то отдельно по WinAPI изучать..ладно буду искать инфу и изучать эту степь.

А в этой ветке я все темы читал - всё наскрёб на ус себе
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 03.08.2008, 18:00 #4
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
да,без винапи в винде никуда
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 03.08.2008, 20:28 #5
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
Так стоп. WinAPI для форм нужен, да? Ну там кнопки делать и т.д. А он и для меню тоже необходим? Чтобы сделать номарльное меню внизу как у всех номральных людей?
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 03.08.2008, 22:27 #6
Аватар для Deanit
Deanit Deanit вне форума
Новичок
 
Регистрация: 03.08.2008
Адрес: Ростов-на-Дону
Сообщений: 8
Репутация: 1
Deanit Deanit вне форума
Новичок
Аватар для Deanit
 
Регистрация: 03.08.2008
Адрес: Ростов-на-Дону
Сообщений: 8
Репутация: 1
Устройство: Hewlett-Packard iPAQ hx2790
Да. В msdn валяется книжко Programming Microsoft Windows CE .NET, Third Edition
by Douglas Boling
там, кажись, подробно расписано.
WinAPI нужен для того, чтобы управлять виндой, всеми ее доступными аспектами, пофигу на каком языке, лишь бы среда была.
__________________
@€ <{Абарагвагва!}
Deanit вне форума   Ответить с цитированием Цитировать выделенное
Старый 04.08.2008, 10:49 #7
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
Dollor, в теории ОС сказанно что ОС предоставляет интерфейс для выполнения программ юзера
вот этот интерфейс и называется у винды WinAPI (Application Programming Interface)

добавлено через 4 минуты
Dollor,у меня смутное подозрение что у тебя код какой то левый выходит,показывай,а то ты видимо долго ещё барахтаться будешь

Последний раз редактировалось tz-lom; 04.08.2008 в 10:49. Причина: Добавлено сообщение
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 04.08.2008, 18:38 #8
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
Код из соседней темы взят..твой между прочим ))
Я его пытался под тестовую прогу для себя сделать вот код main.cpp
Код:
#include <windows.h>										//подключаем файл для получения функций WinAPI
#include <windowsx.h>
#include "menu.h"

const TCHAR	WINDOWNAME[]	= TEXT("test");		//объявляем константой имя окна,в принципе можно было бы обойтись и #define но обычно удобнее делать так
const TCHAR	WINDOWCLASS[]	= TEXT("test");		//обявляем так же имя класса

HINSTANCE	hin		= 0;									//здесь будем хранить дескриптор приложения
HWND		hwnd	= 0;									//а здесь-дескриптор окна

LRESULT APIENTRY WndProc(HWND,UINT,WPARAM,LPARAM);			//заранее объявим оконную функцию

ATOM RegClass()												//регистрируем класс
{
	WNDCLASS wc;											//многие функции принимают вместо кучи параметров структуру с этими параметрами,например RegisterClass,в этой структуре содержатся все её параметры
	wc.style=0;												//дополнительные стили окна,у нас их нет
	wc.cbClsExtra=0;										//дополнительная память для класса не требуется
	wc.cbWndExtra=0;										//дополнительная память для окна не требуется
	wc.hInstance=hin;										//указываем что класс нужен неашему приложению
	wc.hIcon=0;												//в КПК иконки у окна нет,добавленно для совместимости с старыми версиями WinAPI реакции на значение у системы не будет
	wc.hCursor=0;											//курсора тоже нет,см выше
	wc.hbrBackground=HBRUSH(COLOR_WINDOW);					//фон окна,пусть будет стандартный заданный раскраской системы
	wc.lpszMenuName="MyMenu";										//меню нет,хотя в КПК есть меню,через этот параметр их лучьше не делать
	wc.lpfnWndProc=WndProc;									//окнная процедура-она обрабатывает все сообщения приходящие окну и по сути ответственна за обработку всех действий пользователя
	wc.lpszClassName=WINDOWCLASS;							//задаём имя класса
	return RegisterClass(&wc);								//собственно регистрация класса
}

void msgLoop()												//цикл обработки сообщений
{
	MSG msg;												//здесь будет храниться очередное сообщение
	while(GetMessage(&msg,NULL,0,0))						//получаем сообщение
	{
		TranslateMessage(&msg);								//посылаем его окну
		DispatchMessage(&msg);								//и удаляем
	}
}


int APIENTRY WinMain(HINSTANCE hinst,HINSTANCE hprevinst,LPWSTR cmdline,int cmdshow)	//точка входа в програму
{
	hin=hinst;												//запоминаем десприптор приложения
	if(!RegClass())											//регистрируем класс окна
	{
		MessageBox(0,TEXT("Error registering window class for process"),TEXT("Error"),MB_OK);	//если не вышло-выписываем сообщение об ошибке
		return 1;											//и выходим с ошибкой
	}
	hwnd=CreateWindow (WINDOWCLASS,WINDOWNAME, WS_VISIBLE,	//создаём окно
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,	//координаты по умолчанию-от панели пуск до низа экрана ширина равна ширине экрана
		(HWND)NULL, NULL, hin, NULL);						//наше окно не принадлежит другим,у него нет меню,оно привязанно к нашему дескриптору приложения и параметров мы не передаём
	if(hwnd==NULL)											//если окно не создалось
	{
		MessageBox(0,TEXT("Error creating window for process"),TEXT("Error"),MB_OK);	//пишем ошибку
		return 1;											//и выходим с ошибкой
	}
	ShowWindow(hwnd,SW_SHOW);								//показываем окно
	UpdateWindow(hwnd);										//обновляем его
	msgLoop();												//запускаем цикл сообщений
	return 0;												//выходим из программы
}

LRESULT APIENTRY WndProc(HWND hwin,UINT msg,WPARAM wparam,LPARAM lparam)	//оконная процедура
{
	static HWND button=0;
	static HWND combobox=0;
	static HWND edit=0;
	static HWND listbox=0;
	static HWND text=0;
	static HWND scrollbar=0;
	static HWND vscrollbar=0;
	switch(msg)												//выбираем интересующие нас сообщения
	{
	case WM_CREATE:
		button		= CreateWindow(TEXT("BUTTON"),TEXT("кнопка"), WS_VISIBLE|WS_CHILD,						20,0,180,40,hwin,NULL,hin,NULL);
		combobox	= CreateWindow(TEXT("COMBOBOX"),TEXT("выпадающее меню"),WS_VISIBLE|WS_CHILD,			20,40,180,200,hwin,NULL,hin,NULL);
		edit		= CreateWindow(TEXT("EDIT"),TEXT(""), ES_MULTILINE|WS_VISIBLE|WS_CHILD|WS_BORDER,		20,80,180,40,hwin,NULL,hin,NULL);
		listbox		= CreateWindow(TEXT("LISTBOX"),TEXT(""),LBS_STANDARD|WS_VISIBLE|WS_CHILD|WS_BORDER|
																					LBS_DISABLENOSCROLL,	20,120,180,80,hwin,NULL,hin,NULL);
		text		= CreateWindow(TEXT("STATIC"),TEXT("текст"), WS_BORDER|WS_VISIBLE|WS_CHILD,				20,200,180,40,hwin,NULL,hin,NULL);

		//элементы созданны,теперь добавим немного смысла
		ComboBox_AddString(combobox,TEXT("Первый"));
		ComboBox_AddString(combobox,TEXT("Второй"));
		ComboBox_AddString(combobox,TEXT("Третий"));
		ComboBox_SetCurSel(combobox,0);
		Edit_SetText(edit,TEXT("Это пример текста для компонента EDIT"));
		ListBox_AddString(listbox,TEXT("Первый"));
		ListBox_AddString(listbox,TEXT("Второй"));
		ListBox_AddString(listbox,TEXT("Третий"));
		ListBox_SetCurSel(listbox,0);

		break;


    case WM_COMMAND:
		if((HWND)lparam==button)
		{
			MessageBox(hwin,TEXT("Нажата кнопка"),TEXT("Уведомление"), MB_OKCANCEL);
			break;
		}
		break;

	/*case WM_ACTIVATE:
		if(LOWORD(wparam)==WA_INACTIVE)
			SendMessage(hwin,WM_DESTROY,0,0);
		break;*/
	case WM_DESTROY:										//сообщение уничтожения окна
		PostQuitMessage(0);									//посылаем системе уведомление что программа завершает работу
		break;
	default:
		return DefWindowProc(hwin,msg,wparam,lparam);		//если сообщение не обработанно его должен обработать стандартный обработчик системы
	}
	return 0;
}
А вот код main.h
Код:
MyMenu MENU
{
	POPUP "&File"
	{
		MENUITEM "&Open", 101
		MENUITEM SEPARATOR
		MENUITEM "&Exit", 102
	}

	POPUP "&Examples"
	{
		POPUP "Example 1"
		{
			MENUITEM "1&1", 103
			MENUITEM "1&2", 104
		}

		POPUP "Example &2"
		{
			MENUITEM "2&1", 105
			MENUITEM "2&2", 106
		}
	}
	MENUITEM "&Help", 111
}
ПРоблема в том, что при компиляции он ругается на wc.lpszMenuName="MyMenu"; Говорит: error C2440: '=' : cannot convert from 'const char [7]' to 'LPCWSTR'

Чего это я так и не понял)

А далее уже на main.h на его код ругается...

З.Ы. код который в main.h уже взят из мануалов...скачал некоторые книги про WinAPI, по твоему совету, начал изучать...вроде как норма понятно, благо опыт в программирвоании у меня есть только вот не в той сфере к сожалению Но вот загвоздка уже пошла.. Пытаюсь сделать меню
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 04.08.2008, 22:28 #9
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
ну,вот и нашлась ошибка
то что ты сделал main.h пререименовыай в resource.rc
мдэ,далее
чтобы сделать меню надо создать менюбар
Код:
HWND CreateBar(HWND hwnd)
{
	SHMENUBARINFO mbi;
	memset(&mbi, 0, sizeof(SHMENUBARINFO));
	mbi.cbSize		= sizeof(SHMENUBARINFO);
	mbi.hwndParent	= hwnd;
	mbi.nToolBarId	= IDR_MENUBAR;
	mbi.hInstRes	= hin;
	mbi.nBmpId		= 0;
	mbi.cBmpImages	= 0;
	mbi.dwFlags		= SHCMBF_HMENU;

	if (!SHCreateMenuBar(&mbi)) 
		return NULL;
	RECT rc,rc2;
	GetWindowRect(hwnd,&rc);
	GetWindowRect(mbi.hwndMB,&rc2);
	rc.bottom-=(rc2.bottom-rc2.top);
	SetWindowPos(hwnd,HWND_TOP,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,SWP_SHOWWINDOW);
	return mbi.hwndMB;
}
вызываем в WM_CREATE передавая хендл окна посланный ЧЕРЕЗ ВЫЗОВ ФУНКЦИИ
почему так акцентирую внимание-часто заводится глобальная переменная с окном созданным
так вот,при вызове WM_CREATE эта переменная ещё не заполнена хендлом окна и содержит рандомное значение,поэтому и функция не сработает

в твоём случае IDR_MENUBAR надо заменить на MyMenu
но здесь следующий косяк-MyMenu должнобыть капсом (как у блондинко)
иначе компилятор ресурсов взбеленится
вообще рекомендация следующая
1-снести нах этот main.h
2-добавить к проекту ресурсный файл (.rc имя абы было)
3-отредактировать ресурсный файл (на панели слева)
4-подключить "resource.h"
5- заменить IDR_MENUBAR на имя меню в ресурсном файле

если дело табак то спрашивай,но лучьше попробовать самому разобраться
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 05.08.2008, 05:32 #10
Аватар для Getorix
Getorix Getorix вне форума
Застенчивый
 
Регистрация: 05.03.2008
Сообщений: 15
Репутация: 2
Getorix Getorix вне форума
Застенчивый
Аватар для Getorix
 
Регистрация: 05.03.2008
Сообщений: 15
Репутация: 2
Устройство: Qtek S100
Цитата:
ПРоблема в том, что при компиляции он ругается на wc.lpszMenuName="MyMenu"; Говорит: error C2440: '=' : cannot convert from 'const char [7]' to 'LPCWSTR'
Поскольку покетовая ось юникодовая, надо не забывать ставить L перед строками:
wc.lpszMenuName=L"MyMenu";
Или так еще можно:
wc.lpszMenuName=TEXT("MyMenu");
__________________
[SIGPIC][/SIGPIC]
Getorix вне форума   Ответить с цитированием Цитировать выделенное
Старый 05.08.2008, 14:34 #11
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
Вобещм проделал следующе:
1) Удалил menu.h и убрал инклуд к нему из файла .cpp
2) выставил wc.lpszMenuName=0;
3) Создал русерс ентот. в файле resource.h прописал код который ты дал и переименовал то дело.
Но, если не инклудить #include "resource.h" - то всё норм просто меню никакого нет - это понятно А если инклудить то куча ошибок начинается не понятных. И ещё, я не догнал как вызвать это дело в WM_CREATE ?

Как-то всё запутанно-замутано, аж руки уже опускаются
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 07.08.2008, 00:44 #12
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
Dollor,завтра код покажу
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 08.08.2008, 21:35 #13
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
ох блин,жди до воскресенья вообщем,или сам попробуй разобраться,у меня даже демы никакой нету
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Старый 08.08.2008, 23:19 #14
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
м - не выходит... Изучаю мануалы по WinAPI но пока ничего полезного..только теория
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 25.08.2008, 20:52 #15
Аватар для Dollor
Dollor Dollor вне форума
Новичок
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Dollor Dollor вне форума
Новичок
Аватар для Dollor
 
Регистрация: 03.08.2008
Сообщений: 9
Репутация: 0
Устройство: E-TEN Glofiish X500+
tz-lom, хеееелп ты где? )
Dollor вне форума   Ответить с цитированием Цитировать выделенное
Старый 30.08.2008, 16:58 #16
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
tz-lom tz-lom вне форума
Former Staff
 
Регистрация: 19.06.2007
Адрес: в сети
Сообщений: 680
Репутация: 134
Устройство: HP iPAQ H1930
Dollor,да забываю всё время,стучи в асю
tz-lom вне форума   Ответить с цитированием Цитировать выделенное
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню Пуск Reved База знаний, или шаманство для посвященных 3 21.12.2010 09:04
Меню в carrera x430 cvc Помощь и решение проблем 1 17.08.2010 17:33
Иконки в меню WM6.5 mao Архив 9 31.01.2010 16:27

 


Текущее время: 23:35. Часовой пояс GMT +3.


Powered by vBulletin®
Copyright ©2000 - 2017, vBulletin Solutions, Inc.