|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.03.2013, 01:40 | #1 |
Новичок
Джуниор
Регистрация: 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 } |
15.03.2013, 09:10 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Откуда должно взяться WM_QUIT?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обработка сообщений | 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 |