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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 01:40   #1
winapiUSER
Новичок
Джуниор
 
Регистрация: 15.03.2013
Сообщений: 1
По умолчанию Обработка сообщений двух окон

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

Исходный код WinMain:

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
BOOL done=false;
//MessageBox(NULL,L"WINAPI WinMain", L"Start FullScreen?",MB_YESNO|MB_ICONQUESTI ON);
UNREFERENCED_PARAMETER(hPrevInstanc e);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: разместите код здесь.

HACCEL hAccelTable;

// Инициализация глобальных строк
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_BLOCKCOLISION_WINAPIBUILD, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);
InitInstance2(hInstance,nCmdShow);
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_BLOCKCOLISION_W INAPIBUILD));
//ShowWindow(hWndGl,SW_HIDE);

while(!done) // Loop That Runs While done=FALSE
{
if (ActivateUserInterface == true) //если пользовательский интерфейс активен, т.е. OpenGL окно еще не инициализировано
{

if (PeekMessage(&msg,hWnd,0,0,PM_REMOV E)) // Is There A Message Waiting?
{
if (msg.message==WM_QUIT) // Have We Received A Quit Message?
{

done = TRUE;
MessageBox(NULL,L" message", L"message message?",MB_YESNO|MB_ICONQUESTION) ;


}
else
{
TranslateMessage(&msg); // Translate The Message
DispatchMessage(&msg); // Dispatch The Message
}
}
}
if (ActivateGL == true) //если OpenGL окно активно
{

if (PeekMessage(&msg,hWndGl, 0, 0 ,PM_REMOVE)) // считываем сообщения для hWndGl
{
TranslateMessage(&msg); // Translate The Message
DispatchMessage(&msg); // Dispatch The Message

}
else // If There Are No Messages
{
// Draw The Scene. Watch For ESC Key And Quit Messages From DrawGLScene()
if (active) // Program Active?
{
if (keys[VK_ESCAPE]) // если нажали Escape значит закрываем окно OPenGL возвращаемся в интрерфейс
{

keys[VK_ESCAPE] = false;
//done=TRUE;
KillGLWindow();
ActivateUserInterface = true;
ActivateGL = false;
ShowWindow(hWnd, SW_NORMAL);
SetForegroundWindow(hWnd);
SetFocus(hWnd);
EnableWindow(StartButton[0]->GetWND(), TRUE); // ESC
keyEscape = true;
}
else if (!keys[VK_ESCAPE])
{
//MessageBox(NULL,L"Escape.",L"ERROR" ,MB_OK|MB_ICONEXCLAMATION);
DrawGLScene(); // Draw The Scene
SwapBuffers(hDCGl); // Swap Buffers (Double Buffering)
}
}

if (keys[VK_F1]) //меняем fullscreen
{
keys[VK_F1] = FALSE; // If So Make Key FALSE
KillGLWindow(); // Kill Our Current Window
fullscreen=!fullscreen; // Toggle Fullscreen / Windowed Mode

if (!CreateGLWindow( L"Block Colision",640,480,16,fullscreen))
{
return 0; // Quit If Window Was Not Created
}
}
}

}


}


return (msg.wParam); // Exit The Program
}
winapiUSER вне форума Ответить с цитированием
Старый 15.03.2013, 09:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Откуда должно взяться WM_QUIT?
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка сообщений pproger Общие вопросы C/C++ 8 02.07.2011 01:25
Обработка сообщений приложением Zemelya Общие вопросы C/C++ 1 12.02.2011 21:49
обработка сообщений из файла fiascko Общие вопросы Delphi 18 30.03.2010 09:44
Обработка сообщений в приложении без окон. kalexi Win Api 2 26.06.2009 20:12