Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2014, 00:51   #1
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию С++. Добавление строки меню

Доброго времени суток. Хотелось бы в программу добавить строку меню, но, создав в ResourceFiles файлик с этой строкой, при запуске она не появляется.

Сама задача про визуализацию линий электрического поля между зарядами уже решена, но хотелось бы добавить функцию пользовательского изменения параметров задачи, таких как, количество зарядов, их знак и пространственное расположение.

P.s. Также интересует вопрос, как можно связать кнопку в меню с новым диалоговым окном, в котором будут производиться действия, описанные выше.

P.P.S. Закомментированная часть должна по идее работать с этой строкой, но "привязать" ее я не могу

Заранее спасибо.
MyQwErTy вне форума Ответить с цитированием
Старый 08.03.2014, 00:51   #2
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Код:

//строим картину линий поля


// Объявления
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <math.h>
#include <stdio.h>
#include <tchar.h>



//имя класса окна
HINSTANCE hInst;
WCHAR szClassName[] = L"LineClass";
//заголовок окна
WCHAR szWindowTitle[] = L"Korneev V.        "
	L"   Vector-Field,       "
	L"   rotation  by  mouse  and  keyboard (arrows)";

// Угол вида на изображение
struct ANGLS {
	double fi, teta;
};

static ANGLS angl,anglOld;


//прототипы функций
BOOL RegisterApp(HINSTANCE hInst);
HWND CreateApp(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void LineCreate();
void LineDestroy();
void LinePaint(HWND,int);
void LineLButtonDown(HWND,int,int);
void LineMouseMove(HWND,int,int);
void DrawBox(HWND, HDC, ANGLS);
void LineLButtonUp(HWND);
void PointCorns();
void arrowVector(HDC hdc, int x1, int y1, int x2, int y2,double ze, COLORREF rgb);
double ZPalet(double z);
void ZbufLineWidth(HDC hdc, int x1, int y1, int x2, int y2,
				   double ze1, double ze2, int w, COLORREF rgb);
void ZbufParallelogram(HDC,int,int,double,int,int,double,
					   int,int,double,int,int,double,COLORREF);


//главная функция
int PASCAL WinMain(HINSTANCE hInst,
				   HINSTANCE hPrevInstance,
				   LPSTR     lpszCmdParam,
				   int       nCmdShow)
{
	MSG msg;

	if(!RegisterApp(hInst))  //регистрация приложения
		return FALSE;

	if(!CreateApp(hInst,nCmdShow))  //создание окна приложения
		return FALSE;

	while(GetMessage(&msg,NULL,0,0))   //цикл обработки сообщений
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return 0;
}

//регистрация класса окна*
BOOL RegisterApp(HINSTANCE hInst)
{
	WNDCLASS wc;

	wc.style         = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc   = WndProc;
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hInst;
	wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor		  = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = GetStockBrush(LTGRAY_BRUSH);
	wc.lpszMenuName  = (LPCTSTR)"APP_MENU";
	wc.lpszClassName = szClassName;

	return RegisterClass(&wc);
}

//создание окна
HWND CreateApp(HINSTANCE hInstance, int nCmdShow)
{
	HWND hwnd;

	hwnd = CreateWindow(szClassName,
		szWindowTitle,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		NULL,
		NULL,
		hInstance,
		NULL);

	if(hwnd == NULL)
		return hwnd;

	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);

	return hwnd;
}

