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) --------------------------------------------- всё спасибо я нашёл ответ
|
|
| |