| 
| alex_proger | Дата: Вторник, 03 Июля 2012, 20:16 | Сообщение # 1 |  |   участник Сейчас нет на сайте | Итак я сегодня решил что моему "движку" не хватает консоли разработчика и решил я приделать консоль (окошко через winapi в котором будут выводиться этапы работы, ошибки и т.д.). Окно должно работать в отдельном потоке и тут возникла проблема : как работать с потоками в классе? 
 meConsole.h :
 
 Code  #ifndef CONSOLE_H
 #define CONSOLE_H
 
 #include <Windows.h>
 
 LRESULT CALLBACK winPC(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
 class meConsole
 {
 private:
 HWND MainWindowHandle;
 
 HINSTANCE _inst;
 LPCSTR    _title;
 public:
 bool InitWindowsApp(HINSTANCE instanceHandle, int show, LPCSTR title);
 meConsole(HINSTANCE inst, LPCSTR title);
 ~meConsole(void);
 };
 
 #endif
 
meConsole.cpp :
 
 Code  #include "meConsole.h"
 
 meConsole::meConsole(HINSTANCE inst, LPCSTR title)
 {
 _inst = inst;
 _title = title;
 
 InitWindowsApp(_inst,0,_title);
 MSG msg;
 ZeroMemory(&msg, sizeof(MSG));
 while(GetMessage(&msg, 0, 0, 0) )
 {
 // Транслируем сообщение и посылаем его функции обработке сообщений окна
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 }
 bool meConsole::InitWindowsApp(HINSTANCE instanceHandle, int show, LPCSTR title)
 {
 // Создание класса окна
 WNDCLASS wc;
 
 wc.style         = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc   = winPC;
 wc.cbClsExtra    = 0;
 wc.cbWndExtra    = 0;
 wc.hInstance     = instanceHandle;
 wc.hIcon         = LoadIcon(0, IDI_APPLICATION);
 wc.hCursor       = LoadCursor(0, IDC_ARROW);
 wc.hbrBackground =
 static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
 wc.lpszMenuName  = 0;
 wc.lpszClassName = "WinAPP";
 
 // Регистрация класса окна
 // В случае неудачи выводим сообщение об ошибке и возвращаем false
 if(!RegisterClass(&wc))
 {
 MessageBox(0, "RegisterClass - FailedL", 0, 0);
 return false;
 }
 
 MainWindowHandle = CreateWindow( "WinAPP", title, (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_VISIBLE), CW_USEDEFAULT, CW_USEDEFAULT, 450, 500, 0, 0, NULL, 0);
 // Если окно не было создано, выводим сообщени об ошибке и возвращаем false
 if(MainWindowHandle == 0)
 {
 MessageBox(0, "CreateWindow - FailedL", 0, 0);
 return false;
 }
 return true;
 }
 
 LRESULT CALLBACK winPC(HWND   windowHandle, UINT msg,  WPARAM wParam, LPARAM lParam)
 {
 // Обработка сообщений
 switch( msg )
 {
 // При уничтожении окна, отправить сообщение о выходе для прерывания обработки сообщений
 case WM_DESTROY:
 PostQuitMessage(0);
 return 0;
 }
 // Обработка сообщений по умолчанию
 return DefWindowProc(windowHandle, msg, wParam, lParam);
 }
 
 Помогите как в ф-ии meConsole(HINSTANCE inst, LPCSTR title) после присвоения значения переменных сделать отдельный поток в котором будет исполняться следующий код :
 
 Code  InitWindowsApp(_inst,0,_title);
 MSG msg;
 ZeroMemory(&msg, sizeof(MSG));
 while(GetMessage(&msg, 0, 0, 0) )
 {
 // Транслируем сообщение и посылаем его функции обработке сообщений окна
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 
 За верное решение или ссылку с нужным материалом + обеспечен (а может и ++)
   |  |  |  |  | 
| 
| Нохчи | Дата: Вторник, 03 Июля 2012, 20:20 | Сообщение # 2 |  | заслуженный участник Сейчас нет на сайте | [url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx]Вот[/url] 
 Многие вопросы по Windows отпадут, если посмотреть тут
 
 
 Сообщение отредактировал Нохчи - Вторник, 03 Июля 2012, 20:21 |  |  |  |  | 
| 
| alex_proger | Дата: Вторник, 03 Июля 2012, 20:36 | Сообщение # 3 |  |   участник Сейчас нет на сайте | Попытался сделать так : DWORD WINAPI MyThreadFunction( LPVOID lpParam ); (объявил вне класса чтобы CreateThread увидел) и теперь мачаюсь вот над чем :
 InitWindowsApp эта ф-ия объявлена в классе а MyThreadFunction вне класса и теперь надо как то её использовать. Если нужен обновлённый код могу скинуть по запросу.
 |  |  |  |  | 
| 
| Нохчи | Дата: Вторник, 03 Июля 2012, 20:41 | Сообщение # 4 |  | заслуженный участник Сейчас нет на сайте | Quote (alex_proger) InitWindowsApp эта ф-ия объявлена в классе а MyThreadFunction вне класса и теперь надо как то её использовать. Передавай нужные данные как параметры.
 
 Многие вопросы по Windows отпадут, если посмотреть тут
 |  |  |  |  | 
| 
| alex_proger | Дата: Вторник, 03 Июля 2012, 20:57 | Сообщение # 5 |  |   участник Сейчас нет на сайте | Подскажите пожалуйста как это сделать =) Добавлено (03.07.2012, 20:57)---------------------------------------------
 всё спасибо я нашёл ответ
 |  |  |  |  |