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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2013, 22:24   #1
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию два окна

Доброго времени суток

Подскажите пожалуйста как по кнопке взвать окно
Написал вот так

Код:
/* ************************************************************
Основной фаил проекта test
Средв разработки: Microsoft Visual Studio Ultimate 2012
************************************************************* */

// Библиотеки;
#include <Windows.h>
#include <WinUser.h>

// Константы;
#define width 800 //Ширина экрана;
#define height 600 //Высота экрана;

int CALLBACK WinMain(HINSTANCE hInstanceMain, HINSTANCE hPrevInstanceMain, LPSTR lpCmdLineMain, int nCmdShowMain) {

	//Объявление класса;
	WNDCLASSEX windowClass;

	//ID окна;
	HWND hWndMain;

	//Сообщение в окне;
	MSG uMsgMain;

	//Заполнение класса окна;
	memset(&windowClass, 0, sizeof(WNDCLASSEXW));						//Заполняем нулями;
	windowClass.cbSize = sizeof(WNDCLASSEX);							//Определение собственого размера;
	windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);					//Определение курсора;
	windowClass.hIcon = LoadIcon(NULL, IDI_ASTERISK);						//Определение иконки;
	windowClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);	//Определение Фона окна;
	windowClass.hInstance = hInstanceMain;
	windowClass.lpfnWndProc = WindowProcMain;								//Вызов метода WindowProc;
	windowClass.lpszClassName = "Simple Class";							//Определение имени Класса;

	//Регистрация окна;
	RegisterClassEx(&windowClass);

	//Создаём окно;
	hWndMain = CreateWindow(windowClass.lpszClassName, "Формо написанная средствами Visual C++", 
		WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,
		(GetSystemMetrics(SM_CXSCREEN) - width) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2,
		width, height, NULL, NULL, NULL, NULL);

	CreateWindow("button", "кнопка 1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
		700, 10, 80, 30, hWndMain, (HMENU)10, hInstanceMain, NULL);
	CreateWindow("button", "кнопка 2", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
		700, 50, 80, 30, hWndMain, (HMENU)20, hInstanceMain, NULL);


	//Показываем окно;
	ShowWindow(hWndMain, nCmdShowMain);
	
	//Зациклим окно;
	while (GetMessage(&uMsgMain, hWndMain, NULL, NULL)) {
		TranslateMessage(&uMsgMain);
		DispatchMessage(&uMsgMain);
	}

	return uMsgMain.wParam;
}

int CALLBACK WindFerst(HINSTANCE hInstanceFerst, HINSTANCE hPrevInstanceFerst, LPSTR lpCmdLineFerst, int nCmdShowFerst) {
	WNDCLASSEX windFerstClass;
	HWND hWndFerst;
	MSG uMsgFerst;

	memset(&windFerstClass, 0, sizeof(WNDCLASSEXW));
	windFerstClass.cbSize = sizeof(WNDCLASSW);
	windFerstClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	windFerstClass.hIcon = LoadIcon(NULL, IDI_ASTERISK);
	windFerstClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	windFerstClass.hInstance = hInstanceFerst;
	windFerstClass.lpfnWndProc = WindowProcMain;
	windFerstClass.lpszClassName = "Simple Class";
	
	RegisterClassEx(&windFerstClass);

	hWndFerst = CreateWindow(windFerstClass.lpszClassName, "Вложенная форма №2", 
		WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,
		(GetSystemMetrics(SM_CXSCREEN) - width) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2,
		width, height, NULL, NULL, NULL, NULL);
		ShowWindow(hWndFerst, nCmdShowFerst);
	
	while (GetMessage(&uMsgFerst, hWndFerst, NULL, NULL)) {
		TranslateMessage(&uMsgFerst);
		DispatchMessage(&uMsgFerst);
	}
}

LRESULT CALLBACK WindowProcMain(HWND hWndMain, UINT uMsgMain, WPARAM wParamMain, LPARAM lParamMain) {

	switch (uMsgMain) {
	case WM_COMMAND: 
		if (LOWORD(wParamMain) == 10) MessageBox(hWndMain, "Ура меня написали", "Да", 0);
		if (LOWORD(wParamMain) == 20) WindFerst(HINSTANCE hInstanceFerst, HINSTANCE hPrevInstanceFerst, LPSTR lpCmdLineFerst, int nCmdShowFerst);
		break;
	case WM_CLOSE:
		ExitProcess(0);
		break;
	default:
		return DefWindowProc(hWndMain, uMsgMain, wParamMain, lParamMain);		
	}
}
На красную строку компилятор ругается как
Цитата:
1> main.cpp
1>d:\profiles\mirvaliev\documents\v isual studio 2012\projects\test\test\windowproc_ rec.h(14): error C2275: HINSTANCE: недопустимое использование этого типа в качестве выражения
1> c:\program files\windows kits\8.0\include\shared\minwindef.h (242): см. объявление "HINSTANCE"
1>d:\profiles\mirvaliev\documents\v isual studio 2012\projects\test\test\windowproc_ rec.h(14): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "hInstanceFerst"
1>d:\profiles\mirvaliev\documents\v isual studio 2012\projects\test\test\windowproc_ rec.h(14): error C2059: синтаксическая ошибка: )
1>d:\profiles\mirvaliev\documents\v isual studio 2012\projects\test\test\windowproc_ rec.h(14): error C3861: WindFerst: идентификатор не найден
Понимаю, что где то не так
Мой алгоритм был таков, что основная процедура вызывает форму с двумя кнопками Кнопка 1 просто а кнопка 2 для вызова второй формы
В процедуру ветвления case по условию вызывается процедура которая покажет второе окно

Заранее Спасибо
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Старый 24.11.2013, 00:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 WindFerst(hInstanceFerst, hPrevInstanceFerst, lpCmdLineFerst, nCmdShowFerst);
Я уже не буду спрашивать зачем ты туда типы втулил, ибо +100500 это код не тобой написан.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два листа - два события, одновременность срабатывания двух макросов strannick Microsoft Office Excel 20 03.04.2012 16:49
Вывод видео в два окна Женя 24 Мультимедиа в Delphi 3 07.01.2012 15:06
Два монитора, 2 окна, каждое на своем... REDZERG Общие вопросы Delphi 3 08.09.2011 20:37
Обработчик. Два (2) окна. Alex Cones Win Api 13 18.09.2010 23:30
два TMediaPlayer и два AVI-файла zeleniy Компоненты Delphi 0 01.06.2007 14:14