Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание второго окна! Нужно открыть второе окно! 
:(
    Опции темы
Marisha1989
Дата 1.11.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



Добрый день, помогите пожалуйста, разобратся, как можна создать и открыть второе окно, когда ты с первого окна нажимаеш на кнопку!
Тоесть вот этот код, он создает окно и выводим там объекты, а также объект hButton, вот мне нуно чтобы при нажатии на этоу кнопку убиралось первое окно и появлялось второе. 
Код

LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM IParam);
HINSTANCE hInstance;
LPCTSTR lpszClassName="MyApplication";
char szTitle[]="Добро пожаловать в игру,       ";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HWND hWnd;
HWND hWnd1;
WNDCLASSEX wndcl;

wndcl.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wndcl.lpfnWndProc=(WNDPROC) WndProc;
wndcl.cbClsExtra = 0;
wndcl.cbWndExtra = 0;
wndcl.hInstance = hInstance;
wndcl.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndcl.hCursor = LoadCursor(NULL, IDC_ARROW);
wndcl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wndcl.lpszMenuName = NULL;
wndcl.lpszClassName = lpszClassName;
wndcl.cbSize = sizeof (WNDCLASSEX);
wndcl.hIconSm=0;

if(!RegisterClassEx (&wndcl))
return (FALSE);


hWnd =CreateWindow(lpszClassName, "First", WS_OVERLAPPEDWINDOW,
                   CW_USEDEFAULT, 0, CW_USEDEFAULT,0,
                   NULL,NULL, hInstance, NULL);
if (!hWnd)
return (FALSE);
ShowWindow (hWnd, nCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, 0,0,0))
{
TranslateMessage (&msg);
DispatchMessage(&msg);
 }
return(msg.wParam);
}


LRESULT CALLBACK WndProc (HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM IParam)
{
LPCTSTR lpText;
LPCTSTR lpCaption;
HDC hdc;
RECT rect;
char mas[]="Введите имя:";
static HWND hEdit, hButton;
char chBuff[50];

switch(uMsg)
{
case WM_PAINT:
{
 PAINTSTRUCT ps;
 HDC hdc= BeginPaint(hWnd,&ps);
 GetClientRect(hWnd,&rect);
 DrawText(hdc,mas,-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
 EndPaint(hWnd,&ps);
return 0;
}
case WM_CREATE:
{
 hEdit=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,330,300,300,20,\
                    hWnd,(HMENU)ID_EDIT,hInstance,NULL);


 hButton=CreateWindow("button","OK",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,430,350,100,30,
                      hWnd,(HMENU)ID_BUTTON,hInstance,NULL);



return 0;
}

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_EDIT:
{
if ((HIWORD(wParam))==EN_ERRSPACE)
MessageBox(hWnd,"Мало памяти",szTitle,MB_OK);
return 0;
}

case ID_BUTTON:
{

 return 0;
}
}
}


case WM_DESTROY:
{
        PostQuitMessage(0);
        break;
}
default:
        return(DefWindowProc(hWnd, uMsg, wParam, IParam));
}
return (0L);
}



Подскажите пожалуйста, может быть это как-то мона сделать через дочерное окно, куда именно надо напистаь и как это прописать???  smile 

Это сообщение отредактировал(а) Marisha1989 - 1.11.2008, 00:30
PM MAIL   Вверх
BorisVorontsov
Дата 1.11.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Тут так получается...

1. Регистрируешь новый оконный класс. Создаешь второй модуль, прописываешь там коллбэк-функцию для второго окна, в case ID_BUTTON создаешь второе окно посредством CreateWindow и вызываешь DestroyWindow для первого. Ну, и case WM_DESTROY: PostQuitMessage(0); переносишь в коллбэк-функцию второго окна.
2. Работаешь с тем же оконным классом. Так же в case ID_BUTTON создаешь второе окно и где-нибудь запоминаешь хэндл, затем вызываешь DestroyWindow для первого. В case WM_DESTROY смотришь, если hWnd равен хэндлу второго -- PostQuitMessage, иначе ничего не делать. Есть еще множество вариантов, но это самый простой.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Marisha1989
Дата 1.11.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



Пасибо, а скажи пожалуйста, просто закрасить или удалить все объекты с этой формы, по коду не будет менньше. Просто я так представила, что это еще столько же :(как бы нужно, чтобы при нажатии или появлялось другое окно, или же в этом опять писать, только чтобы оно было как бы очищено))) smile 
PM MAIL   Вверх
BorisVorontsov
Дата 1.11.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Цитата(Marisha1989 @  1.11.2008,  00:57 Найти цитируемый пост)
просто закрасить или удалить все объекты с этой формы, по коду не будет менньше.


Меньше, чем по п. 2 не будет, будет экономней в плане потребления ресурсов... А что тебе нужно?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Marisha1989
Дата 1.11.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



нужно получить любым способом получить, чтобы при нажатии кнопки выводилось новое окно или это окно очищалось, чтобы было пустое поле в котором будут новые компоненты)))тоесть мона новое , а мона просто очистить, вот и ен могу придумать как :( smile 
PM MAIL   Вверх
HumanAPI
Дата 4.11.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.2.2008

Репутация: нет
Всего: нет



Вообще то программа в корне не правильна ))
Главная оконная функция должна оставаться для главного окна (тоесть для самой игры) а приглашение это всего лиш диалог который описывается в ресурсе и имеет свою оконную функцию.
PM MAIL   Вверх
Andrey44
Дата 4.11.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Цитата(HumanAPI @  4.11.2008,  11:06 Найти цитируемый пост)
диалог который описывается в ресурсе

Совсем не обязательно.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Lycifer
Дата 10.11.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Я не работаю с GUI, но насколько я помню по старой памяти:
Любой компонент это окно(button,text and someone)
Любому окну можно сделать visible, а точнее ShowWindow(descriptor, flag) -кажется так может что не так, не очень помню это было давно и не правда
Дескриптор своих элементов ты всегда можеш узнать
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1080 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.