//функция обработки сообщений  
LRESULT CALLBACK  WndProc(HWND hwnd, UINT msg,
						  WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	int x,y;
	switch(msg)
	{
	case WM_CREATE:
		LineCreate();
		break;

	case WM_PAINT:
		LinePaint(hwnd,1);
		break;

	case WM_LBUTTONDOWN:
		x = LOWORD(lParam);
		y = HIWORD(lParam);
		LineLButtonDown(hwnd,x,y);
		break;

	case WM_LBUTTONUP:
		LineLButtonUp(hwnd);
		InvalidateRect(hwnd,NULL,TRUE);
		break;


	case WM_MOUSEMOVE:
		x = LOWORD(lParam);
		y = HIWORD(lParam);

		LineMouseMove( hwnd,x,y);
		break;

	case WM_KEYDOWN:
		switch(wParam)
		{
		case VK_LEFT:
			angl.fi += 10;
			InvalidateRect(hwnd,NULL,TRUE);
			break;

		case VK_RIGHT:
			angl.fi -= 10;
			InvalidateRect(hwnd,NULL,TRUE);
			break;

		case VK_UP:
			angl.teta += 10;
			InvalidateRect(hwnd,NULL,TRUE);
			break;

		case VK_DOWN:
			angl.teta -= 10;
			InvalidateRect(hwnd,NULL,TRUE);
			break;
		}
		break;

/*	case WM_COMMAND:
		switch(LOWORD(wParam))
	{
			case ID_EXIT:
				PostQuitMessage(0);  //выход из цикла сообщений
				break;

			case ID_REDRAW:
				InvalidateRect(hwnd, NULL, TRUE); 
				break;


			case ID_DATA:
				EndDial = DialogBox(hInstApp, (LPCTSTR)IDD_DIALOG1, hwnd,
											DialProc);
				//создает диалоговое окно.
				// 1-ый параметр - дескриптор экземпляра приложения
				// 2-ой параметр - идентификатор шаблона диалогового окна 
				// 3-ий параметр - дескриптор родительского окна
				// 4-ый параметр - имя функции диалогового окна
					
				if(EndDial)
					InvalidateRect(hwnd, NULL, TRUE); 
				break;
			
		}
			break;

			*/

	case WM_DESTROY:
		LineDestroy();
		break;

	default:
		return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return 0L;
}
MyQwErTy вне форума Ответить с цитированием
Старый 08.03.2014, 11:19   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Код:
wc.lpszMenuName = (LPCTSTR)"APP_MENU";
Ответьте себе - зачем там нужен typecast?
waleri вне форума Ответить с цитированием
Старый 08.03.2014, 11:43   #4
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Созданное окно было в задании, и, соответственно, понятие не имею зачем это
MyQwErTy вне форума Ответить с цитированием
Старый 10.03.2014, 15:57   #5
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Заменил
Код:
wc.lpszMenuName = (LPCTSTR)"APP_MENU";
на

Код:
wc.lpszMenuName = MAKEINTRESOURCE(IDC_ELECTRICFIELD);
Так будет верно?
MyQwErTy вне форума Ответить с цитированием
Старый 12.03.2014, 20:52   #6
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Вопрос с менюшкой решил сам, но возник другой:
Код:
char S[10];
sprintf(S,"%6.2lf",-2.0);
SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT1), S);
Пишет, что невозможно в третьей строке преобразовать параметр 2 из char[10] в LPCWSTR.
Что за зверь этот LPCWSTR и как это исправить?
MyQwErTy вне форума Ответить с цитированием
Старый 12.03.2014, 21:00   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот здесь объяснение.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 12.03.2014, 21:10   #8
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Smitt&Wesson, спасибо за ссылку.

Так как все-таки исправить ошибку?
MyQwErTy вне форума Ответить с цитированием
Старый 13.03.2014, 10:26   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Так как все-таки исправить ошибку?
Формально: LPCWSTR = wchar_t * (по ссылке есть), а у вас char *. Ой, а как же это исправить, это ж надо 2 высшее получить чтоб понять.
p51x вне форума Ответить с цитированием
Старый 13.03.2014, 14:14   #10
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Ну что ж, могу поздравить себя. Я оказался сообразительнее чем Вы с вашим 2 образованием.
Все исправил, все работает. Советы неверны
MyQwErTy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Добавление пункта в контекстное меню. Kveldulv Microsoft Office Excel 3 02.03.2011 11:04
Добавление пункта меню Claster Win Api 1 17.05.2010 18:28
Добавление меню к окну приложения... MaTBeu Win Api 2 24.09.2008 20:23
Добавление списка в меню ГОСЕАН БД в Delphi 5 15.07.2007 13:34